当前位置: 代码迷 >> 综合 >> 1.Pytest-环境准备和测试用例编写规则
  详细解决方案

1.Pytest-环境准备和测试用例编写规则

热度:33   发布时间:2023-09-19 01:51:39.0

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也可以)
1.Pytest-环境准备和测试用例编写规则

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即可