大型网站 中小型网站,失效网站建设费支出,ciid中国室内设计官网,企业服务网站制作导读
fixture 是 pytest 中一个非常重要的模块#xff0c;可以让代码更加简洁。
fixture 的 autouse 为 True 可以自动化加载 fixture。
如果不想每条用例执行前都运行初始化方法(可能多个fixture)怎么办#xff1f;可不可以只运行一次初始化方法#xff1f;
答#xf…导读
fixture 是 pytest 中一个非常重要的模块可以让代码更加简洁。
fixture 的 autouse 为 True 可以自动化加载 fixture。
如果不想每条用例执行前都运行初始化方法(可能多个fixture)怎么办可不可以只运行一次初始化方法
答可以使用 scope 。
举例
要先创建一个文件conftest.py 编写代码
import pytestdata {}pytest.fixture(scopesession)
def add():相加return 5 8pytest.fixture(scopesession)
def multiply():相乘return 5 * 8pytest.fixture(scopesession, autouseTrue)
def init_data():初始化数据print(fstart init_data: {data})data[a] 5data[b] 8data[c] 13data[d] 40data[e] 53data[f] 520pytest.fixture(scopesession, autouseTrue)
def init_data2(add, multiply):初始化数据print(fstart init_data2: {data})data[e] add * multiplydata[f] add multiply
这里注意init_data2 引用了 add 和 multiply 这两个fixture所以这两个 fixture 都需要加上:
pytest.fixture(scopesession)如果不加上就会报错ScopeMismatch: You tried to access the function scoped fixture add with a session scoped request object。
这是因为 init_data2 的作用域是 session而 add 和 multiply 的作用域是 function。所以要在同级上才能使用。
新建测试文件test_fixtures_scope.py, 编写测试代码
from conftest import datadef test_first_fixture():# Actprint(fa{data[a]})print(fb{data[b]})print(fa b{data[c]})print(fa * b{data[d]})# Assertassert data[c] data[a] data[b]def test_second_fixture():print(fadd * multiply{data[e]})print(fadd multiply{data[f]})# Assertassert data[e] ! data[f]
测试
正确使用
$ pytest -sv test_fixtures_scope.pytest session starts
platform darwin -- Python 3.12.0, pytest-8.2.2, pluggy-1.5.0 -- /Users/hope/PythonVirtualenv/pytest-sample/bin/python
cachedir: .pytest_cache
rootdir: /Users/hope/PycharmProjects/pytest-sample
collected 2 itemstest_fixtures_scope.py::test_first_fixture start init_data: {}
start init_data2: {a: 5, b: 8, c: 13, d: 40, e: 53, f: 520}
a5
b8
a b13
a * b40
PASSED
test_fixtures_scope.py::test_second_fixture add * multiply520
add multiply53
PASSED 2 passed in 0.01s 可以看到 这行日志只运行了一次
start init_data: {}
start init_data2: {a: 5, b: 8, c: 13, d: 40, e: 53, f: 520}当两个fixture不在同一作用域
$ pytest -sv test_fixtures_scope.pytest session starts
platform darwin -- Python 3.12.0, pytest-8.2.2, pluggy-1.5.0 -- /Users/hope/PythonVirtualenv/pytest-sample/bin/python
cachedir: .pytest_cache
rootdir: /Users/hope/PycharmProjects/pytest-sample
collected 2 itemstest_fixtures_scope.py::test_first_fixture ERROR
test_fixtures_scope.py::test_second_fixture ERROR ERRORS
__________________________ ERROR at setup of test_first_fixture __________________________
ScopeMismatch: You tried to access the function scoped fixture add with a session scoped request object. Requesting fixture stack:
conftest.py:18: def init_data(add, multiply)
Requested fixture:
conftest.py:6: def add()
_________________________ ERROR at setup of test_second_fixture __________________________
ScopeMismatch: You tried to access the function scoped fixture add with a session scoped request object. Requesting fixture stack:
conftest.py:18: def init_data(add, multiply)
Requested fixture:
conftest.py:6: def add()short test summary info
ERROR test_fixtures_scope.py::test_first_fixture - Failed: ScopeMismatch: You tried to access the function scoped fixture add with a ses...
ERROR test_fixtures_scope.py::test_second_fixture - Failed: ScopeMismatch: You tried to access the function scoped fixture add with a ses...2 errors in 0.02s 总结
fixtures 会在测试一开始的时候创建会在定义的作用域销毁。 function: 默认的 scope在测试用例(以test开头的方法)结束时销毁。 class: 在一个class类中最后一个测试用例结束时销毁。 module: 在一个模块(也就是一个py文件)中最后一个测试用例结束时销毁。 package: 在一个目录的最后一个测试用例结束时销毁。 session所有测试用例都运行结束时销毁。 每日踩一坑生活更轻松。
本期分享就到这里啦祝君在测开之路上越走越顺越走越远。
最后感谢每一个认真阅读我文章的人看着粉丝一路的上涨和关注礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 软件测试面试文档
我们学习必然是为了找到高薪的工作下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料并且有字节大佬给出了权威的解答刷完这一套面试资料相信大家都能找到满意的工作。