场景故事:招聘系统上线日的教训
作为 HR,我曾手动测试内部招聘系统,直到发现一个漏测的边界场景导致严重问题:去年 Q4,我们上线了新版的候选人管理系统。我模拟了 20 种正常操作流程:创建职位、投递简历、筛选候选人、安排面试……所有功能都看起来正常。结果上线第一天,就有候选人投诉:在手机号字段误输入英文字母后,系统直接崩溃,所有未保存的简历信息全部丢失。
技术总监在复盘会上质问:为什么没测试异常输入?那一刻我意识到,手工测试只能覆盖觉得重要的部分,而不是真正关键的。转型 Python 后,我把人力资源的结构化面试思维融入代码,写出了这个单元测试框架。现在我不仅为自己的每个脚本配套测试用例,更把这个方法论教给了产品部门的测试同事,帮助他们将回归测试时间从 8 小时压缩到 15 分钟,Bug 遗漏率下降 70%。
代码核心价值解析
核心代码展示
由于完整代码约 40 行,这里展示 Game 业务类与 TestGame 测试类的核心结构(附中文注释):
import unittest
class Game:
def __init__(self):
self.is_running = False # 游戏初始状态:未运行
self.score = 0 # 初始分数为 0
def start(self):
self.is_running = True # 启动游戏
return "Game started."
def play(self, action):
if self.is_running: # 前置条件检查:游戏必须在运行中
if action == "move_forward":
self.score += 10
elif action == "attack":
self.score += 20
elif action == "use_item":
self.score += 5
:
():
.is_running =
(unittest.TestCase):
():
cls.game = Game()
cls.game.start()
():
.assertTrue(.game.is_running)
.assertEqual(.game.start(), )
():
actions = [, , ]
action actions:
.subTest(action=action):
result = .game.play(action)
.assertIn(action, result)
.assertGreaterEqual(.game.score, )
():
.assertTrue(.game.is_running)
.assertEqual(.game.quit(), )
.assertFalse(.game.is_running)
():
.game.quit()
result = .game.play()
.assertEqual(result, )

