软件测试面试题真题分享
1. 你了解JMeter吗?讲一下
JMeter是Apache开源的性能测试工具,主要用于模拟高并发场景,评估系统的性能瓶颈(如响应时间、吞吐量、资源占用等)。
- 核心功能:支持HTTP、TCP、数据库(MySQL等)、消息队列(MQ)等多种协议,可通过“线程组”模拟多用户并发,通过“监听器”(如聚合报告、图表)分析结果。
- 扩展用途:除了性能测试(负载、压力、耐久测试),还可用于接口功能测试、接口自动化(结合CSV参数化)等。
- 特点:可视化界面易操作,支持分布式压测(突破单台机器性能限制),插件生态丰富(如JSON提取器、断言组件)。
2. 你了解Postman吗?是干啥的?除了接口测试功能还有哪些?
Postman是一款主流的API开发与测试协作工具,核心用途是通过图形化界面发送HTTP/HTTPS请求(GET/POST等),验证接口响应(状态码、返回值),实现接口功能测试。
除接口测试外,其他核心功能包括:
- 环境与变量管理:支持多环境(开发/测试/生产)配置,通过全局变量、环境变量实现参数传递(如登录token传递给后续接口)。
- 集合(Collection)测试:将接口按业务场景分组,一键运行整个集合,支持批量执行与自动化(结合 Newman 可集成到CI/CD)。
- Mock服务:在后端接口未开发完成时,可模拟接口返回预设数据,支持前端并行开发。
- 文档生成:自动生成接口文档(含请求参数、响应示例),支持分享协作。
- 监控功能:对关键接口设置定时监控,实时告警异常(如响应超时、错误码)。
3. pytest和unittest你用过吗?有什么区别?
两者都是Python的单元测试框架,我在项目中都用过,核心区别如下:
维度 | unittest | pytest |
---|---|---|
语法风格 | 必须继承unittest.TestCase 类,用def test_xxx() 定义用例,依赖固定方法(如setUp() 初始化) | 无需继承类,直接用def test_xxx() 定义用例,语法更简洁灵活 |
断言方式 | 依赖框架内置断言(如self.assertEqual() ),失败信息较简单 | 支持Python原生断言(如assert a == b ),失败信息更详细(自动显示变量值) |
用例发现 | 需手动加载用例(如unittest.main() ),规则较严格 | 自动发现符合命名规则(test_*.py )的用例,无需手动配置 |
功能扩展 | 功能基础,扩展需自定义插件 | 支持丰富的插件(如pytest-html 生成报告、pytest-parametrize 参数化),内置fixture机制(更灵活的初始化/清理) |
兼容性 | 仅支持自身风格用例 | 兼容unittest用例,可无缝迁移 |
实际场景中,pytest因灵活性和插件生态更常用,尤其是复杂项目(如参数化、分布式执行)。
4. AI工具你了解吗?使用情况如何?ChatGPT和DeepSeek你认为哪个好?
(1)了解的AI工具及使用场景
常用的AI工具包括ChatGPT、DeepSeek、GitHub Copilot、讯飞星火等,我在测试工作中主要用于:
- 效率提升:用ChatGPT/DeepSeek生成测试用例(如接口异常场景)、自动化脚本(如Python+Selenium代码),辅助编写测试报告。
- 问题排查:通过AI分析日志中的报错(如“Redis连接超时”),提供可能的解决方案(如检查网络、调整maxclients参数)。
- 知识补充:快速学习新技术(如“JMeter分布式压测配置”),AI可简化复杂概念的理解。
(2)ChatGPT和DeepSeek的对比
两者各有优势,需结合场景选择:
- ChatGPT(GPT-4):优势在多语言支持、通用场景理解(如跨领域对话、创意生成),对复杂逻辑(如多步骤测试流程设计)的处理更流畅,但中文特定场景(如国内系统的适配问题)可能不如本土模型精准。
- DeepSeek:作为国内模型,中文语境理解更优(如处理带方言的需求描述),对国内技术栈(如微信小程序测试、阿里云服务)的适配性更强,响应速度较快,但在超复杂跨领域任务上可能稍逊。
实际使用中,我会根据场景搭配:写通用脚本用ChatGPT,处理中文业务逻辑或国内技术问题用DeepSeek。
5. 微信发送消息的测试用例
需覆盖功能、性能、兼容性、安全性等维度,核心用例包括:
- 功能测试:
- 正常场景:单聊/群聊发送文本(空内容、最大长度)、表情、图片(格式/大小限制)、文件(类型/大小)、语音(时长/格式)。
- 异常场景:无网络时发送(提示“请检查网络”)、对方拉黑后发送(提示“消息未送达”)、消息撤回(撤回时限内/外操作)。
- 性能测试:连续发送100条消息是否卡顿、群聊500人同时发送消息是否延迟。
- 兼容性测试:不同版本微信(iOS/Android)、不同手机型号(如折叠屏)发送消息是否正常。
- 安全性测试:发送含敏感词(如违规内容)是否被拦截、消息是否加密传输(抓包是否可见明文)。
6. Redis主动更新和被动更新是什么?原理是什么?
Redis的“更新”指键值对的新增、修改、删除或清理,核心区别是触发时机:
-
主动更新:由用户操作或Redis主动触发,时机可控。
- 用户显式命令:如
SET key value
(修改)、DEL key
(删除),直接操作内存数据,即时生效。 - 主动过期删除:Redis定时任务(每秒10次)随机抽查过期键,删除已过期的键(避免全量扫描耗性能)。
- 内存淘汰:当内存达
maxmemory
上限,按策略(如LRU)主动删除键,为新数据腾空间。
- 用户显式命令:如
-
被动更新:依赖外部触发(如用户访问),时机被动。
- 惰性删除:键过期后未被主动删除,用户访问时(如
GET key
)才检查,过期则删除并返回nil
。 - 缓存被动同步:数据库数据更新后,业务层被动触发Redis缓存更新(如删除旧缓存,下次访问时从DB加载新数据)。
- 惰性删除:键过期后未被主动删除,用户访问时(如
7. 测试用例的设计方法
常用设计方法及适用场景:
- 等价类划分:将输入划分为有效/无效等价类(如手机号测试:有效11位数字,无效<11位/非数字),减少用例数量。
- 边界值分析:重点测试边界(如微信消息最大长度为2000字,测试1999、2000、2001字)。
- 场景法:按业务流程设计(如电商“下单-支付-发货”全流程)。
- 因果图法:处理多条件组合(如登录时“用户名+密码”的正确/错误组合)。
- 错误推测法:基于经验设计异常场景(如网络波动时提交订单)。
8. 抓包工具用过哪些?
- Fiddler/Charles:主要用于HTTP/HTTPS协议抓包(如接口请求参数、响应数据),支持断点调试(修改请求后重发),适合Web和App接口测试。
- Wireshark:底层协议抓包工具(支持TCP/UDP/IP等),可分析网络层问题(如丢包、延迟),适合复杂网络环境排查。
- Burp Suite:常用于Web安全测试(如SQL注入、XSS),支持抓包、重放、漏洞扫描,集成在渗透测试流程中。
9. Linux查看日志上下五行的命令
用grep
结合上下文参数:
grep -C 5 "关键词" 日志文件
:显示匹配行及上下各5行(C=Context)。- 其他常用:
-A 5
(后5行,A=After)、-B 5
(前5行,B=Before)。
示例:grep -C 5 "error" /var/log/app.log
(查看app.log中含“error”的行及上下5行)。