首页
学习
活动
专区
圈层
工具
发布

Pytest的配置文件(八)

在前面的文章中介绍了Pytest中使用conftest.py来共享fixture,事实上我们可以通过Pytest中的配置文件pytest.ini来改变Pytest的执行方式,如指定pytest执行的最低版本,明确规定什么目录下的测试点是不可以执行的,那些目录下的测试点是可以执行的,以及执行过程中它的搜索规则,我们可以依据自己的需求来进行自定义。下面就依据这些来分别介绍这些的应用。不得不说,Pytest真的很自由,没有unittest那么多的拘束,这点比较自由。

一、指定命令行选项

在执行中,特别是Pytest的命令行执行中,经常会指定命令行后面的参数,如-v的参数会显示详细的信息,关于这些参数在这里就不再详细的介绍。在执行Pyest后,我们更多的是想看到所有的测试点都被执行,所以要应用Pytest的配置文件,首先在一个项目中创建pytest.ini的配置文件,如下面的配置文件指定了执行所有测试点,并且详细的信息输出,见配置文件内容:

代码语言:javascript
复制
[pytest]
addopts= -v

要执行的测试点,在src和tests包各自存在一个测试模块,目录图:

见执行pytest命令后输出的信息,特别说明这里我们执行的时候就不需要指定pytest -v了,直接pytest就可以看到详细的信息,如下图所示:

代码语言:javascript
复制
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

但是很多的时候,我们希望看到的是简化的信息,那么配置文件可以修改为:

代码语言:javascript
复制
[pytest]
addopts= -rsxX -l --tb=short

见执行后输出的信息:

代码语言:javascript
复制
collecting ...
 src/test_src.py ✓✓               67% ██████▋
 tests/test_ini.py ✓             100% ██████████

Results (0.03s):
       3 passed

二、注册标记

在编写测试点的时候,由于业务的需要,或者说我们会依据产品模块的分类,编写的测试点会进行分类,所以也希望执行的时候某些分类是可以执行的,但是没有写在配置文件里面的分类是不可以执行的,如最新的配置文件为:

代码语言:javascript
复制
[pytest]
addopts= -v -rsxX -l --tb=short --strict

markers=
  smoke:执行标记为smoke的测试函数
  login:执行标记为login的测试函数

依据上面的配置文件信息,可以得出只执行标记为smoke和login的测试点,而其他的不会被执行,并且打印详细的信息,见要执行的测试的源码:

代码语言:javascript
复制
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

执行后,会显示出未注册的标记,见输出的信息:

代码语言:javascript
复制
collecting ...
―――――ERROR collecting tests/test_ini.py ――――――――
'logout' not a registered marker

!!!!Interrupted: 1 errors during collection !!!!

Results (0.09s):

可以看到错误的提示信息提示我们logou未注册,那么解决的办法要么是注册,要么是注释这些测试代码,其实也可以通过pytesyt --markers来查看注册的标记。那么就在配置文件中增加logout的标记信息,再执行,见输出的结果信息:

代码语言:javascript
复制
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测试框架中的案例应用和案例实战。也谢谢您的阅读和关注。您也可购买我的书籍和测试实战视频。

下一篇
举报
领券