pytest简介
pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。
根据pytest的官方网站介绍,它具有如下特点:
- 简单灵活,容易上手
- 支持参数化
- 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
- pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
- 测试用例的skip和xfail处理
- 可以很好的和jenkins集成
- report框架----allure 也支持了pytest
安装pytest
pip install -U pytest
验证安装的版本:
pytest --version
快速开始
1.新建一个test_demo01.py文件,写以下代码
#此处可以不导入pytest
import pytest
def func(x):return x + 1
def test_answer():assert func(3) == 5
2. 打开test_demo01.py所在的文件夹,
cmd窗口输入:pytest
(或者输入py.test也可以)
3.pytest运行规则:
查找当前目录及其子目录下以test_*.py或*_test.py
文件,找到文件后,在文件中找到以test
开头函数并执行。
测试类:
1.前面是写的一个test
开头的测试函数,当用例用多个的时候,写函数就不太合适了。这时可以把多个测试用例,写到一个测试类里。
class TestClass:def test_one(self):x = "wwj"assert 'w' in xdef test_two(self):x=5assert 2+3 == x
2.pytest会找到符合规则(test_.py和_test.py
)所有测试,因此它发现两个test_
前缀功能。 如果只想运行其中一个,可以指定传递文件名test_class.py
来运行模块:
备注: -q, --quiet decrease verbosity( 显示简单结果)
E:\workspace\python\0510APIDemo\pytestDemo>pytest -q test_class.py
.F [100%]
================================== FAILURES ===================================
_____________________________ TestClass.test_two ______________________________self = <test_class.TestClass object at 0x0000012622663F08>def test_two(self):x=5
> assert 2+2 == x
E assert (2 + 2) == 5test_class.py:7: AssertionError
=========================== short test summary info ===========================
FAILED test_class.py::TestClass::test_two - assert (2 + 2) == 5
1 failed, 1 passed in 0.23s
从测试结果中可以看到,该测试共执行了两个测试样例,一个失败一个成功。同样,我们也看到失败样例的详细信息,和执行过程中的中间结果。-q即-quiet,作用是减少冗长,具体就是不再展示pytest的版本信息。
如何编写pytest测试样例
通过上面2个实例,我们发现编写pytest测试样例非常简单,只需要按照下面的规则:
测试文件以test_
开头(以_test
结尾也可以)
测试类以Test
开头,并且不能带有 init
方法
测试函数以test_
开头
断言使用基本的assert
即可