【pytest】2.运行方法&参数

1、选择测试用例的方法

1、执行某一个py文件下用例

pytest test_mod.py

2、执行某个目录下所有的用例

pytest testing/

3、按关键字表达式运行测试

pytest -k "MyClass and not method"
# and not:表达式,不经过测试。运行TestMyClass.test_something不运行TestMyClass.test_method_simple

这种方式会执行【文件名,类名以及函数名】与【给定的字符串表达式】匹配的测试用例。表达式:支持Python运算符(and和or)操作。

4、按节点id执行测试

每个被选中的测试用例都会被分配一个唯一的 nodeid ,它由模块文件名和说明符(类名、函数名和参数)组成,用 :: 分隔。

运行.py模块里面的某个函数:

pytest test_mod.py::test_func

运行.py模块里面,测试类里的某个方法:

pytest test_mod.py::TestClass::test_method

5、通过标记(Mark)表达式运行测试

pytest -m slow  # 运行用@pytest.mark.slow装饰器修饰的所有测试

6.通过包来运行

pytest --pyargs pkg.testing   # 导入pkg.testing,并且基于该包所在为止来查找并运行测试用例

2、测试失败后停止测试

pytest ‐x  # 第一次测试失败后停止测试
pytest ‐‐maxfail=2  # 第2次测试失败后停止测试

3、pycharm运行三种方式

1.以xx.py脚本方式直接执行,当代码里没用到unittest和pytest框架时,且脚本名称不是以test_开头命名的,此时pycharm会以xx.py脚本方式运行;

2.当脚本命名为test_xx.py,用到unittest时,pycharm会自动识别为Run 'Unittests in test_xx.py',以unittest运行

3.以pytest方式运行,需更改工程设置默认的运行器:file->Setting->Tools->Python Integrated Tools->项目名称->Default test runner->选择py.test。设置成功后,pycharm会自动识别为Run 'py.test in test_xx.py'

注意:pytest是可以兼容unittest脚本的,之前写的unittest用例也能用pytest框架去运行

4、在Python代码中调用pytest

直接调用pytest:

import pytest  # 写pytest用例,先导入pytest
def test_main():
    assert 5 != 5
if __name__ == '__main__':
    pytest.main()  # 就像从命令行调用pytest。它不会抛出SystemExit异常,但会返回exitcode

可以传入选项和参数,如:

import pytest
def test_main():
    assert 5 != 5
if __name__ == '__main__':
	pytest.main('-q test_class.py')  # 显示简单结果。
	# 运行结果有warnings,因为参数需要传list。pytest.main(['-q', 'test_class.py']),就不会有警告了

注意:调用pytest.main()会导入你的测试用例及其引用的其他模块。因为python存在模块导入的缓存机制,如果多次调用pytest.main(),后面的调用将不会刷新这些导入的资源。因此,不建议在同一进程中多次调用pytest.main()(如重新运行测试)。

5、用例运行级别

学过unittest的都知道,setup和teardown非常好用,可以在每次用例开始前和结束后都去执行一次。还有更高级一点的setupClass和teardownClass,需配合@classmethod装饰器一起使用。在做selenium自动化的时候,它的效率尤为突出,可以只启动一次浏览器执行多个用例。

pytest框架也有类似于setup和teardown的语法,且不止这几个:

  • setup_module()/teardown_module(),开始于模块始末,全局的
  • setup_function()/teardown_function(),只对函数用例生效(不在类中)
  • setup_class()/teardown_class(),只在类中前后运行一次(在类中)
  • setup_method()/teardown_method(),开始于方法始末(在类中)
  • setup()/teardown(),运行在调用方法的前后

注意:setup_method和teardown_method的功能和setup/teardown功能是一样的,一般二者用其中一个即可

6、pytest执行用例命令行参数

1.-v:pytest -v:可以输出更加详细的用例执行信息,如用例所在的文件及用例名称等

2.-s:pytest -s:输出用例中的调式信息,比如print的打印信息等

3.-m:pytest -m ”标记“:执行被标记的测试用例。

4.-k:pytest -k "关键字":执行名称包含“关键字”的用例

5.-q:pytest -q:简化控制台的输出,如用两个..点代替了pass结果

6.--collect-only:罗列出所有当前目录下所有的测试模块,测试类及测试函数

7.--tb=style:屏蔽用例执行输出的回溯信息,可简化用例失败时的输出信息。style可以是 on,line,short

8.--lf:用例执行完成后,如果其中存在失败的测试用例,可使用此命令重新运行失败的测试用例

9.--ff:上次测试出现失败的用例,使用--ff后,失败的测试用例会先执行,剩余的用例也会再次执行一次

7、输出测试报告的参数

-r参数 :可以用来在测试结束后展示一份“测试概要信息”,从而获取一份清楚的包含失败、跳过、标记失败(xfails)的测试结果(失败,跳过等测试信息)。

-r后可以追加一些参数,参数列表如下:

f - failed:失败的用例
E - error:出错的用例
s - skipped:跳过的用例
x - xfailed:标记失败的用例
X - xpassed:标记成功的用例
p - passed:成功用例
P - passed with output:成功用例并输出信息
a - all except pP:所有pP状态以外的用例

原文地址:https://www.cnblogs.com/mind18/p/15621182.html