在前面的文章中介绍了Pytest中使用conftest.py来共享fixture,事实上我们可以通过Pytest中的配置文件pytest.ini来改变Pytest的执行方式,如指定pytest执行的最低版本,明确规定什么目录下的测试点是不可以执行的,那些目录下的测试点是可以执行的,以及执行过程中它的搜索规则,我们可以依据自己的需求来进行自定义。下面就依据这些来分别介绍这些的应用。不得不说,Pytest真的很自由,没有unittest那么多的拘束,这点比较自由。
在执行中,特别是Pytest的命令行执行中,经常会指定命令行后面的参数,如-v的参数会显示详细的信息,关于这些参数在这里就不再详细的介绍。在执行Pyest后,我们更多的是想看到所有的测试点都被执行,所以要应用Pytest的配置文件,首先在一个项目中创建pytest.ini的配置文件,如下面的配置文件指定了执行所有测试点,并且详细的信息输出,见配置文件内容:
[pytest]
addopts= -v
要执行的测试点,在src和tests包各自存在一个测试模块,目录图:
见执行pytest命令后输出的信息,特别说明这里我们执行的时候就不需要指定pytest -v了,直接pytest就可以看到详细的信息,如下图所示:
collecting ...
src/test_src.py::test_001 ✓ 33% ███▍
src/test_src.py::test_002 ✓ 67% ██████▋
tests/test_ini.py::test_passing ✓ 100% ██████████
Results (0.04s):
3 passed
但是很多的时候,我们希望看到的是简化的信息,那么配置文件可以修改为:
[pytest]
addopts= -rsxX -l --tb=short
见执行后输出的信息:
collecting ...
src/test_src.py ✓✓ 67% ██████▋
tests/test_ini.py ✓ 100% ██████████
Results (0.03s):
3 passed
在编写测试点的时候,由于业务的需要,或者说我们会依据产品模块的分类,编写的测试点会进行分类,所以也希望执行的时候某些分类是可以执行的,但是没有写在配置文件里面的分类是不可以执行的,如最新的配置文件为:
[pytest]
addopts= -v -rsxX -l --tb=short --strict
markers=
smoke:执行标记为smoke的测试函数
login:执行标记为login的测试函数
依据上面的配置文件信息,可以得出只执行标记为smoke和login的测试点,而其他的不会被执行,并且打印详细的信息,见要执行的测试的源码:
import pytest
def test_passing():
assert 1==1
@pytest.mark.smoke
def test_smoke_001():
pass
@pytest.mark.smoke
def test_smoke_002():
pass
@pytest.mark.login
def test_login_001():
pass
@pytest.mark.login
def test_login_002():
pass
@pytest.mark.logout
def test_logout_001():
pass
@pytest.mark.logout
def test_logout_002():
pass
执行后,会显示出未注册的标记,见输出的信息:
collecting ...
―――――ERROR collecting tests/test_ini.py ――――――――
'logout' not a registered marker
!!!!Interrupted: 1 errors during collection !!!!
Results (0.09s):
可以看到错误的提示信息提示我们logou未注册,那么解决的办法要么是注册,要么是注释这些测试代码,其实也可以通过pytesyt --markers来查看注册的标记。那么就在配置文件中增加logout的标记信息,再执行,见输出的结果信息:
collecting ...
src/test_src.py::test_001 ✓ 11% █▎
src/test_src.py::test_002 ✓ 22% ██▎
tests/test_ini.py::test_passing ✓ 33% ███▍
tests/test_ini.py::test_smoke_001 ✓ 44% ████▌
tests/test_ini.py::test_smoke_002 ✓ 56% █████▋
tests/test_ini.py::test_login_001 ✓ 67% ██████▋
tests/test_ini.py::test_login_002 ✓ 80% ███████▊
tests/test_ini.py::test_logout_001 ✓ 89% ████████▉
tests/test_ini.py::test_logout_002 ✓ 100% ██████████
Results (0.04s):
9 passed
前面很多文章介绍了Pytest的知识体系,后面也会逐步的介绍Pytest其他方面的知识体系,以及在UI自动化测试和API测试框架中的案例应用和案例实战。也谢谢您的阅读和关注。您也可购买我的书籍和测试实战视频。