pytest系列——常用命令行参数
一、--collect-only选项
使用--collect-only选项可以展示在给定的配置下哪些测试用例会被运行
--collect-only选项可以让你非常方便的在测试运行之前,检查选中的测试用例是否符合预期
pytest --collect-only
或者
pytest --co
二、-k选项
-k选项允许你使用表达式指定希望运行的测试用例,【根据某些条件筛选测试用例指定运行】
这个功能非常实用,如果测试名是唯一的,或者多个测试方法名/测试文件名的前缀或者后缀相同,那么则可以使用表达式快速定位
假设希望选中 test_judge_user_login_or_not.py
和 test_get_banner_HomePage
两个测试文件中的用例【可以根据筛选条件同时选择匹配多个测试】:
pytest -k "user or banner" --collect-only
当然也可以运行所有的测试,根据用例名称筛选排除掉某些用例: pytest -k "not user" --collect-only
三、-m选项
标记(marker)用于标记测试并分组,以便快速选中并运行用例。
只能运行有相应标识的测试用例,使用这个参数,测试用例要使用@pytest.mark.【marker】修饰。【maker是标记测试方法的装饰器@pytest.mark.【maker】】
pytest –m 【marker】
如下实例:【marker】为slow
# content of test.py
import pytest
class TestClass(object):
def test_one(self):
'''new_etests'''
x = "this"
assert 'h' in x
@pytest.mark.slow
def test_two(self): # teste_two使用了@pytest.mark.slow来修饰
'''new_sssetests'''
x = "hello"
assert hasattr(x, 'check')
def test_a(self):
assert 1==2
结果如下:
从上图中可以看出,只运行了一个我们带有标识的用例。
注意,-m后面不能带''号(单引号),只能带""(双引号),不然识别不到
如果要运行多个标识的话,用表达式,如下:
pytest -m "slow or faster" 运行有slow标识或 faster标识用例
pytest -m "slow and faster" 运行有slow和faster标识的用例
pytest -m "slow and not faster" 运行有slow和没有faster标识的用例
四、-x选项
正常情况下,pytest会运行每一个搜索到的用例。如果某个测试函数被断言失败,或者触发了外部异常,则该测试用例的运行就会到此而止,pytest将其标记为失败后会继续运行下一条用例,这也是我们通常期望的运行模式。
但是在debug的时候我们会希望遇到失败时停止整个会话,这时就可以使用到-x命令行运行方式了。
pytest -x
五、--maxfail=num选项
-x选项的特点是,一旦遇到运行失败,整个测试就会全局停止。【即只有一个测试用例运行失败就停止运行下面其他的测试用例】
假设你允许几次失败后才会停止,那么--maxfail选项就可以派上用场了(明确可以失败num次)
如果pytest命令行运行时选项设置为 --maxfail=1 则与 -x 的作用相同
pytest --maxfail=num
六、-s选项
-s选项允许终端在测试运行时输出某些结果,包括任何符合标准的输出流信息【即print语句将会打印在终端上】
正常情况下,所有的测试输出都会被捕获。因为在编写测试用例时,习惯添加几个print(),以便于观察某时候测试执行到了哪个阶段。
pytest -s
七、--lf或者--last-failed选项
当一个或多个测试用例运行失败时,我们常常希望能够定位失败的测试用例并且重新运行,这是 --lf 或者 --last-failed 就可以派上用场了。
即重跑上次失败的所有测试用例,如果没有失败就重跑全部。
pytest --last-failed
或者
pytest --lf
如下方只运行上一次运行失败的测试用例,测试通过的未被选中
八、--ff或者--failed-first选项
--ff(--failed-first)选项与--last-failed选项的作用基本相同。
pytest命令行运行--ff(--failed-first)时,会首先运行上一次失败的测试用例,然后才会运行剩下被选中的所有的测试用例。
pytest --ff
或者
pytest --failed-first
九、-v(--verbose)选项
使用-v/--verbose选项,输出的信息会更详细。最明显的区别就是每个文件中的每个测试用例都占一行(而简化输出或者默认输出的终端控制台显示为一个文件一行且测试用例的成功或失败是由./F/E等区分)。
使用-v/--verbose选项,测试的名字和结果都会显示出来,而不仅仅是一个点或字符。用例执行成功或者失败会在每行【即每一个测试用例】后显示PASSED/FAILED
pytest -v
如下:每一个测试用例在终端控制台都会占一行【由于我安装了优化显示插件,所有显示有所不同】
十、 -q(--quiet)选项
-q(--quiet)选项与-v(--verbose)的作用相反,-q的作用是简化输出信息。
-q(--quiet)选项不显示每个用例的详细信息,可以与--tb=line(进打印异常代码的位置)结合使用
pytest -q --tb=line
例如:一个测试文件中有多个测试用例,有一个测试用例执行失败,则只会打印那一个失败的测试用例异常代码:
十一、--tb=style选项
信息回溯:某个测试用例执行失败后,pytest会列举出失败信息,包括失败出现在哪一行、是什么失败、怎么失败的、此过程我们称之为【信息回溯】
--tb=style选项决定捕捉到失败时输出信息的显示方式。
使用 --tb=no
屏蔽全部回溯信息:
使用 --tb=line
,仅仅告诉我们错误的用例执行时发生错误的位置:
使用 --tb=short
,显示的回溯信息比前面两种模式的更详细:
使用 --tb=long
,输出最为详尽的回溯信息:
使用 --tb=auto
是默认值,如果有多个测试用例执行失败,进打印第一个和最后一个测试用例的回溯信息(格式与long模式的一致):
使用 --tb=native
只输出Python标准库的回溯信息,不显示额外信息:
十二、-r(chars)选项
-r
选项不但可以帮助用户了解某些测试的原因,还可以用于查看其他测试结果。
显示 failed 的信息
pytest -r f
显示 Error 的信息
pytest -r E
显示 skipped 的信息
pytest -r s
显示 xfailed 的信息
pytest -r x
显示 Xpassed 的信息
pytest -r X
显示 passed 的信息
pytest -r p
显示 Passed with output 的信息
pytest -r P
显示 all except passed 的信息
pytest -r a
pytest -r A
显示 warnings are enabled by default (--disable-warnings) 的信息
pytest -r w
重置 list
pytest -r N