参考 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