https://www.cnblogs.com/cnkemi/p/9989019.html
http://www.cnblogs.com/cnkemi/p/10002788.html
pytest 常用命令行选项(一)
pytest有丰富的命令行选项,以满足不同的需要,下面对常用的命令行选项作下简单介绍。 上文已经使用过-v选项,还有很多选项,你可以使用pytest --help查看全部选项。如下图:
1、--collect -only 选项
使用--collect -only选项可以展示在给定配置下哪些用例会被运行。让你方便地在测试运行之前,检查用例是否符合预期。如下例:
2、-k 选项
-k 选项允许你使用表达式指定希望运行的测试用例。假设希望选中test_asdict()和test_defaults(),那么可以用代表式"asdict or defaults"来筛选。结合-v或者--verbose查看是否符合预期,如下图:
3、-m 选项
标记(marker)用于标记测试并分组,以便快速选中并运行。以test_replace()和test_member_access()为例,它们甚至都不在同一个文件里,如果希望同时运行它们,那么可以预先做好标记。
这里使用什么标记名由你自己决定,比如使用run_these_case,则可以用@pytest.mark.run_these_case这样的装饰器(decorator)来标记,如下所示:
import pytest ...
@pytest.mark.run_these_case
def test_member_access():
...
给test_replace()也做上同样的标记。有相同标记的测试用例,可以一起运行。使用pytest -m run_these_case命令就可以同时运行test_replace()和test_member_access()。如下图:
使用-m选项还可以用表达式指定多个标记各。使用-m "mark1 and mark2"可以同时选中带有这两个标记的所有测试用例。使用-m "mark1 and not mark2"则会选中带有mark1的测试用例,而过滤带有mark2的测试用例;使用-m "mark1 or mark2"则选中带有mark1或者mark2的所有测试用例。
4、-x 选项
正常情况下,pytest会运行每一个搜索到的测试用例。如果某下测试函数被断言失败,或者触发了外部异常,则该测试用例的运行就会到此为止,pytest将其标记为失败后会继续运行下一个测试用例。通常,这是我们期望的运行模式。但如果希望在遇到失败时立即停止整个会话,这时-x选项就派上用场了。如用-x选项运行之前的6个测试用例,如下:
输出信息开头显示pytest收集到6个测试条目,末尾显示有1个通过,1个失败。如果没有-x选项,那么6个测试都会被执行,即使遇到测试失败,但没有停止后面的测试用例。如下图:
5、--maxfail==num选项
-x选项的特点是, 一旦遇到测试失败,就会全局停止。如果你希望pytest失败几次后再停止,则可以使用--maxfail选项,明确指定要以失败几次。 如设置--maxfail=2,则需要遇到两次错误才会停止,这样前面只存在一个失败测试的就会全都被执行。如下图:
So如设置--maxfail=1,在这里就与前面的-x作用相同。
6、--lf(--last-failed)选项 当一个或者多个测试失败时,我们常常希望能够定位到最后一个失败的测试用例重新运行,这时可以使用--lf选项。如下图:
7、--ff(--failed-first)选项 此选项与上面的--lf(--last-failed)选项的作用基本相同,不同之处在于--ff会运行完剩余的测试用例。如下图:
由于test_failing()是在test_two.py文件中,因此通常会在test_one.py之后运行,但是在--ff选项作用下,test_failing()前一轮被认定为失败,会被首先执行。
8、-v(--verbose) 选项
使用-v/--verbose选项,输出的信息会更详细。最明显的区别就是每个文件中的每个测试用例都占一行,测试的名字和结果都会显示出来,而不仅仅是一个点或字符。如下图:
在彩色显示器上可以看到FAILED标记为红色,PASSED标记为绿色。
9、-q(--quiet)选项
该选项的作用与-v/--verbose的相反,它会简化输出信息。如下图:
使用-q选项会简化输出信息,只保留最核心的内容。
10、--tb=style 选项
--tb=style选项决定捕捉到失败时输出信息的显示方式。某个测试用例失败后,pytest会列举出失败信息,包括失败出现在哪一行、是什么失败、怎么失败的,此过程我们称之为“信息回溯”。大多数情况下,信息回溯是有必要的,它对找到问题很有帮助,但有时也会对多余的信息感到厌烦,这时--tb=style选项就有用武之地了。常用的style类型有short、line、no。short模式仅输出assert的一行以及系统判定内容(不显示上下文);line模式只使用一行输出显示所有的错误信息;no模式则直接屏蔽全部回溯信息。
使用--tb=no屏蔽全部回溯信息。如下图:
使用--tb=line,它可以告诉错误的位置,如下图:
使用--tb=short,显示的回溯信息比前面两种模式的更详细。如下图:
除此之外,还有--tb=long输出最为详尽的回溯信息;--tb=auto是默认值,如果有多个测试用例失败,仅打印第一个和最后一个用例的回溯信息(格式与long模式一致);--tb=native只输出Python标准库的回溯信息,不显示额外信息。
11、--version 选项
使用--version可以显示当前的pytest版本及当前目录。如下图:
由于是用python pip命令安装的,所以会显示对就的site-packages目录。
12、-h(--help)选项
即使你已经熟练使用pytest,-h选项依然非常有用,它不但能展示原生的pytest的用法,还能展示新添加的插件的选项和用法。
使用-h选项可以获得:
. 基本用法:pytest [options] [file_or_dir] [file_or_dir] [...]
. 命令行选项及其用法,包括新添加的插件的选项及其用法。
. 可用于ini配置文件中的选项。
. 影响pytest行为的环境变量。
. 使用pytest --markers时的可用marker列表。
. 使用pytest --fixtures时的可用fixture列表。
帮助信息最后会显示一句话:
shown according to specified file_or_dir or current dir if not specified
这句话的意思为:显示结果取决于指定的文件或目录,未指定的则默认使用当前目录和文件。这句话非常重要,选项、marker、fixture都会因为目录的变化而发生变化。