有人知道一种动态设置pytest测试参数的解决方法。
示例:
resp = []
def test_1():
r = requests.get(<some url>)
resp = <parse a list out of response r>
@pytest.mark.parameterize("response",resp)
def test_2(response):
<Use resp values and pass it one by one to another api>
我在pytest github上遇到了以下问题,与我的问题几乎相同。
https://github.com/pytest-dev/pytest/issues/3273
根据此讨论,pytest在执行任何测试之前对测试进行参数设置。不支持运行时参数化。有谁知道解决此问题的解决方法或Python方法?
答案 0 :(得分:0)
不要使测试相互依赖。如here所述,这不是一个好习惯。
如果要重用请求响应,可以将其包装到fixture中。
ID=02141592cc0000000100000000000000
模拟请求以使测试独立于远程资源也是一个好主意。您可以使用responses库。
@pytest.fixture(scope="module")
def response():
import requests
return requests.get(<some url>)
def test(response):
<Use resp values and pass it one by one to another api>
答案 1 :(得分:0)
Adrian Krupa的答案很接近,现在添加响应参数:
CANNED_RESPONSES = dict(OK=200, REDIRECT=304, SERVER_ERROR=500)
RESPONSE = 'response'
def pytest_generate_tests(metafunc):
if RESPONSE in metafunc.fixturenames:
ids = list(CANNED_RESPONSES.keys())
responses = list(CANNED_RESPONSES.values())
metafunc.parametrize(RESPONSE, responses, ids=ids)
def test_flar(response):
print response
通过这种方式,您可以在-v中获得命名ID,并获得一组罐头答案的多个测试:
test_in.py::test_flar[OK] 200
PASSED
test_in.py::test_flar[REDIRECT] 304
PASSED
test_in.py::test_flar[SERVER_ERROR] 500
PASSED