【8周通关Python-游戏测试工程师 】304 测试用例执行顺序+生成测试报告
文章目录
- 第三周 周四 Python学习执行方案(游戏自动化测试定向·用例执行顺序控制+文本测试报告生成)
-
- 一、 理论学习(35分钟,边学边实操,聚焦游戏测试场景)
-
- ✅ 核心知识点1:unittest 测试用例执行顺序——2种核心控制方法(游戏测试必掌握)
-
- 方法1:TestSuite手动组装法——基础灵活控制(核心,今日重点)
- 方法2:第三方库装饰器法——简洁标记控制
- ✅ 核心知识点2:TextTestRunner 生成文本测试报告——内置工具,无需额外安装
- 二、 游戏测试实战任务(25分钟,核心:加载登录用例+指定顺序执行+生成文本报告)
- 三、 今日知识点查漏补缺 + 游戏自动化测试扩展技巧
- 四、 今日打卡与复盘表(直接填写)
第三周 周四 Python学习执行方案(游戏自动化测试定向·用例执行顺序控制+文本测试报告生成)
今日学习时长:60分钟(35分钟理论 + 25分钟实战)
核心目标:掌握unittest框架中测试用例执行顺序控制的2种核心方法,吃透内置TextTestRunner生成文本测试报告的完整流程;结合游戏登录自动化测试场景,实现「结构化用例加载→指定顺序执行→文本报告自动生成」的全流程落地,解决用例执行无序、测试结果无持久化记录的痛点,让游戏自动化测试结果可追溯、可统计,贴合实际测试工作的报告输出需求。
前置衔接:完全复用第三周周二-周三的TestGameLogin测试类、游戏登录业务函数,整合setUp/tearDown钩子方法和装饰器特性,所有知识点均围绕「游戏登录用例的执行与报告生成」展开,无超纲内容,学完可直接落地所有模块的测试报告生成。
学习价值:用例执行顺序控制能满足游戏测试中「先正常后异常、先核心后次要」的执行逻辑;TextTestRunner是unittest内置的报告生成工具,无需额外安装,能将用例执行结果持久化到文本文件,实现测试结果的存档、复盘与团队共享,是游戏自动化测试从「执行」到「落地」的关键一步,也是自动化测试工程师的必备基础技能。
一、 理论学习(35分钟,边学边实操,聚焦游戏测试场景)
前置痛点回顾
第三周周三完成了TestGameLogin测试类的全方位优化,实现了用例的标准化执行和环境管理,但在实际游戏测试工作中,仍面临执行逻辑不灵活、测试结果无留存的核心问题:
unittest默认按测试方法名首字母排序执行用例(如先执行test_login_error_pwd,再执行test_login_success),不符合游戏测试「先执行核心正常用例,再执行异常用例」的业务逻辑,核心用例执行滞后会影响测试效率;- 用例执行结果仅在控制台临时打印,无持久化记录,测试完成后无法回溯执行详情(如成功/失败/跳过数量、执行耗时、失败原因),也无法将结果发送给团队或归档;
- 控制台输出的结果信息较零散,无标准化的统计汇总,无法快速生成简洁清晰的测试结果报告,满足日常测试工作的汇报需求;
- 无法灵活选择执行指定用例/测试类,只能执行脚本中所有用例,适配性差,当只需验证核心登录用例时,仍需执行所有用例,耗时较长。
今日理论围绕解决以上痛点展开,核心掌握「unittest用例执行顺序的2种控制方法、TextTestRunner生成文本报告的核心流程与参数配置」,所有示例均基于游戏登录自动化测试场景,无缝衔接前三日的代码。
✅ 核心知识点1:unittest 测试用例执行顺序——2种核心控制方法(游戏测试必掌握)
unittest框架的默认执行规则:将测试类中的所有test开头方法按方法名的ASCII码首字母排序执行(数字/字母升序),该规则无需额外配置,但无法适配游戏测试的业务执行逻辑。
游戏自动化测试中,用例执行需遵循业务优先级(如先核心正常用例、后异常用例;先基础功能、后高级功能),因此必须掌握2种核心执行顺序控制方法,分别适用于「简单场景快速控制」和「复杂场景灵活组装」,覆盖90%的游戏测试执行需求。
方法1:TestSuite手动组装法——基础灵活控制(核心,今日重点)
核心原理:通过unittest.TestSuite()创建测试套件,手动将需要执行的测试用例/测试方法按指定顺序逐个添加到套件中,框架会严格按照「添加顺序」执行用例,完全摆脱默认排序规则。
- 核心优势:无需修改原有测试方法,无侵入式控制,灵活度高,可选择执行指定用例、指定测试类、甚至跨模块用例;
- 游戏测试适用场景:绝大多数游戏测试场景,尤其是需要「核心用例优先执行」「仅执行指定用例」的场景(如版本回归时仅执行登录核心用例)。
核心执行流程(必记)
创建测试套件 → 按指定顺序添加测试用例/方法 → 创建TextTestRunner运行器 → 运行器执行测试套件 → 输出执行结果
核心语法(3种添加方式,游戏测试高频)
基于前三日的TestGameLogin测试类(包含test_login_success/test_login_error_pwd/test_login_wechat/test_login_remote),演示3种常用添加方式,均实现「先执行正常登录,再执行错误密码登录」的业务顺序:
import unittest
# 复用前三日的TestGameLogin测试类和game_login业务函数
from game_login_unittest_optimize import TestGameLogin
# 步骤1:创建空的测试套件
suite = unittest.TestSuite()
# 方式1:添加「指定测试类的指定测试方法」(最灵活,精准控制)
# 语法:suite.addTest(测试类("测试方法名"))
suite.addTest(TestGameLogin("test_login_success")) # 第1个执行:核心正常用例
suite.addTest(TestGameLogin("test_login_error_pwd")) # 第2个执行:异常用例
# 方式2:添加「指定测试类的所有测试方法」(按添加顺序执行类内所有方法)
# 语法:suite.addTests(unittest.makeSuite(测试类))
# suite.addTests(unittest.makeSuite(TestGameLogin))
# 方式3:批量添加「多个测试方法」(适用于大量用例批量控制)
# 语法:suite.addTests([测试类("方法1"), 测试类("方法2")])
# suite.addTests([TestGameLogin("test_login_success"), TestGameLogin("test_login_error_pwd")])
# 步骤2:执行测试套件(后续结合TextTestRunner生成报告,此处先控制台执行)
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
执行结果(严格按添加顺序执行)
✅ [setUp] 测试数据初始化完成:正确账号=game_auto_001
test_login_success (__main__.TestGameLogin)
用例1:正确账号密码 → 预期登录成功 ... ok
✅ [tearDown] 清理完成:已删除临时日志文件 game_login_temp.log
✅ [setUp] 测试数据初始化完成:正确账号=game_auto_001
test_login_error_pwd (__main__.TestGameLogin)
用例2:正确账号+错误密码 → 预期失败 ... ok
✅ [tearDown] 无需清理:无临时日志文件
----------------------------------------------------------------------
Ran 2 tests in 0.001s
OK
结果解读:框架严格按照「先test_login_success、后test_login_error_pwd」的添加顺序执行,完全符合游戏测试「先正常后异常」的业务逻辑,跳过了装饰器标记的用例(若未添加)。
方法2:第三方库装饰器法——简洁标记控制
核心原理:通过第三方库unittest-testorder提供的@unittest.order()装饰器,为每个测试方法标记数字执行顺序,框架会按数字从小到大执行用例,数字越小执行越靠前。
- 核心优势:代码侵入式低,只需在方法上添加装饰器,无需手动组装套件,适合「固定执行顺序、无需频繁调整」的游戏测试场景;
- 不足:需要额外安装第三方库,灵活性略低于
TestSuite手动组装法; - 游戏测试适用场景:游戏模块的常态化自动化测试,执行顺序固定(如登录模块始终先正常、后异常、后高级功能)。
核心步骤与语法
- 安装第三方库(仅需一次):
pip install unittest-testorder - 为测试方法添加顺序装饰器:
import unittest from unittest_testorder import order # 导入顺序装饰器 class TestGameLogin(unittest.TestCase): # 标记为第1个执行(核心正常用例,数字最小) @order(1) def test_login_success(self): """正确账号密码-登录成功""" pass # 标记为第2个执行(异常用例) @order(2) def test_login_error_pwd(self): """正确账号+错误密码-登录失败""" pass # 标记为第3个执行(高级功能,暂跳过) @order(3) @unittest.skip("功能未开发") def test_login_wechat(self): """微信扫码登录""" pass - 正常执行:直接用
unittest.main()执行,框架会按@order()标记的数字顺序执行。
2种执行顺序控制方法对比(游戏测试场景适配)
| 控制方法 | 核心原理 | 优势 | 不足 | 游戏测试核心适用场景 |
|---|---|---|---|---|
| TestSuite手动组装法 | 手动添加用例到套件,按添加顺序执行 | 1. 无侵入,不修改原有代码;2. 灵活度极高,可选择执行指定用例;3. 内置功能,无需额外安装;4. 支持跨类/跨模块组装 | 需编写少量组装代码,略繁琐 | 绝大多数场景,尤其是需要灵活选择用例、调整执行顺序的场景(如版本回归、核心用例验证) |
| 第三方库装饰器法 | 方法添加@order标记,按数字顺序执行 | 1. 代码简洁,只需添加装饰器;2. 执行顺序固定,无需每次组装 | 1. 需额外安装第三方库;2. 灵活性低,无法快速选择指定用例;3. 修改顺序需调整装饰器数字 | 常态化自动化测试,执行顺序固定的游戏模块(如登录、支付核心模块) |
✅ 核心知识点2:TextTestRunner 生成文本测试报告——内置工具,无需额外安装
TextTestRunner是unittest框架内置的测试运行器,不仅能执行测试套件/测试用例,还能通过简单的参数配置,将用例执行结果持久化输出到文本文件,生成标准化的文本测试报告,无需额外安装任何第三方库,是游戏自动化测试中轻量级、快速落地的报告生成工具。
核心优势(游戏测试落地适配)
- 零依赖:
unittest内置组件,无需pip安装,跨环境运行无兼容问题; - 易上手:仅需2行核心代码,即可实现报告持久化,学习成本低;
- 标准化:报告包含完整的执行统计(成功/失败/跳过/预期失败数、执行耗时)、详细的执行日志(每个用例的执行结果、失败原因),符合测试报告的基本要求;
- 可共享:生成的文本文件(.txt)可直接发送给团队、归档保存,实现测试结果的可追溯。
核心原理
通过Python的文件流重定向,将原本输出到控制台的执行结果,通过TextTestRunner的stream参数,重定向输出到指定的文本文件中,实现「执行用例+生成报告」一步完成。
核心语法与完整流程(必记,今日实战核心)
结合TestSuite手动组装法,实现「指定顺序执行用例+生成文本报告」的全流程,核心仅需5步,语法固定,可直接复用:
import unittest
import os
# 1. 导入自定义测试类
from game_login_unittest_optimize import TestGameLogin
if __name__ == "__main__":
# 步骤1:创建测试套件,按业务顺序添加用例
suite = unittest.TestSuite()
suite.addTest(TestGameLogin("test_login_success"))
suit









