赞
踩
目录
1.4 --maxfail=num 第1(N)次失败后停止测试
2.3 通过pytest.mark.xfail 标记用例失败
3.3 pytest是按照fixture的名称搜索fixture。
3.5 生效范围:在测试类/测试模块/测试会话中共享fixture对象#
2.使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例
pytest可以在不同的函数、包中发现用例,发现的规则如下
执行pytest
可能会出现6中不同的退出code:
- pytest --version # 显示pytest导入位置
- pytest --fixtures # 显示可用的内置方法参数
- pytest -h --help # 显示命令行及配置文件选项帮助信息
pytest -k "MyClass and not method"
这将运行包含与指定表达式匹配的名称的测试用例,其中可以包括文件名、类名和函数名作为变量,并且支持Python运算符(and和or)操作。上面的示例将运行TestMyClass.test_something
但不运行TestMyClass.test_method_simple
。
可以使用-k命令行选项指定在匹配用例名称的表达式
$ pytest -v -k http
您也可以运行所有的测试,根据用例名称排除掉某些用例:
$ pytest -k "not send_http" -v
也可以同时选择匹配 “http” 和“quick”
$ pytest -k "http or quick" -v
teste_two使用了@pytest.mark.slow来修饰
在使用时,使用如下参数
pytest –m slow test.py
只运行了一个我们带有标识的用例。
注意,-m后面不能带''号(单引号),只能带“”(双引号),不然识别不到
如果要运行多个标识的话,用表达式,如下
- pytest -m "slow or faster" 运行有slow标识或 faster标识用例
- pytest -m "slow and faster" 运行有slow和faster标识的用例
- pytest -m "slow and not faster" 运行有slow和没有faster标识的用例
- pytest -x # 第1次失败后停止
- pytest --maxfail=2 # 2次失败后停止
Pytest支持多种从命令行运行和选择测试用例的方法。
运行模块内所有用例
pytest test_mod.py
运行目录内所有用例
pytest testing/
每次执行收集到的测试用例集合都会被分配一个唯一的nodeid
,其中包含模块文件名,后跟说明符,如类名、函数名及参数,由::
字符分隔。
执行模块中某条指定的测试用
pytest test_mod.py::test_func
另一个通过命令行挑选所执行测试用例的示例如:
pytest test_mod.py::TestClass::test_method
通过标记(Mark)表达式运行测试
pytest -m slow
这将会执行所有带
@pytest.mark.slow
装饰器的用例。
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 # 不使用追溯信息
-r
标志可用于在测试会话结束时显示测试结果摘要,从而可以在拥有大量用例的测试套件中轻松获得所有失败、跳过、标记失败(xfails)等测试结果的清晰描述。
-r
选项接受后面的多个字符,上面使用的a
表示“除了执行通过(Pass)以外所有的结果”。
以下是可以使用的可用字符的完整列表:
-
f
- 失败的用例
-E
- 出错的用例
-s
- 跳过的用例
-x
- 标记失败的用例
-X
- 标记成功的用例
-p
- 成功用例
-P
- 成功用例并输出信息
-a
- 所有pP
状态以外的用例
1.9.1、 -v, --verbose
详细结果
1.9.2、-q, --quiet
极简结果显示,简化控制台的输出,可以看出输出信息和之前不添加-q不信息不一样, 下图中有两个..点代替了pass结果
1.9.3、-s
输入我们用例中的调式信息,比如print的打印信息等,我们在用例中加上一句 print(driver.title),我们再运行一下我们的用例看看,调试信息输出
1.9.4、-V
可以输出用例更加详细的执行信息,比如用例所在的文件及用例名称等
1.9.5、--junit-xml=path
输出xml文件格式,在与jenkins做集成时使用
1.9.6、 --result-log=path
将最后的结果保存到本地文件中
1.9.7 --html
用例失败重跑的方法:
在用例上添加装饰器@pytest.mark.flaky(reruns=2, reruns_delay=4) reruns为次数,reruns_delay间隔时间,单位s(对部分用例生效)
在pytest.ini文件中addopts = 添加参数–reruns n (n:为重试的次数)(对所有用例生效)
方法一:单个用例失败重跑
方法二:所有用例失败重跑
- # test_assert1.py文件内容
- def f():
- return 3
-
- def test_function():
- assert f() == 4
你可以像如下所示,使用pytest.raises
作为上下文管理器来进行异常断言:
- import pytest
-
- def test_zero_division():
- with pytest.raises(ZeroDivisionError):
- 1 / 0
如果需要访问实际的异常信息,你可以使用:
- def test_recursion_depth():
- with pytest.raises(RuntimeError) as excinfo:
- def f():
- f()
- f()
- assert 'maximum recursion' in str(excinfo.value)
excinfo
是一个ExceptionInfo
实例,它是实际异常的装饰器。 其主要属性有.type
,.value
及.traceback
三种
在上下文管理器中,你可以使用参数message
来指定自定义失败信息:
- >>> with raises(ZeroDivisionError,message="Expecting ZeroDivisionError"):
- ... pass
- ... Failed: Expecting ZeroDivisionError
- @pytest.mark.xfail(raises=IndexError)
- def test_f():
- f()
对于你在代码中故意设置的异常,使用pytest.raises
断言更加好用,而将@ pytest.mark.xfail
与check函数一起使用对于已知未修复或依赖中的bug会更好。
此外,上下文管理器表单接受match
关键字参数来测试正则表达式匹配中的异常(如unittest
中的TestCase.assertRaisesRegexp
方法):<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。