我已参数化我的装置来调用 API,每次调用时使用不同的输入数据发送到
POST
请求,范围为 class
。因为我需要检查 API 响应与发送的数据。我需要将灯具的请求 params
读取到测试中。
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
的self
属性是不同的。为什么会这样呢?有没有办法实现这个目标?
您可以将
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
仅在定义了参数化的夹具功能中可用。
另一种可能性是引入另一个参数化的夹具并返回参数。当前的夹具和测试功能使用这个新的夹具来获取参数。
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_param