作者:Gakki
使用什么测试框架做的上一个项目的自动化测试?说下怎么做的?对自动化的理解?
python+pytest+allure 做接口自动化,偶尔会用unittest
- 将测试用例写到 Excel 表中,然后其中有一列用来判断是否运行用例,有一列是用来判断接口之间的依赖性
- 然后将所有需要运行的用例读取出来,然后通过 @pytest.mark.parametrize 装饰器循环运行用例,先判断是否存在接口的依赖性,是否依赖上个接口的入参和响应数据,如果需要,则依赖的接口需要先运行,每运行完一次用例都将响应数据保存下来,已备后面有的接口会用到。如果是登录的接口,需要将token放入头部,后面的用例好直接调用。
- 将响应的数据进行断言。如果失败,将响应数据保存到log中,并在excel表中的一列中表明该用例运行失败
理解:
- 可以尽早的发现bug,因为接口自动化是偏底层的,所以可以更早的发现bug
- 提高工作效率,每次更新迭代版本的时候,可以先运行写好的脚本,查看之前的接口是否受到影响,这样可以大大的提高测试人员的工作效率
- 协助定位问题,接口层发现问题了,可以快速的定位到哪里错问题了
- 线上监控报警,可以通过Jenkins,定时运行脚本,如果有问题,可以通过邮件发送到测试人员手中,让损失尽量减少
- 协助手工测试完成很难模拟或无法模拟的的工作,比如付款的时候,篡改数据等。
自动化遇到用例fail掉如何排查故障?
- 从 log,然后根据 log 检查问题所在,是不是因为版本更新了入参什么改了
- 运行用例,打断点/断言,查看入参或响应数据是否有问题。也可以将入参复制下来,放到接口文档上看是否有问题。然后逐一调试。
说说接口测试的流程和接口自动化流程
流程:
- 分析接口文档和需求文档
- 编写接口测试计划
- 编写接口测试用例并评审
- 接口测试执行,依据文档设计接口参数,获取响应,解析响应,校验结果,判断测试是否通过
- 输出接口测试报告
- 其他。接口文档主要包括以下几个部分:
- 接口说明
- 请求方式
- 请求URL
- 请求参数
- 返回数据
- 返回实例
- 接口用例要包含如下部分:
- 用例编号、模块名称、接口名称、用例标题、请求方法、请求URL、请求参数(包括请求头、请求体)、预期结果、实际结果等。
requests 获取响应内容、响应状态码、响应头
- r.text # 通过文本的形式获取响应内容
- r.encoding # 通过encoding来获取响应内容的编码以及修改编码
- r.content # 通过content获取的内容便是二进制类型的
- r.json() # JSON响应内容
- r.raw # 原始响应内容。也就是urllib中的HTTPResponse对象
Post请求的四种参数形式是什么?
请求方式 | 描述 |
---|---|
application/x-www-form-urlencoded | 浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。 |
multipart/form-data | 一般用来上传文件,各大服务器的支持也比较好。所以我们使用表单 上传文件 时,必须让<form>表单的enctype属性值为 multipart/form-data. |
application/json | 用来告诉服务端消息主体是序列化的JSON字符串 |
text/xml | 使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范 |
当一个接口出现异常,你是如何分析异常的?
- 接口出现异常,首先我们要分清楚这种异常是什么类型的异常。
- 首先,我们可以通过接口请求的返回值和预期结果比较,来判断这个异常类型。如果是 HTTP 请求的接口,我们可以根据接口的返回状态码来判断这个异常类型。 如:400+的异常都是客户端的异常,500+的异常都是服务器端的异常。
- 判断完接口异常类型之后,我们根据各种异常类型来分析这个异常。
- 比如是客户端的异常,我们需要定位出接口那部分功能出问题,是参数?请求方式?还是路径?请求头数据不对?等等;比如是服务器端的异常,我们需要定位异常发生在服务器的那部分,是server部分,还是数据库部分,还是中间件部分?
- 定位好异常之后,能够复现这个异常,就将 bug 指派给对应的人员。
什么是 DNS?
- 域名解析服务。将主机名转换为 IP 地址。如将 www.google.com 主机名转换为 IP 地址:69.171.233.33
为什么要做接口测试?
- 越底层发现bug,它的修复成本是越低的
- 前端随便变,接口测好了,后端不用变,前后端是两拨人开发的。
- 检查系统的安全性、稳定性
- 检查系统的异常处理能力
- 可以发现很多在页面上操作发现不了的bug