• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

pytest中的全局变量

python 来源:Kumar 4次浏览

在Pytest中,我正在尝试做下面的事情,我需要保存先前的结果,并将当前/当前结果与先前的结果进行多次迭代比较。 我已经做了如下方法:pytest中的全局变量

@pytest.mark.parametrize("iterations",[1,2,3,4,5]) ------> for 5 iterations 
@pytest.mark.parametrize("clsObj",[(1,2,3)],indirect = True) ---> here clsObj is the instance. (clsObj.currentVal, here clsObj gets instantiated for every iteration and it is instance of **class func1**) 

presentVal = 0 
assert clsObj.currentVal > presrntVal 
clsObj.currentVal = presentVal 

当我做如上我每次循环presentVal得到的分配为0(期望的,因为它是局部变量)。取而代之,我试图宣布presentVal为全球性的,global presentVal,并且我在我的测试用例上方初始化了presentVal,但没有好转。

class func1(): 
    def __init__(self): 
     pass 
    def currentVal(self): 
     cval = measure() ---------> function from where I get current values 
     return cval 

有人建议如何pytest或其他最好的办法

感谢事先声明全局变量!


===========解决方案如下:

你在找什么叫做“夹具”。看看下面的例子,它应该解决您的问题:

import pytest 

@pytest.fixture(scope = 'module') 
def global_data(): 
    return {'presentVal': 0} 

@pytest.mark.parametrize('iteration', range(1, 6)) 
def test_global_scope(global_data, iteration): 

    assert global_data['presentVal'] == iteration - 1 
    global_data['presentVal'] = iteration 
    assert global_data['presentVal'] == iteration 

你基本上可以跨越测试共用一个固定的实例。它适用于像数据库访问对象更加复杂的东西,但它可以是一些小事就像一本字典:)

Scope: sharing a fixture instance across tests in a class, module or session


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)