2026赛前辅导-pytest测试框架

全国测试开发大赛

https://mp.weixin.qq.com/s/hi5Ke1W6fihVQscYc6bSMw

测试开发赛道:https://mp.weixin.qq.com/s/wyCY-pFyvHvi27vvnJ7YXQ

比赛报名地址:https://ccf.org.cn/cat2026

目前比赛报名时间截止到 5月27日

测试开发赛道官方选手通知QQ群:1102401108

考试范围

业务测试、算法、web 自动化测试和接口自动化测试相关的技能。

赛前技能准备

  • 掌握一门编程语言:python/java
  • 掌握对应语言的单元测试框架:pytest/JUnit
  • 软件测试的基础理论
  • web 自动化测试:selenium
  • 接口自动化测试:python 推荐使用 requests,java 推荐使用 restassured

目录

  • 学习路径
  • 环境搭建
  • 编写单元测试用例
  • 实现参数化
  • 测试用例运行与调度

学习路径

image

环境搭建

pip 安装

  • 安装命令:pip install -U pytest

  • 安装成功后,查看版本:pytest --version

编写单元测试用例

Pytest 测试用例编写规范

  • 测试文件以 test_ 开头(以 _test 结尾也可以)
  • 测试类以 Test 开头,并且不能带有 init 方法
  • 测试函数和方法以 test_ 开头

被测代码分析

  • 加法计算器
  • 被测方法需要传递的数据类型为:整型或者浮点型
  • 数据区间为【-99,99】
  • 浮点数允许小数点后两位

class Calculator:

    def add(self, a, b):

        if a > 99 or a < -99 or b > 99 or b < -99:
            print("请输入范围为【-99, 99】的整数或浮点数")
            return "参数大小超出范围"

        return a + b

被测代码测试用例设计

  • 等价类
  • 边界值
  • 错误推断

编写单元测试脚本

  • pytest:执行当前目录下所有的测试用例
  • pytest -v:查看详细日志信息
  • pytest -vs:控制台会打印 print 中的内容
  • pytest -vs test_add.py::TestAdd::test_add1:指定要执行的具体测试方法

pytest 框架结构

  • 测试装置(test fixture)
  • 测试用例(test case)
  • 测试套件(test suite)
  • 测试执行器(test runner)
pytest 框架结构
  • 模块级(setup_module/teardown_module)模块始末,全局的(优先最高)
  • 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
  • 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
  • 方法级(setup_method/teardown_methond)开始于方法始末(在类中)
介绍不同级别的作用域
  • module 模块:python文件,也就是一个python文件之前执行一次,一个文件中的测试用例都运行完毕后再执行一次。
  • function 函数:类外面的函数,每个测试函数的前后运行一次
  • method 方法:类中的方法,每个测试方法的前后运行一次
  • class 类:一个测试类的前后运行一次

类级别和方法级别演示

class TestDemo:
    def setup_class(self):
        print("类级别的setup")

    def teardown_class(self):
        print("类级别的teardown")

    def setup_method(self):
        print("方法级别的setup")

    def teardown_method(self):
        print("方法级别的teardown")

    def test_demo1(self):
        print("testdemo1")

    def test_demo2(self):
        print("testdemo2")

实现参数化

class TestAdd:

    @pytest.mark.P0
    @pytest.mark.parametrize("a, b, expect", [
        [1, 1, 2],
        [-0.01, 0.02, 0.01],
        [10, 0.02, 10.02]
    ], ids=["int", "float", "int_float"])
    def test_add_by_params(self, a, b, expect):
        # 实际结果
        result = self.cal.add(a, b)
        # 预期结果
        # expect = 2
        # 断言
        assert result == expect

总结

  • pytest 环境搭建
  • pytest 用例编写
  • pytest 参数化
  • pytest 用例执行

pytest_framework.zip (22.3 KB)