pytest 测试实战

霍格沃兹测试开发

ceshiren.com

目录

  • 知识点梳理
  • 测试流程
  • 知识点练习
    • 业务分析
    • 用例设计
    • 编写用例
  • 练习题点评与解析

为什么要学习单测框架?

  • 测试发现:从多个文件中找到测试用例
  • 测试执行:按照一定的顺序和规则去执行用例,并生成结果
  • 测试判断:通过断言判断预期结果和实际结果的差异
  • 测试条件:给定一些前置和后置的条件
  • 测试报告:统计测试进度、耗时、通过率,生成测试报告

知识点梳理

实战练习

  • 计算器场景
  • 设计测试用例

计算器场景需求分析

  • 被测方法需要传递的数据类型为:整型或者浮点型
  • 数据区间为【-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

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

        return a / b

测试用例设计

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

测试用例编写 1

  • 题目:

    • 根据需求编写计算机器(加法和除法)相应的测试用例
    • 在调用每个测试方法之前打印【开始计算】
    • 在调用测试方法之后打印【结束计算】
    • 调用完所有的测试用例最终输出【结束测试】
    • 为用例添加标签
  • 注意:

    • a、使用等价类,边界值,错误猜测等方法进行用例设计
    • b、用例中要添加断言,验证结果
    • c、灵活使用测试装置

添加标签

@pytest.mark.标签名

总结知识点

  • setup, teardown 用法
  • 异常处理
  • 断言
  • 参数化与 ids 用法

测试用例编写 2

  • 使用参数化实现测试数据的动态传递
  • 将测试数据保存到 datas/data.yml
  • 创建读取数据的方法(注意编码格式)

使用 yaml 实现数据驱动

with open("./datas/datas.yml", encoding='utf-8') as f:
  datas = yaml.safe_load(f)
      print(datas)

测试数据

修改编码

def pytest_collection_modifyitems(items):
    """
    测试用例收集完成时,将收集到的item的name和nodeid的中文显示
    :return:
    """
    for item in items:
        item.name = item.name.encode("utf-8").decode("unicode_escape")
        item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")

总结

  • 文件只读一次:yaml 文件读取时只能读取一次,再次读取游标会指到最下面
  • 注意编码:windows 系统,读取 yaml 文件时,要指定 encoding=utf-8
  • 通过 pytest.ini 文件进行相关的配置(比如标签名,运行默认参数)

测试用例编写 3

  • 定义执行顺序,顺序为
    • 先 add 方法 P1_1 和 P1_2 级别的用例
    • 其次执行 P0 级别
    • 然后执行除方法的用例
    • 最后执行 add 方法 P2
    • 最终顺序为:add 用例 (P1_1>P1_2>P0)> div 用例 >  add 用例(P2)
  • 生成测试报告
    • 为测试类和方法添加分类
    • 测试用例中添加日志,测试步骤,及图片

日志收集

参考配置:https://ceshiren.com/t/topic/13105

总结

  • 使用 pytest-ordering 插件,控制用例的顺序
  • 使用 allure-pytest 插件,生成测试报告
  • pytest.ini 文件中配置好日志格式,使用logging模块完成日志添加