Pytest 命令行常用参数
同学们大家好,这个章节我们来学习 pytest 框架中如何使用命令行参数执行用例,重点会介绍常用的参数有哪些。
简介
Pytest 支持多种命令行参数,用于控制测试运行的行为。
在 Pytest 中,提供了多种命令行参数,可以帮助我们控制测试运行的行为,使用这些参数可以更灵活地管理和执行我们的测试。
命令行运行测试用例的优点
- 简单易用:在终端中运行
pytest
命令即可自动发现并运行测试用例。 - 自动化测试发现:pytest 会自动搜索项目中所有的测试文件,并发现其中的测试用例。
- 强大的测试运行和收集功能:可以通过各种选项和标记来定制测试用例的运行方式,如只运行某个目录下的测试用例、只运行特定标记的测试用例等。
为什么需要使用命令行的方式来运行测试用例呢?首先是简单,只需要在终端中运行 pytest 命令,pytest 就会自动发现并执行所有测试用例。第二, pytest 会自动搜索我们项目中的测试文件,识别并收集测试用例,省去手动指定测试用例的麻烦。而且还可以通过命令行参数来定制测试的执行,比如只执行某个目录下的测试,或者只运行特定标记的测试用例等等。
命令行参数的使用
--help
:获取所有参数列表-m
:执行某个标签的用例-v
:打印详细日志-s
:打印输出日志(一般-vs 一块儿使用)-k
:执行包含某个关键字的测试用例-x
:用例遇到第一个失败(fail/error),就立刻停止执行--maxfail=num
:用例失败数达到 num 的数量后停止执行--collect-only
:只收集不执行
既然使用命令行运行这么好用,那我们来了解一下具体的参数吧。Pytest 提供了多种命令行参数,让我们可以灵活控制测试运行,比如使用 杠杠help 可以查看参数的帮助信息,杠m 只运行特定标签的测试,杠v 打印详细日志,杠s 打印标准输出,杠k 执行包含某个关键字的测试,杠x 遇到失败就停止,杠杠maxfail 等于 num 可以控制最大失败数,杠杠collect杠only 只收集不运行测试。下面我们用一些示例给大家讲解一下具体用法。
示例代码
# test_double.py
def double(a):
return a * 2
def test_double_int():
assert 2== double(1)
def test_double1_minus():
assert -20 == double(-1) #有错误的用例
def test_double_float():
assert 0.2 == double(0.1)
def test_double2_minus():
assert -0.2 == double(-0.1)
def test_double_0():
assert 0 == double(0)
def test_double_bignum():
assert 200 == double(100)
def test_double_str():
assert 'aa' == double('a')
def test_double_str1():
assert 'a$a$' == double('a$')
这里有一个简单的测试文件 test double点py,它包含了一些测试函数,部分是正确的,部分是故意写错的,用来展示命令行参数的效果。
打印详细日志和输出日志
pytest test_double.py -vs
如果想要在执行过程中能在控制台查看更详细的日志,可以使用 杠v 和 杠s 参数。执行 pytest test double点py 杠vs 后,会打印出每个测试的详细信息,包括标准输出的日志。
执行包含关键字的测试用例
执行包含关键字 str 的测试用例:
pytest test_double.py -k "str"
如果我们想要执行包含某个关键字的测试用例,可以通过 杠k 参数来指定。比如 pytest test double点py 杠k str,这样就会只执行所有包含 str 的测试用例。
用例一旦失败就立即停止运行
pytest test_double.py -x
如果我们想让用例在运行失败的时候立刻停止执行,可以使用 杠x 参数。使用这个参数可以当测试用例遇到第一个失败比如 fail 或者 error 的时候,就会立刻停止执行。比如运行 pytest test double点py 杠x,遇到第一个失败用例的时候,剩下的测试就不会再执行了。
用例失败数达到某个值后停止执行
用例失败数达到 3 次后停止执行:
pytest test_double.py --maxfail=3
如果说我们的容忍程度比较高,可以接受有一定数量的用例失败,那么就不能用 杠x 参数了。这时候可以通过 杠杠maxfail等与num 参数来指定最多允许失败多少次测试用例。比如 pytest test double点py 杠杠maxfail 等于 3 表示如果失败的测试用例达到 3 个的时候,pytest 就会停止执行。
只收集不运行测试用例
pytest --collect-only
有时候,我们只是想把用例信息搜集上来,并不想执行它们,这时候就可以使用 杠杠collect 杠only 参数。例如,执行 pytest 杠杠collect杠only 后,pytest 就会列出所有被收集的测试用例,但并没有执行它们。
下面给大家演示一下具体操作。进入到项目当中,现在我们已经准备好了一个测试文件。在这个文件里面准备了一些测试的函数,还有一个测试类当中准备了一些失败的测试用例。接下来我们就来试一下不同的运行参数。先进入到命令行,直接进入测试文件所在路径来执行。首先我们先来通过 pytest 执行这个文件,然后加上 杠vs 参数。执行之后我们来看一下日志信息。最前面会输出一些详细的日志信息,这样是文件中所有的用例都执行了。那接下来的话我们来试一下只执行名称中包含某个关键词的场景。给命令加上一个 杠k 参数,指定一下我们想要去执行包含 str 的这样的一些用例。执行之后可以看到,这里的话,只有这两条包含 str 的用例被执行了。那接下来的话我们再尝试一下遇到失败用例就停止执行的场景。给命令加上 杠x 参数。来看一下执行结果,我们会发现当执行到第一条失败的用例之后,后面的用例就没有执行了。接下来我们再来试试指定最多失败条数的场景。这时候就需要给命令加上一个叫做 杠杠maxfail 的参数,然后用等号指定它最大失败的次数,比如说 3 次。那么执行之后我们就会发现 3 条用例执行失败之后,后面的用例就没有再执行了。最后我们再来试试或去只搜集不执行的场景。想要实现这个效果,这里可以给 pytest 命令加上 杠杠collect杠only 参数。加好之后来看下执行结果。大家可以看到现在有 54 条用例被搜集上来了。然后我们可以往上翻一下,看看一下搜集上来的数据结构。可以看到这些 xml 格式的数据就是搜集到的测试用例信息,但是它们只是被搜集上来了,并没有被执行。
./assets/Pytest命令行常用参数.mp4
总结
- 使用命令行参数的优点。
- 命令行参数的使用。
最后来总结一下。这个章节我们了解了通过使用命令行参数,可以轻松地控制 pytest 的行为,比如打印详细日志、选择性执行特定测试用例、限制失败次数等。这些功能使得 Pytest 更加灵活和高效。好了,关于 pytest 常用的命令行参数先介绍这么多。