Pytest 测试用例编写

文章目录


一.Pytest 简介、安装与环境准备

简介

Pytest是现阶段自动化测试主流框架之一,其兼容了unittest 框架,用于编写简单的单元测试和复杂的功能测试。该框架被广泛用于自动化测试、回归测试等各种场景。自动化测试:一句话讲解,使用代码脚本去实现测试用例,可以省去绝大多数简单重复大量的case,节省人力。

pytest的优势如下:
1、pytest 提供了灵活的插件机制、优秀的错误报告、简洁的断言语法、以及丰富的配置选项。

2、Pytest 可以结合 Requests 实现接口测试; 结合 Selenium、Appium 实现自动化功能测试。

3、使用 Pytest 结合 Allure 集成到 Jenkins 中可以实现持续集成。

  • Pytest 的优点
    • 简洁易用:快速上手,有着清晰的代码层级划分,代码可读性更高,可以自动发现和运行测试
    • 强大的插件机制:支持扩展,可以方便地与其他工具和框架集成。
    • 灵活的配置和插件:可以根据项目的需要灵活配置,支持自定义 hooks 和插件。
    • 优秀的断言支持:断言的编写更加简洁明了,无论是读码还是新增都更容易

Pytest 安装与环境准备

需要注意的是,有些Python版本需要使用指定的pytest


  • 安装方式有如下两种

    • 命令安装

      • 安装命令 : pip install pytest
      • 更新命令 : pip install -U pytest
    • 通过 PyCharm 界面化直接安装


运行 pytest 程序

pytest 框架十分简单,使用 test为前缀命名文件,便会被 pytest 框架所执行,并且会根据文件内的代码执行结果产生对应的测试结果报告

  • 运行第一个脚本

    py 复制代码
    def inc(x):
        return x + 1
    
    def test_answer():
        assert inc(3) == 5
    • 运行结果
      • 可通过 pytest 指令运行,将3这个参数传递给函数 inc() 验证结果是否等于5,结果为 3+1=4≠5,所以测试未通过。

二.Pytest 命名规则

命名规则

Pytest 以特定规则识别测试用例,所以测试用例文件、测试类以及类中的方法、测试函数这些命名都必须符合规则,才能被 Pytest 识别到并加入测试运行队列中。如果不遵循 Pytest 的命名规则会导致 Pytest 识别不到测试用例。

  • 详细命名规则
类型 规则 命名示例
py文件 test_ 开头或 _test 结尾 test_app.py
Test 开头 class TestApp:
方法/函数 test_开头 def test_app():
  • 注意:测试类中不可以添加__init__构造函数。

命名规则的优点

  • 自动发现测试用例: Pytest 的命名规则可以让 Pytest 自动发现测试用例,只需按照规定的命名规则编写测试函数或类,Pytest 能够自动识别并执行这些测试。
  • 避免冲突和命名混乱: 通过统一的命名规则,可以避免测试用例的命名冲突和混乱。每个测试函数或类都有明确的命名前缀,使其与其他函数或类区分开来,有助于测试代码的可读性和维护性。
  • 代码结构清晰: 命名规则提供了一种规范的测试代码组织方式。测试函数和类的命名约定使得测试用例的层次结构清晰可见,更易于理解和维护。这对于大型项目或有大量测试代码的项目尤为重要。
  • 与其他测试框架兼容: 许多其他测试框架也采用类似的命名规则,所以如果之前使用过其他测试框架,转换到 Pytest 会更加容易。可以在保持相同的命名约定的同时,切换到 Pytest 并享受其丰富的功能和优势。

三.PyCharm 配置与界面化运行

  • 1、进入 Tools->Python Intergrated Tools。

  • 2、选择 Default test runner 为 pytest。

  • 配置完成后,执行默认 pytest 为测试执行器,否则为默认执行

  • 配置前

  • 配置后


四.Pytest 测试用例结构

当编写测试用例时,通常可以将其分为三个主要部分:用例名称、用例步骤和用例断言。这三部分的组合可以清晰的确定测试的目的、执行过程和预期结果。


测试用例组成要素

  • 用例名称: 测试用例中的用例名称指的是函数名,要使用 test_ 开头或者以 _test 结尾。
  • 用例步骤: 用例步骤是描述测试执行的具体操作、流程或步骤。
  • 用例断言: 用例断言是描述在测试执行后应该满足的条件或预期结果。

测试函数

py 复制代码
# 用例名称
def test_app(self):
    # 测试步骤1
    # 测试步骤2
    # 断言  实际结果 对比 预期结果
    assert ActualResult == ExpectedResult

测试类及内部测试方法(函数)

py 复制代码
# 用例名称
class TestApp:
    def setup_method(self):
        # 资源准备(前置条件,比如吃苹果之前需要先削皮)
        pass
    def teardown_method(self):
        # 资源销毁(后置条件,吃完苹果需要把果核丢尽垃圾桶里)
        pass
    # 用例名称
    def test_XXX(self):
        # 测试步骤1
        # 测试步骤2
        # 断言  实际结果 对比 预期结果
        assert ActualResult == ExpectedResult

五. 测试用例断言

在 pytest 中,断言(assert)是用来验证测试结果是否符合预期的基本手段。

断言语句用的是 Python 内置的 assert 语句,用于验证期望的结果与实际的结果是否相符,它是测试框架中检查测试正确性的基础。

assert 可以检查某个条件是否为 True,如果条件为 False,则会抛出 AssertionError 异常,并且测试失败。


测试用例组成要素

  • 用例名称: 测试用例中的用例名称指的是函数名,要使用 test_ 开头或者以 _test 结尾。
  • 用例步骤: 用例步骤是描述测试执行的具体操作、流程或步骤。
  • 用例断言: 用例断言是描述在测试执行后应该满足的条件或预期结果。

测试函数

py 复制代码
# 用例名称
def test_app(self):
    # 测试步骤1
    # 测试步骤2
    # 断言  实际结果 对比 预期结果
    assert ActualResult == ExpectedResult

相关推荐
Warren983 小时前
Pytest Fixture 作用域与接口测试 Token 污染问题实战解析
功能测试·面试·单元测试·集成测试·pytest·postman·模块测试
测试杂货铺16 小时前
软件测试面试题大全,你要的都在这。。
自动化测试·软件测试·python·功能测试·面试·职场和发展·测试用例
测试大圣16 小时前
软件测试基础知识总结(超全的)
软件测试·python·功能测试·测试工具·职场和发展·单元测试·测试用例
程序员小远1 天前
UI自动化测试用例管理平台搭建
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
devmoon1 天前
智能合约实战 - 水龙头哪里领和创建第一个智能合约地址
web3·区块链·测试用例·智能合约·solidity
serve the people1 天前
python环境搭建 (七) pytest、pytest-asyncio、pytest-cov 试生态的核心组合
开发语言·python·pytest
懒羊羊大王&2 天前
软件测试之博客系统项目实战(补充和解析部分)
selenium·单元测试·测试用例·集成测试
真智AI2 天前
用 LLM 辅助生成可跑的 Python 单元测试:pytest + coverage 覆盖率报告(含运行指令与排坑)
python·单元测试·pytest
Warren982 天前
Allure 常用装饰器:实战用法 + 最佳实践(接口自动化)
运维·服务器·git·python·单元测试·自动化·pytest