参考 https://www.jianshu.com/nb/49366888
介绍
-
pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行);
-
测试用例的skip和xfail处理;
编写规则
-
测试文件以test_开头(以_test结尾也可以)
-
测试类以Test开头,并且不能带有 init 方法
-
测试函数以test_开头
-
断言使用基本的assert即可
1)用例的前置和后置:
1、Pytest提供了模块级、函数级、类级、方法级的setup/teardown
-
模块级
setup_module/teardown_module:开始于模块始末,全局。 -
类级
setup_class/teardown_class:只在类中前后运行一次(类中)。 -
函数级
setup_function/teardow_function:只对函数用例生效(不在类中)。 -
方法级
setup_method/teardown_method:开始于方法始末(在类中)。 -
类里面的
setup/teardown:运行在调用方法的前后。
2、函数前加@pytest.fixtures()装饰器,在测试用例中使用Fixture函数。可作用于functionmoduleclasssession中。fixture相对于setup/teardown来说的优势,如下:
-
命名方式灵活,不局限于
setup/teardown。 -
conftest.py配置里可以实现数共享,无需import就可自动找到配置数据,可供多个.py文件调用。 -
scope="module",可以实现多个.py文件跨文件共享前置。 -
scope="session",可以实现多个.py文件跨文件使用一个session来完成用例。 -
使用
yeild返回,相当于teardown的作用。
2)参数化:
-
直接使用
@pytest.mark.parametrize装饰器。
3)断言:
-
直接使用Python语言内置的
assert表达式。
4)用例分类执行:
-
可以通过
@pytest.mark来标记测试用例,执行命令前加上参数"-m",即可运行标记的用例。
5)失败重运行:
-
支持用例执行失败重跑,提供了
pytest-rerunfailures插件。
6)报告:
-
使用
pytest-HTML、allure插件生成测试报告。
常用插件
-
pytest-selenium:集成Selenium。 -
pytest-html:生成html格式的自动化测试报告。 -
pytest-rerunfailures:失败case重复执行。 -
pytest-xdist:测试用例分布式执行,也可以说是多CPU分发。 -
pytest-ordering:用于改变测试用例的执行顺序。 -
allure-pytest:用于生成美观的测试报告。
执行用例
用例示例
import pytest
def func(a):
return a + 1
def test_func():
assert func(2) == 2
if __name__=="__main__":
# 注意格式,main参数是一个列表
pytest.main(["test_sample.py"])
命令行运行
进入命令行
py.test # 运行所有用例
py.test test_mod.py # 运行指定文件的用例
py.test somepath # 运行指定文件夹下的用例
执行用例并生成测试报告
py.test --resultlog=path # html测试报告
py.test --junitxml=path # xml测试报告
执行用例的参数:
-
-v:打印用例执行的详细过程。 -
-q:只显示整体测试结果。(显示简略过程) -
-s:用于显示输出调试信息,包括测试函数中print()函数输出的信息。 -
-x,--exitfirst:在第一个错误或测试失败时立即退出。 -
--reruns NUM:失败用例重跑。 需要安装pytest-rerunfailures:失败case重复执行 -
-k args:根据测试用例的名字,搜索匹配字符串,来执行匹配上的测试用例。
在PyCharm中以Pytest的方式运行测试用例
步骤1:
点击File —> Settings —> Tools —> Python Integrated Tools —> Testing
将default test runner由【unittests】变为【pytest】,apply应用一下。

步骤2:
在PyCharm的Edit configurations...中配置以pytest方式运行测试用例。
点击PyCharm右上角的Edit configurations...,
在Edit configurations...中点击左上角的+号标志,添加Python tests —> pytest

步骤3:
然后选择target运行的测试文件,可以选择module(文件名),比如test_01.py,也可以选择文件路径scripts path。

设置完成后点击apply应用。最后执行用例
pytest.main()函数
-
运行所有测试用例:
pytest.main()也可以加上参数:
pytest.main(['-vs'])提示:注意是所用测试用例,包括不同文件上的测试用例,都会执行。
-
执行指定文件的测试用例:
pytest.main(['-s','-v','test_a.py'])也可以
pytest.main(['-vs','test_a.py']) -
执行指定包下的所有测试用例:
pytest.main(['-vs','./interface_testcase'])
提示:main函数的参数是一个列表数据类型。
Pytest Exit Code说明
-
Exit Code 0:所有用例执行完毕,全部通过。 -
Exit Code 1:所有用例执行完毕,存在Failed的测试用例。 -
Exit Code 2:用户中断测试执行。 -
Exit Code 3:测试执行过程中发生了内部错误。 -
Exit Code 4:Pytest命令行使用错误。 -
Exit Code 5:未采集到可用测试用例文件。
Exit Code是公共API的一部分,可以使用以下方法直接导入和访问:也就是在编写测试用例的时候,可以通过枚举的方式获取
Exit Code进行判断或者断言。步骤1:导入
from pytest import ExitCode步骤2:调用(都是常量)
pytest.ExitCode.OK