Pytest(三)Pytest执行命令

2022-04-06 08:30:26 浏览数 (1)

系列分享

Pytest系列(一)初次了解

Pytest(二)执行规则以及编写执行多条用例

这次分享Pytest执行命令。


先看一个额外的知识,关于可能出现的执行退出code

代码语言:javascript复制
执行pytest可能会出现6中不同的退出code:
退出code 0: 收集并成功通过所有测试用例
退出code 1: 收集并运行了测试,部分测试用例执行失败
退出code 2: 测试执行被用户中断
退出code 3: 执行测试中发生内部错误
退出code 4: pytest命令行使用错误
退出code 5: 没有收集到测试用例

pytest可以执行的命令

1.获取版本路径、命令行选项及环境变量相关帮助

代码语言:javascript复制
pytest --version   # 显示pytest导入位置
pytest --fixtures  # 显示可用的内置方法参数
pytest -h --help # 显示命令行及配置文件选项帮助信息

2.第1(N)次失败后停止测试

在第1(N)次用例失败后停止测试执行:

代码语言:javascript复制
pytest -x            # 第1次失败后停止
pytest --maxfail=2    # 2次失败后停止

3.指定及选择测试用例

运行模块内所有用例

代码语言:javascript复制
pytest test_mod.py

运行目录内所有用例

代码语言:javascript复制
pytest testing/

按关键字表达式运行用例

代码语言:javascript复制
pytest -k "MyClass and not method"

这将运行包含与指定表达式匹配的名称的测试用例,其中可以包括文件名、类名和函数名作为变量,并且支持Python运算符(and和or)操作。上面的示例将运行TestMyClass.test_something但不运行TestMyClass.test_method_simple

按节点id运行测试

每次执行收集到的测试用例集合都会被分配一个唯一的nodeid,其中包含模块文件名,后跟说明符,如类名、函数名及参数,由:: 字符分隔。

执行模块中某条指定的测试用例如:

代码语言:javascript复制
pytest test_mod.py::test_func

另一个通过命令行挑选所执行测试用例的示例如:

代码语言:javascript复制
pytest test_mod.py::TestClass::test_method

通过标记(Mark)表达式运行测试

代码语言:javascript复制
pytest -m slow

这将会执行所有带@pytest.mark.slow装饰器的用例

从包中运行测试

代码语言:javascript复制
pytest --pyargs pkg.testing

这将会导入pkg.testing并使用其文件系统位置来查找和运行测试

代码语言:javascript复制
addopts = -vs  # 命令行的参数,用空格分隔
testpaths = ./testcase  # 测试用例的路径
python_files = test_*.py  # 模块名的规则
python_classes = Test*  # 类名的规则
python_functions = test  # 方法名的规则

4.修改Python原生追溯(traceback)信息

代码语言:javascript复制
pytest --showlocals # 在追溯信息中显示局部变量
pytest -l           # 显示局部变量 (简写)

pytest --tb=auto    # (默认) 第1和最后1条使用详细追溯信息,其他使用简短追溯信息

pytest --tb=long    # 详尽,信息丰富的追溯信息格式
pytest --tb=short   # 简短的追溯信息格式
pytest --tb=line    # 每个失败信息一行
pytest --tb=native  # Python标准库格式
pytest --tb=no      # 不使用追溯信息

5.详尽的测试结果摘要

-r标志可用于在测试会话结束时显示测试结果摘要,从而可以在拥有大量用例的测试套件中轻松获得所有失败、跳过、标记失败(xfails)等测试结果的清晰描述。

-r选项接受后面的多个字符,上面使用的a表示“除了执行通过(Pass)以外所有的结果”。

以下是可以使用的可用字符的完整列表:

代码语言:javascript复制
-f - 失败的用例
-E - 出错的用例
-s - 跳过的用例
-x - 标记失败的用例
-X - 标记成功的用例
-p - 成功用例
-P - 成功用例并输出信息
-a - 所有pP状态以外的用例

可以使用多个字符,例如,只查看失败和跳过的用例,你可以执行:

代码语言:javascript复制
pytest -rfs

6.执行失败时进入PDB(Python调试器)

代码语言:javascript复制
pytest --pdb

这将在每次失败(或KeyboardInterrupt)时调用Python调试器。一般,你可能只希望在第一次失败的测试中执行此操作以了解某种故障情况:

代码语言:javascript复制
pytest -x --pdb   # 在第一次用例失败时进入PDB
pytest --pdb --maxfail=3  # 在前3次失败是进入PDB

注意,在任何失败时,异常信息都存储在`sys.last_value1,1sys.last_type1和1sys.last_traceback1中

7.分析测试用例执行时间#

显示执行最慢的10条测试用例如:

代码语言:javascript复制
pytest --durations=10

默认情况下,Pytest不会显示<0.005s的测试时间, 除非在命令行上传递-vv

8.创建JUnit XML格式的测试报告#

要创建可由Jenkins或其他持续集成软件读取的XML测试报告,可以使用:

代码语言:javascript复制
pytest --junitxml=demo1

运行结束后,在指定路径path下创建一个XML报告文件

结果

可以通过修改配置中junit_suite_name字段的名称来更改XML报告中root test suite的名称

代码语言:javascript复制
[pytest] junit_suite_name = my_suite

9.禁用插件

要禁用加载从文本文件执行doctest测试的doctest插件

代码语言:javascript复制
pytest -p no:doctest

10.在Python代码调用pytest

代码语言:javascript复制
pytest.main()

你可以传入选项和参数

代码语言:javascript复制
pytest.main(['-x','mytestdir'])

0 人点赞