前面已经讲过如何运行测试用例,不管用哪种方式,都可以支持这些运行参数。
你可以通过-h
或--help
查看所有的命令,包含了所有插件的:
pytest --version # 显示 pytest 的版本
pytest -h | --help
1. 查找用例
模块或目录
pytest 除了参数以外,在 pytest 后面没有跟任何参数的字符串都会认为是文件或者目录,会去这些指定的目录或文件中查找用例。
pytest tests test_login.py ../flow/test_flow.py
这里 pytest 会去查找当前目录下的
tests
子目录,当前目录下的test_login.py
,上级目录下的flow
目录中的test_flow.py
。会找到所有这些目录或文件中符合条件的测试用例。你可以使用下面的--collect-only
来检验一下。
--collect-only
此参数展示当前 pytest 能找到的用例,也就是说直接根据当前参数配置,能找到的用例列表。用于检验运行的用例是否符合你的预期。
注意,这里只是列出会运行的用例,但是不会实际运行。
![](https://img.haomeiwen.com/i8178525/85ee82ae7cddb046.png)
-k
筛选用例
-k
可以让你使用表达式来指定希望运行的测试用例。可以用 and
,or
,not
连接符,模糊匹配文件名、类名和函数名。
pytest -k "str or Add and not list" --collect-only
匹配名称包含 str 或者 Add 且 不包含 list 的文件、类、及函数。如果用上面的例子,这里就只会找到两个函数:
![](https://img.haomeiwen.com/i8178525/a5281e31accd24a7.png)
注意这里有个坑,千万不要用单引号,一定要用双引号包裹表达式。
-m 标记
标记markers
用于标记测试并分组,以便快速选中某些需要的用例并运行。比如我们在冒烟测试时运行其中某一部分用例,bvt 测试时运行另一部分用例。可以通过@pytest.mark.标记名
来标记这些需要的用例,运行时用-m 标记
就能快速选出这部分用例运行。
@pytest.mark.bvt # => 给函数加上标记
def test_int():
"""测试整型"""
a, b = 1, 2
assert add(a, b) == 3
运行时:
pytest -m bvt
标记名可以自己随意加,但是加上后会有警告信息。可以使用 pytest 的配置文件配置这些标记。在测试目录下新建一个
pytest.ini
,这是一个文本文件,并加入如下内容。[pytest] markers=smoke:冒烟测试用例 bvt: bvt 测试用例 online: 正式环境运行的用例
关于配置文件
pytest.ini
后面开专门的文章来讲解
2. 控制运行过程
Pytest 自带的这些控制运行命令可能并不常用,而最常用的应该是由失败重试插件提供的遇到用例失败重试的命令。
失败重试需要插件
pip install pytest-rerunfailures
pytest --reruns=3 # 用例失败重新运行3次
以下是 pytest 自带的运行控制命令:
-x, --exitfirst
遇到失败停止
正常情况下,一个用例失败后,会继续运行后续用例 ,直到所有用例运行完为止。-x
参数会让整个测试在遇到第一次失败就停止。这取决于你有没有这样的需要,一般来说可能用不上。
--maxfail=num
遇到多少次失败就停止
与上面-x
一样,不过-x
是遇到第一次失败就停止。而--maxfail
可以指定遇到几个测试用例失败就停止。
pytest --maxfail=3 # 遇到三次用例失败就停止
-lf, --last-failed
当一个或多个用例失败后,定位到最后一个失败的用例重新运行,后续用例会停止运行。
-ff, --failed-first
与-lf
查不多,失败后会定位最后一个失败的用例重新弄运行,但是会运行完剩余的用例。
3. 结果展示
-s, --capture=method
显示标准输出
默认情况下你在用例中写的print
或者log
输出,都不会在测试结果中展示。如果你想看到用例中的标准输出,那么需要加上-s
参数。
-v, --verbose
更详细的结果
使用-v
会让输出结果更详细,不用的时候一个文件占一行,而用例之后一个用例占结果的一行。并且结果中的用例名称和结果都会展示,而不仅仅是一个.
或字符。
-q, --quiet
简略的结果
与-v
相反,-q
会输出更简化的信息。
-l, --showlocals
显示变量
使用-l
会展示运行过程中的全局变量和局部变量。
测试报告
默认情况下,pytest 只有 xml 格式的报告。通过--junit-xml=path
可以输出 xml 格式的报告。结合 Jenkins 还是比较直观。
但是可能你需要更直观的 html 测试报告,那么需要使用插件pytest-html
,你可以通过 pip install pytest-html
安装 。
然后在命令中加上--html=path
:
pytest --html=report.html # 在当前目录生成名为report.html的测试报告
![](https://img.haomeiwen.com/i8178525/9e24e5c10d90fedb.png)
其他还有很多参数,各位可使用 python --help
查询。这里只是提出一部分较为常用的,你把常用的用熟了再去看其他的也就容易懂了。
网友评论