面试题整理
1、自我介绍
面试官好,我叫。我有5年多的软件测试经验。在工作中,熟练掌握了各种测试方法和工具,包括黑盒测试、白盒测试、自动化测试、性能测试、安全测试等。有一定的编程能力,能够根据需要编写测试用例和脚本。有良好的沟通能力和团队协作能力,能够与开发人员、产品经理等各部门人员有效合作。对软件测试工作很有热情,希望能够在未来的测试工作中继续学习和成长。
我在公司参主要负责交易商品和物流项目的测试工作。公司的产品主要是线上卖课程和直播电商业务。我的目标是确保该平台的功能完整性、性能稳定性和安全性。
在项目实施过程中,我负责以下工作:
设计和执行测试用例,覆盖了所有功能需求和性能需求。
与开发人员合作,跟踪和解决缺陷。
linux常用命令,mysql复杂语句,python基础列表与元组的区别。
2、MQ/redis的测试
MQ 测试主要关注以下几个方面:
- 功能测试:验证 MQ 的基本功能,例如消息发送、接收、队列管理等。
- 性能测试:测试 MQ 的吞吐量、延迟、可靠性等性能指标。
- 兼容性测试:测试 MQ 与不同应用、框架、操作系统等的兼容性。
- 安全性测试:测试 MQ 的安全性,例如消息防篡改、防窃听等。
具体测试方法如下:
- 功能测试:可以使用自动化测试工具来模拟消息发送、接收等操作,并验证结果是否符合预期。
- 性能测试:可以使用压测工具来模拟大量消息的发送和接收,并测试 MQ 的性能指标。
- 兼容性测试:可以使用不同的应用、框架、操作系统等来测试 MQ 的兼容性。
- 安全性测试:可以使用安全测试工具来测试 MQ 的安全性。
Redis 测试
Redis 测试主要关注以下几个方面:
- 功能测试:验证 Redis 的基本功能,例如数据存取、缓存、过期等。
- 性能测试:测试 Redis 的吞吐量、延迟、可靠性等性能指标。
- 兼容性测试:测试 Redis 与不同应用、框架、操作系统等的兼容性。
- 安全性测试:测试 Redis 的安全性,例如数据防篡改、防窃听等。
具体测试方法如下:
- 功能测试:可以使用自动化测试工具来模拟数据存取、缓存等操作,并验证结果是否符合预期。
- 性能测试:可以使用压测工具来模拟大量数据的存取,并测试 Redis 的性能指标。
- 兼容性测试:可以使用不同的应用、框架、操作系统等来测试 Redis 的兼容性。
- 安全性测试:可以使用安全测试工具来测试 Redis 的安全性。
以下是一些常用的 MQ 和 Redis 测试工具:
- MQ 测试工具: JMeter、Kafka Tool、RocketMQ Test Tool
- Redis 测试工具: Redis-benchmark、Jedis、Lettuce
以下是一些具体的测试建议:
- 在测试 MQ 时,可以关注以下几点:
- 消息发送和接收是否成功
- 消息是否按顺序发送和接收
- 消息是否丢失或重复
- 队列是否能正常管理
- 在测试 Redis 时,可以关注以下几点:
- 数据存取是否成功
- 缓存是否有效
- 数据是否过期
- Redis 是否能正常运行
生成器,迭代器,装饰器。生成对象,迭代对象:
它允许程序员扩展或修改函数、方法或类的行为,而不需要改变它们的实际代码。装饰器本质上是一个接受函数作为参数并返回一个新函数的函数。
常见用途
- 计时:测量函数执行的时间。
- 日志记录:在函数执行前后记录日志。
- 权限检查:在函数执行前检查用户权限。
- 缓存:缓存函数的执行结果。
迭代器是一个可以记住遍历的位置的对象。迭代器从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:__iter__()
和 __next__()
。
生成器是一种特殊的迭代器,它使用 yield
语句来生产一系列的值,用于迭代。生成器在Python中非常流行,因为它们易于使用,并且可以创建高效的代码。
生成器函数被调用时,它返回一个生成器对象,但不会立即执行函数体内的代码。当生成器的 __next__()
方法被调用时,函数会执行,直到遇到 yield
语句,然后返回 yield
后面的值。每次调用 __next__()
方法时,函数都会继续执行,直到再次遇到 yield
语句或函数结束。
3、接口自动化测试框架搭建
接口自动化的框架开发:
-
用到的知识点:
-
pytest
-
allure
-
参数化
-
Excel操作,不会,用xlrd
-
日志操作,学过,不太会
-
邮件,会
-
文件操作,文件压缩, 没讲,但你要会的,zipfile
-
执行终端命令,os.system, subprocess:cell, popen
-
如何使用python查看当前目录下的所有文件或者目录?
-
-
-
实现的个功能:
-
将各个功能拆分为多个目录
-
使用参数化读取Excel中的用例
-
发请求
-
获取请求结果
-
校验/断言
-
-
使用allure生成测试报告
-
将allure测试报告所在的目录打包
-
将打包的zip文件使用邮件发送到1206180814@qq.com
-
在重点位置加日志
-
实现思路:
-
读取Excel,每一行数据都是一个用例,你在读出来之后,把这个一行用例封装成一个对象,字典,列表。
-
使用参数化每次讲一个用例对象传进去。
-
使用requests获取用例对象中的相关参数发请求。
-
然后将请求结果与预期值(用例对象)做断言
-
此时,allure所需的json数据已经有了。
-
使用allure命名读取josn数据生成测试报告
-
将报告压缩
-
使用发邮件功能将压缩文件发送
-
在重点位置,添加日志功能
4、自动化平台的搭建
管理所有的接口:
-
接口的增删改查
-
一键执行接口,并生成测试报告
-
批量执行
-
下载报告
-
-
批量导入
-
从Excel表格中
-
-
定时任务
-
-
可视化
-
echarts
-
实现:
-
django + pytest
参考项目列表图,完成:
-
新建项目
-
编辑项目
-
删除项目
-
为项目添加用例
数据库设计:
-
项目表的字段:
-
项目名称
-
项目描述
-
用例数据量,该字段是统计出来的
-
覆盖率字段,计算出来的(通过的用例数量除以项目总的用例数量)
-
开始时间
-
结束时间
-
-
用例表
-
用例名称
-
用例描述
-
所属项目
-
请求的url
-
请求的类型
-
请求的参数
-
期望值
-
执行状态
-
已执行
-
未执行
-
-
通过状态,用例执行后,修改此状态
-
执行成功,已通过
-
执行失败,未通过
-
-
用例报告
-
-
日志表:
-
所属项目
-
执行时间
-
执行的报告
-
作业完成顺序:项目表的增删改查 ---> 用例表的增删改查 -----> 用例执行------> 批量执行的用例日志 ---> 数据可视化
-
页面中,勾选了一个或者多个用例,CheckBox(复选框)
-
点击执行按钮后,后端接收一个或者多个CheckBox的值(用例id):
-
前端如何往后端发送?
-
ajax发送,循环CheckBox的外部盒子,获取每一个CheckBox状态为选中的input框,获取input的value值(用例id),然后push到数组中,再将该数组发送到后端。
-
form表单提交
-
-
后端如何接收form表单提交的值
-
request.POST.get_list
-
-
def index(request): if request.method == "POST": request.POST.get("username") # username对应的是单个值 request.POST.get_list('checkbox_list') # 以列表的形式接收多个值
-
后端接收到了前端传过来的值:
[1, 2, 3, 4]
-
根据获取到的用例id列表,去数据库中提取出对应记录(用例对象)
-
如果是多个用例对象,循环使用requests提取用例对象中的字段发请求。
-
结果断言
-
生成测试报告
-
将测试报告保存到用例的相应字段中
-
修改用例的执行状态和通过状态
-
考虑如何获取批量执行的测试结果报告
-
-
用例批量执行完毕,将批量执行结果保存到log表中
-
用例执行的时间
-
用例报告
-
-
将执行结果给前端返回。
5、性能测试
设计:
在设计评审之后,开发在不知道服务性能瓶颈,需要测试协助定位服务的性能瓶颈,需要测试模拟一定时间之内设计并发用户同时向系统发出请求,检测出系统的响应能力,包括响应时间以及CPU/内存等的使用情况,以验证系统对并发请求时的支持能力,并获取该系统的最大并发请求数量。
目的:
1)清楚服务的性能瓶颈,为设置接口的限流提供参考依据
2)判断资源是否溢出,可节省机器成本
3)检测系统可能存在的问题(代码、db、cache、系统配置、容量)
报告:
(1)cup使用率:26.3%<80% 暂未发现明显性能瓶颈问题
(2)内存使用率:69.1%,暂未发现明显性能瓶颈问题
(3)平均响应时间为0.599s<1S,暂未发现明显性能问题
(4)事务失败率为0.01%,数据库请求数据为46869,请求失败数为6;日志记录如下,error_log中记录为空,服务端暂未发现明显报错,但是在高并发时存在客户端请求连接失败的情况