背景说明手工测试做多了会撞上一类特别枯燥的活接口返回几百条数据要你挑出其中「不符合预期」的那几条报给开发。比如订单列表里金额为负的、状态异常的、字段缺失的。几十条还行一旦上百条、分页几千条眼睛看花、容易漏、还不好向开发证明「我全查过了」。这种「重复、规则固定、量大」的检查正是代码该干的活。而 Python 里干这事只靠两块最基础的砖if 条件判断和for 循环。但这里有个新手容易卡住的点不是把 if / for 语法背会就能干活而是要知道「这个检查规则应该怎么翻译成判断条件」「异常数据应该怎么收集而不是只打印」。这才是测试脚本和「照着教程敲一遍」的本质区别。本文用「订单校验」这个真实高频场景带你写出第一个能直接跑、能输出异常清单的小脚本。一、基础知识条件判断if / elif / elsePython 用if / elif / else表示「如果……否则……」。注意elif是else if的缩写很多语言分开写两个词Python 揉成一个了。 判断行结尾要跟英文冒号:下一行缩进缩进内的代码都属于这个分支。 比较符先用这几个就够等于、!不等于、大于、小于。多个条件用and并且、or或者、not取反连接。容易混淆是赋值才是比较。写了if status 1会直接语法报错或逻辑错误这是测试脚本里高频的笔误。循环for 遍历列表上篇学过接口返回值基本是「字典套在列表里」[{...}, {...}]。要逐条检查用for把列表里每个字典挨个取出来orders [ {order_no: A001, amount: 100}, {order_no: A002, amount: 50}, {order_no: A003, amount: -20}, # 异常金额为负 ] for order in orders: if order[amount] 0: print(f异常订单{order[order_no]}金额为负 {order[amount]}) continue print(f正常订单{order[order_no]}金额 {order[amount]})✅ continue 详细解释很多初学者会误解continue是跳出整个循环。不是continue终止【当前这一轮循环】剩下的代码直接进入下一轮循环不会终止整个for循环。拿上面这段代码拆解 循环每一轮处理1条订单处理 A001金额0不进if跳过continue执行后面print正常订单本轮结束进入下一条。处理 A003金额 0进入if分支打印异常订单 → 执行continuecontinue生效当前这一轮后面的print(f正常订单...)不再执行直接跳到下一条订单。✅ continue VS break测试高频考点continue跳过本轮剩余代码继续下一条数据循环不停止。适用场景当前这条已经判定异常不需要继续校验这条订单其他规则直接检查下一条订单break直接彻底终止整个for循环循环立刻结束不再读取后面任何数据。适用场景发现致命问题剩下数据没必要校验直接终止脚本。例如第一条就发现接口返回字段全部缺失直接停止脚本。举个对照小示例一眼看懂两者差别orders [A001,A002,A003,A004] print( continue演示 ) for o in orders: if o A002: print(f命中{o},执行continue) continue print(f正常输出{o}) print(\n break演示 ) for o in orders: if o A002: print(f命中{o},执行break) break print(f正常输出{o})运行结果 continue演示 正常输出A001 命中A002,执行continue 正常输出A003 正常输出A004 break演示 正常输出A001 命中A002,执行break二、真实工作场景把「手工核对」翻译成「校验逻辑」上面的例子只演示了「判断 打印」。真实测试脚本的差别在于异常结果要收集起来而不是 print 完就没了——需要收集到列表里后续才能做断言、写进测试报告、给开发一个能对账的异常清单。下面是一个完整、贴近日常的订单校验脚本orders [ {order_no: A001, amount: 100, status: paid}, {order_no: A002, amount: 50, status: paid}, {order_no: A003, amount: -20, status: paid}, # 金额为负 {order_no: A004, amount: 300, status: pending}, # 状态异常 {order_no: A005, amount: 80, status: paid}, ] error_list [] # 收集异常供后续对账 / 断言 for order in orders: no order.get(order_no) amt order.get(amount) st order.get(status) # 用 or 把多条规则合并成一次判断 if amt is None or st is None: error_list.append({order_no: no, reason: 字段缺失}) continue # 当前这条已经判定字段缺失不再校验金额、状态直接下一条 if amt 0: error_list.append({order_no: no, reason: 金额为负}) continue if st ! paid: error_list.append({order_no: no, reason: f状态异常:{st}}) # 输出异常清单而不是一行行 print if error_list: print(发现异常订单) for e in error_list: print(e) else: print(所有订单校验通过)三个关键差别这就是「能干活」的界线异常收集到 error_list后续可以拿去做断言、拼成报告而不是 print 完就丢多条规则用continue依次拦截每条记录一旦命中某类异常不再执行后续校验规则跳到下一条订单逻辑清晰不重复.get()兜底字段缺失订单偶尔缺字段直接order[amount]会 KeyError 中断整个脚本用.get()配合is None判断脚本才稳。从「脚本」到「回归检查」的进阶路径把orders换成真实的requests.get()返回值orders resp.json()把print换成assert断言assert e not in error_list接进 pytest失败自动标红就能搭出自动跑的回归检查。先别急着跳步今天把if和for写顺手接请求、接框架都是在这个「收集异常→校验→输出」的骨架上长出来的。骨架对了换数据源只是改一行。三、避坑经验现象if后面忘了加冒号报SyntaxError: expected :原因Python 靠行尾的冒号标记「代码块从下一行开始」。 解法所有if / for / elif / else / def行尾永远补一个英文冒号。现象用比两个金额明明该相等却判成不等 原因浮点数在电脑里不是精确存的0.1 0.2算出0.30000000000000004不是干净的0.3。 解法金额比较用容差abs(a - b) 0.01更彻底的做法是用「分」做单位、全部存成整数彻底绕开浮点误差。现象缩进看着没问题却报IndentationError或逻辑跑飞 原因混用了 Tab 和空格编辑器显示对齐Python 却不认。 解法把编辑器设成「Tab 自动转 4 个空格」全程只用空格缩进——新手踩得最勤的坑。现象if st paid不报错但结果永远不对 原因是赋值把paid赋给了st判断恒为真逻辑悄悄跑飞。 解法比较用写完检查一下有没有把写成。现象订单偶尔缺字段脚本跑到一半KeyError崩掉前面结果全丢 原因用order[amount]硬取key 不存在直接抛异常。 解法用order.get(amount)配合is None判断脚本才不会中途中断。现象混淆 continue / break本该只跳过当前订单结果直接终止全部校验 原因对两者作用范围理解不清。 解法记住口诀continue 跳过本条break 直接全停。测试接口数据遍历校验90%场景使用 continue。下篇预告下一篇聊函数封装把上面这段校验逻辑包成一个函数以后换一个接口只要改一两个参数不用重写整段——《函数封装把重复的手工检查变成可复用代码》。
阅读完成 · 觉得有帮助?