小牛丨软件测试学习小牛丨软件测试学习
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
  • Python 编程精华文章

    • Python 编程精华文章
    • 1. Python 基础语法面试怎么准备
    • 2. 列表元组字典集合怎么区分
    • 3. Python 字符串常用操作怎么用
    • 4. 函数参数和返回值怎么理解
    • 5. 异常处理在测试脚本中怎么用
    • 6. 文件读写和数据驱动测试
    • 7. Pytest 基础用法怎么讲
    • 8. Pytest fixture 怎么理解
    • 9. Python 接口测试脚本怎么写
    • 10. Python 自动化框架能力怎么提升
⌕
🛒项目实战📦资料包🛠测试神器AIAI路线CV简历测评🧭入行测评🧪测开测评🎯训练营🏆案例❤赞赏我

5. 异常处理在测试脚本中怎么用

异常处理是 Python 测试脚本稳定性的重要保障。很多自动化脚本不是因为系统 Bug 失败,而是因为文件路径错误、接口超时、字段不存在、JSON 解析失败、数据库连接失败等异常直接中断。测试工程师如果不会合理处理异常,脚本就会变得脆弱;如果滥用异常,把所有错误都吞掉,又会掩盖真实问题。

面试中问异常处理,不要只背 try except finally。更好的回答是:异常处理用于捕获脚本执行中的可预期错误,记录日志、保留现场、给出清晰失败原因,但不能随便忽略错误。测试自动化中,异常处理应该帮助定位问题,而不是隐藏问题。

一、什么是异常

异常是程序运行过程中出现的错误。例如:

  • 文件不存在;
  • 除以零;
  • 字典 key 不存在;
  • JSON 格式错误;
  • 接口请求超时;
  • 数据库连接失败;
  • 类型转换失败。

如果不处理,程序会中断。

二、基本语法

try:
    result = 10 / 0
except ZeroDivisionError as e:
    print(f"计算异常: {e}")

常见结构:

try:
    # 可能出错的代码
    pass
except Exception as e:
    # 异常处理
    print(e)
else:
    # 没有异常时执行
    pass
finally:
    # 无论是否异常都执行
    pass

finally 常用于关闭文件、关闭数据库连接、清理资源。

三、接口请求中的异常处理

接口自动化最常见的是请求异常。

import requests

try:
    response = requests.get("https://api.example.com", timeout=5)
except requests.exceptions.Timeout:
    print("接口请求超时")
except requests.exceptions.RequestException as e:
    print(f"请求异常: {e}")

测试场景:

  • 服务不可用;
  • 网络超时;
  • DNS 解析失败;
  • 连接被拒绝;
  • HTTPS 证书问题。

捕获后要记录 URL、请求参数、异常信息,方便定位。

四、JSON 解析异常

接口返回不是合法 JSON 时,解析会失败。

try:
    data = response.json()
except ValueError as e:
    print(f"响应不是合法 JSON: {e}")

测试中如果接口预期返回 JSON,但实际返回 HTML 错误页,就可能触发这个异常。

五、字段不存在异常

接口响应字段缺失时,直接取值会报 KeyError。

try:
    code = data["code"]
except KeyError:
    print("响应缺少 code 字段")

更推荐先断言字段存在:

assert "code" in data

测试脚本要能明确告诉你缺哪个字段。

六、文件读写异常

读取测试数据时常见:

try:
    with open("case.json", "r", encoding="utf-8") as f:
        content = f.read()
except FileNotFoundError:
    print("测试数据文件不存在")

自动化框架中,文件路径错误是常见失败原因。

七、数据库异常

数据库连接、SQL 执行可能失败。

常见原因:

  • 数据库地址错误;
  • 用户名密码错误;
  • SQL 语法错误;
  • 表不存在;
  • 查询超时。

异常处理要记录 SQL、数据库环境和错误信息,但不要把数据库错误吞掉后继续断言。

八、异常处理和断言的区别

异常处理不是替代断言。

断言用于判断实际结果是否符合预期。

异常处理用于处理脚本运行过程中的错误。

例如接口返回业务 code 不对,应该用断言失败;接口请求超时,是请求异常。

九、不要滥用 except Exception

很多人写:

try:
    run_case()
except Exception:
    pass

这是非常危险的。它会吞掉所有错误,导致用例看起来通过但实际没有验证。

如果使用通用异常,也要记录日志并让用例失败。

十、异常处理在框架中的作用

自动化框架中,异常处理常用于:

  • 记录失败日志;
  • 截图;
  • 保存请求响应;
  • 清理测试数据;
  • 关闭连接;
  • 生成报告失败原因;
  • 保证一个用例失败不影响全部用例执行。

例如 UI 自动化失败时截图,接口自动化失败时记录请求和响应。

十一、面试回答模板

如果面试官问“异常处理在测试脚本中怎么用”,可以这样回答:

异常处理主要用于提高测试脚本稳定性和可定位性。接口自动化中常见异常有请求超时、连接失败、响应不是 JSON、字段缺失、文件不存在、数据库连接失败等。我会用 try except 捕获可预期异常,记录 URL、请求参数、响应内容和异常信息,必要时截图或写日志;但不会随便把异常吞掉,因为异常可能代表真实问题。断言失败和脚本异常也要区分,业务结果不符合预期用断言,脚本执行错误用异常处理。

十二、常见追问

追问:finally 有什么用?

无论是否发生异常都会执行,常用于关闭文件、数据库连接、清理资源。

追问:为什么不能直接 except Exception pass?

会吞掉真实错误,导致用例假通过,降低自动化可信度。

追问:接口返回非 JSON 怎么处理?

捕获 JSON 解析异常,记录状态码、响应文本和请求信息,再让用例失败。

十三、练习清单

  1. 捕获请求超时;
  2. 捕获文件不存在;
  3. 捕获 JSON 解析失败;
  4. 捕获 KeyError;
  5. 使用 finally 关闭资源;
  6. 区分异常和断言失败;
  7. 记录异常日志;
  8. 不吞掉异常;
  9. 在框架中保存失败现场;
  10. 准备异常处理面试回答。

异常处理的目标不是让脚本“不报错”,而是让错误更清楚、更可定位、更不影响整体执行。

配套刷题:

  • Python测试开发面试题
相关推荐

下一步可以看这些

面试通关软件测试面试通关系列精华文章

把面试题、项目、简历和训练营串成一套求职准备路径。

入行路线零基础入行软件测试专题路径

从测评、学习路线、项目、简历到面试,按顺序入行。

进阶路线初中级测试进阶高级专题路径

接口自动化、性能测试、CI/CD、复杂业务质量保障进阶路线。

AI 方向AI 测试学习路线专题页

大模型评测、RAG 测试、Agent 测试和 AI 自动化路线。

求职结果Offer 案例 / 学员案例展示

看看真实学员 Offer 案例,判断目标和学习投入是否匹配。

资料 / 交流群添加小牛微信

备注:资料、简历、AI 或找工作,领取对应资料或进交流群。

添加小牛微信
Prev
4. 函数参数和返回值怎么理解
Next
6. 文件读写和数据驱动测试