![](/img/trans.png)
[英]How to import a python inside a fixture and use them as global variables for each test in Pytest?
[英]python pytest - How can I get a test markers inside its fixture methods?
我在 pytest 中进行了测试,并添加了一些标记,例如:' @pytest.mark.xfail
',测试有几种固定方法。 如何使用夹具方法获得某些测试的所有标记?
可以使用iter_markers
从夹具请求node
属性中获取标记,如以下(无意义的)示例所示:
import pytest
@pytest.fixture
def get_marks(request):
marks = [m.name for m in request.node.iter_markers()]
if request.node.parent:
marks += [m.name for m in request.node.parent.iter_markers()]
yield marks
@pytest.mark.parametrize('number', [1, 2, 3])
@pytest.mark.foo
@pytest.mark.xfail
def test_marks(get_marks, number):
print(get_marks)
assert 'xfail' in get_marks
assert number == 42
这给出了 output:
...
xfail [100%]['parametrize', 'xfail', 'foo']
get_marks = ['parametrize', 'xfail', 'foo'], number = 3
@pytest.mark.parametrize('number', [1, 2, 3])
@pytest.mark.foo
@pytest.mark.xfail
def test_marks(get_marks, number):
print(get_marks)
assert 'xfail' in get_marks
> assert number == 42
E assert 3 == 42
更新:使用正确的公开调用来获取@hoefling 建议的标记。
@MrBean 已经描述了一种方法,这是在conftest.py
中使用pytest_runtest_setup
的另一种方法。 通过全局变量和pytest_runtest_setup
自己的方法 pytest_runtest_setup 的组合,您可以获得当前的测试标记。
这种方法将为您提供 class 级别和 function 级别的标记。
conftest.py
import pytest
marker_name = [] #Global variable so you can use it everywhere
def pytest_runtest_setup(item):
global marker_name
marker_name.clear() #If you would not clear this, it would append every test's marker, test by test.
for mark in item.iter_markers():
marker_name.append(mark.name)
@pytest.fixture(scope='function', autouse=True) #Note here, autouse=true.
def my_fixture(request):
request.instance.test_marker=marker_name #assign it to request's session so you can use it in other fixture and in tests as well
@pytest.fixture
def some_other_fixture(request):
test_marker=request.instance.test_marker #access marker in fixture
test_file.py (使用 request.instance.test_marker 在测试中访问该标记变量。)
import pytest
@pytest.mark.class_marker
class TestClass:
@pytest.mark.my_test
@pytest.mark.xfail
def test_foo(self,request):
print(request.instance.test_marker) #output : ['xfail', 'my_test', 'class_marker']
@pytest.mark.my_test_two
@pytest.mark.xfail
def test_foo_two(self,request):
print(request.instance.test_marker) #output : ['xfail', 'my_test_two', 'class_marker']
希望它会有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.