自动化测试 —— Pytest测试框架

01 | 简介

Pytest是一个非常成熟的全功能的Python测试框架,主要有以下特点:

  1. 简单灵活,容易上手,文档丰富

  2. 支持参数化,可以细粒度地控制测试用例

  3. 支持简单的单元测试与复杂的功能测试,还可以用来做Selenium、Appium、Requests等UI、接口自动化测试

  4. 支持很多第三方插件,并且可以自定义扩展(Pytest插件下载地址)

  5. 支持测试用例的跳过与失败重试

  6. 可以很好的与CI工具结合,比如Jenkins

02 安装

pip install pytest

03 | 简单使用


import pytest



def test01():

    print('第一条用例')

    assert True

def test02():

    print("第二条用例")

    assert False



if __name__=="__main__":

    # -s:显示用例中的输出

    # -v:输出更详细的用例执行信息

    # __file__:本文件

    pytest.main(["-s", "-v", __file__])

运行结果如下图:

04 | 初始化&结束

4.1 函数级别

每执行一个测试用例就执行一次初始化&结束方法


import pytest

class Test:

    def setup(self):

        print("初始化")

    def teardown(self):

        print("结束")

    def test01(self):

        print('第一条用例')

        assert True

    def test02(self):

        print("第二条用例")

        assert False

if __name__=="__main__":

    pytest.main(["-s",__file__])

执行结果图:

4.2 类级别

不管类中有多少条用例需要执行,仅仅只执行一次初始化&结束方法


import pytest

class Test:

    def setup_class(self):

        print("初始化")

    def teardown_class(self):

        print("结束")

    def test01(self):

        print('第一条用例')

        assert True

    def test02(self):

        print("第二条用例")

        assert False

if __name__=="__main__":

    pytest.main(["-s",__file__])

执行结果图:

05 | 常用插件

5.1 测试报告

安装测试报告插件

pip install pytest-html

在项目目录下创建 pytest.ini 配置文件,配置文件中新增测试报告存储路径。


[pytest]

# 在当前目录下创建report目录存放测试报告

addopts = --html=./report/report.html  

执行测试,生成的测试报告如下图: 

5.2 失败重试

安装插件

pip install pytest-rerunfailures

全局重试:在配置文件中增加重试参数,控制所有用例失败后的重试及重试等待时间


[pytest]

addopts = --html=./report/report.html --reruns 3 --reruns-delay 2

# --reruns n,n是一个整数,表示重试次数

# --reruns-delay n,n是一个整数,表示重试等待时间,单位是s

测试报告中可以看出失败用例的重试情况

单个重试:在某个用例函数中增加装饰器,注意需要将 全局重试 的配置注释掉


# reruns指定重试次数,reruns_delay指定重试间隔

@pytest.mark.flaky(reruns=2, reruns_delay=1)  

    def test02(self):

        print("第二条用例")

        assert False

测试报告中看重试情况:

5.3 多进程并发执行

pytest-xdist的出现就是为了让自动化测试用例可以分布式执行,从而节省自动化测试时间

安装插件

pip install pytest-xdist

多CPU并行执行

pytest -n 并行测试数量

5.4 多重断言

使用pytest进行断言判断的时候,为了用例的精准性,经常会多个方面进行断言,比如:

  • 断言1:断言响应的http的状态

  • 断言2:断言响应返回的code值

  • 断言3:断言响应返回的json中的data字段是否符合预期。

如果使用原生python的assert,就会遇到一个断言失败则全部失败的情况。比如说,断言1结果为Failed,那么断言2和断言3都不会被执行。我们希望断言2和断言3继续执行,这样我们能获取更多的断言结果来判断出接口哪里出了问题,能够更好地进行问题定位,这时候就可以使用pytest-assume插件来实现。

安装插件

pip install pytest-assume

使用案例


import pytest



def test_add2():

    pytest.assume(1 + 4 == 5)

    pytest.assume(1 + 3 == 3)

    pytest.assume(2 + 5 == 7)

    pytest.assume(2 + 5 == 9)

    print("测试完成")


if __name__=="__main__":

    pytest.main(["-s", "-v", __file__])

执行结果如下图,可以看出总共执行了四个断言,其中失败的断言有2个

5.5 美化执行结果

在我们进行自动化测试的时候,用例往往是成百上千,执行的时间是几十分钟或者是小时级别。有时,我们在调试那么多用例的时候,不知道执行到什么程度了,而pytest-sugar插件能很好解决我们的痛点。

安装pytest-sugar插件

pip install pytest-sugar

在命令行中执行用例文件,执行结果如下图,用例执行时会有进度条展示:

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

最后感谢每一个认真阅读我文章的人!作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,坚持几天便放弃的感受的话,在这里我给大家分享一些软件测试的学习资源,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,希望能给你前进的路上带来帮助。如果你用得到的话可以直接拿走:

软件测试资料领取:[内部资源] 想拿年薪40W+的软件测试人员,这份资料必须领取~

软件测试面试刷题工具领取:软件测试面试刷题【800道面试题+答案免费刷】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

### Pytest 使用指南 #### 安装 Pytest 为了使用 Pytest 进行自动化测试,首先需要安装该工具。可以通过 pip 工具来完成安装: ```bash pip install pytest ``` 这将下载并安装最新版本的 Pytest 及其依赖项[^1]。 #### 编写第一个测试案例 编写测试脚本非常直观。创建一个名为 `test_sample.py` 的文件,在其中定义函数和对应的断言语句来进行验证: ```python def inc(x): return x + 1 def test_answer(): assert inc(3) == 4 # 此处应为等于4而非5, 更正了原示例中的错误[^2] ``` 上述代码片段展示了最基础的形式——通过简单的数学运算检验预期结果是否正确。 #### 配置 Pytest 行为 对于大型项目来说,默认配置可能无法满足需求。此时可以利用配置文件来自定义行为模式。例如修改哪些类型的 Python 文件会被视为测试模块、以及它们内部应该遵循什么样的命名约定等: ```ini [pytest] ; 执行check_开头的所有文件 python_files = check_* test_* ; 执行所有的以Test和Check开头的类 python_classes = Test* Check* ; 执行所有以test_和check_开头的方法 python_functions = check_* test_* ``` 注意:Windows 系统下的 `pytest.ini` 文件不允许含有中文字符或注释[^3]。 #### 支持多种场景测试 除了基本的功能外,Pytest 还能很好地集成其他技术栈用于更复杂的测试环境搭建工作,如 Web 应用程序 (借助 Selenium),移动应用(Appium), API 接口(requests库)[^4]。 --- ### 最佳实践建议 - **保持简洁明了**: 尽量让每个测试只专注于单一职责;如果某个特定逻辑变得过于复杂,则考虑将其拆分为多个独立的小型测试。 - **合理组织结构**: 对于较大的工程而言,良好的目录布局有助于提高可维护性和协作效率。通常会按照功能特性划分不同的子包,并在此基础上进一步细分至具体业务领域内。 - **善用 fixture 功能**: Fixture 是一种特殊机制允许共享资源设置过程而无需重复编码。这对于数据库连接池初始化、模拟外部服务调用等情况特别有用。 - **持续集成(CI)**: 结合 CI 平台定期自动触发整个项目的全面回归测试流程,及时发现潜在缺陷所在位置以便快速修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值