Nac*_*cht 4 python testing pytest
在pytest中,我可以传递参数进行测试(使用fixture或装饰器@pytest.fixture(params=list-of-params)).
当测试完成后,如果测试失败,这是传递的参数显示在结果,如TestCheckoutPage.test_address_edit[True]或False如果它是假的.
如何访问这些参数并将其添加到终结器?request.param似乎不起作用,即使这是你在制作灯具时获得参数的方式:
@pytest.fixture(params=[True, False])
def user(request):
return request.param
Run Code Online (Sandbox Code Playgroud)
这样可行.但是,如果我尝试将其传递给测试:
class TestClass:
def test_something(self, user):
pass
Run Code Online (Sandbox Code Playgroud)
然后,使用autouse fixture收集信息:
@pytest.fixture(autouse=True)
def set_driver(self, request):
print request.param
Run Code Online (Sandbox Code Playgroud)
这将引发一个错误,说有没有param在FixtureRequest.
有没有办法让我可以获得该参数?我试图让Selenium在测试失败时截取屏幕截图,但因为带参数的测试具有相同的名称和类名以及所有,它正在为第一次执行写入文件,然后将其覆盖第二,第三,...... ,时间到了.所以我想将参数添加到文件名中以避免这种情况.
谢谢!
实际上,request.param仅在定义参数化的夹具功能中可用.如果您需要user在set_driver夹具中,您可以尝试这样做:
import pytest
@pytest.fixture(params=[True, False])
def user(request):
return request.param
class TestHello:
@pytest.fixture(autouse=True)
def set_driver(self, user):
print "set_driver sees", user
def test_method(self):
assert 0
Run Code Online (Sandbox Code Playgroud)
如果你只想set_driver做一些user实际参与测试的事情,那么你可以这样做:
import pytest
@pytest.fixture(params=[True, False], scope="module")
def user(request):
return request.param
@pytest.fixture(autouse=True)
def set_driver(request):
if "user" in request.fixturenames:
user = request.getfuncargvalue("user")
print "set_driver sees", user
def test_function(user):
assert 0
def test_function_nouser():
assert 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5669 次 |
| 最近记录: |