我已经参数化了我的夹具来调用API,使用不同的输入数据在每个调用上发布请求,其作用域为class。因为我需要用发送的数据检查API响应。我需要把这些装置的请求参数读入测试。
class Test_create_fixture():
@pytest.fixture(scope="class", params=[0, 1])
def my_fixture(self, request):
"Call incident creation api."
# POST request to API using params value in request data, get data from API
my_data = {'abc': 123, 'severity': 0} # this data is from API
self.data = {'severity': request.param}
return my_data
def test_incident_severity(self, my_fixture, request):
print("self.data", self.data) # 'Test_create_fixture' object has no attribute 'data'
assert my_fixture.get('severity', False) == request.param # AttributeError: 'FixtureRequest' object has no attribute 'param'但是,当我运行这个程序时,我无法读取传递给治具测试的请求参数。还试图在实例变量中保存,但没有工作。我观察到,夹具中的id()特性与测试中的self特性不同。为甚麽这样呢?有办法做到这一点吗?
发布于 2019-10-11 04:40:00
您可以将request.param从夹具传递到测试函数。您可以将它添加到my_data对象本身。
class Test_create_fixture():
@pytest.fixture(scope="class", params=[0, 1])
def my_fixture(self, request):
"Call incident creation api."
# POST request to API using params value in request data, get data from API
my_data = {'abc': 123, 'severity': 0, 'req_param': request.param} # this data is from API
return my_data
def test_incident_severity(self, my_fixture):
assert my_fixture.get('severity', False) == my_fixture.get('req_param')更新:
由于您正在将夹具参数化,因此request.param只在定义参数化的夹具函数中可用。
另一种可能是引入另一个参数化并返回参数的夹具。当前的夹具和测试函数使用这个新的夹具来获得param。
class Test_create_fixture():
@pytest.fixture(scope="class", params=[0,1])
def req_param(self, request):
return request.param
@pytest.fixture(scope="class")
def my_fixture(self, req_param):
"Call incident creation api."
# POST request to API using req_param in request data, get data from API
my_data = {'abc': 123, 'severity': 0} # this data is from API
return my_data
def test_incident_severity(self, my_fixture, req_param):
assert my_fixture.get('severity', False) == req_paramhttps://stackoverflow.com/questions/58319619
复制相似问题