一、接口测试基础
1、概况
2、为什么要做接口测试
1. 前后端分离架构普及:前端和后端独立开发,后端先完成接口,前端页面还没开发完,就可以提前做接口测试,提前发现后端 bug,缩短项目周期。
2. 系统间数据交互:一个系统经常需要调用第三方 / 其他内部系统,系统之间靠接口传输数据,必须验证接口交互是否正常。
3. 安全层面:前端页面可以绕过(前端校验很容易被篡改),核心的权限、数据校验需要在接口层做校验,防止非法请求。
3、接口测试测什么--(参数,结果,容错处理,权限)
参数校验:入参合法性(必填、长度、类型、范围、非法参数)
返回结果校验:返回数据是否符合接口文档,字段、数据正确性、业务逻辑结果
容错 / 异常处理:传空、传超长、传错误参数时,接口返回合理提示,不崩溃
权限控制:未登录用户、低权限账号能不能访问接口;越权访问校验
额外面试加分项:接口性能、接口并发、加密、数据一致性
4、接口测试工具
Jmeter,Postman,Apifox,Apipost,各种七七八八。
二、Jmeter安装配置及核心目录讲解
1、安装配置步骤
2、核心目录讲解
backups:自动备份的目录
bin:jmeter.bat 启动文件,jmeter.properties 核心配置文件
extras:存放和第三方集成的构建文件
lib:存放 jar 包
三、Jmeter组件和作用域详解
1、10大组件(元件)(重点)
1. 测试计划:容器
2. 线程组:1-N 用户
3. 配置元件:接口配置,协议,接口服务器 IP,接口服务器端口
4. 前置处理器:在接口请求之前的操作
5. 逻辑控制器:判断条件成立才请求接口,循环请求
6. 定时器:延迟请求接口
7. 取样器:发送请求
8. 后置处理器:在接口请求之后的操作
9. 断言:判断接口是否成功
10. 监听器:收集测试结果
2、JMeter:接口测试 vs 性能测试(区分)
1 个用户(线程):接口测试
只验证接口能不能调通、返回数据是否正确、业务逻辑正常,侧重功能正确性。
多个用户(多线程):性能测试
模拟大量用户并发访问,查看接口响应时间、吞吐量、错误率、服务器资源占用,侧重服务承载能力。
3、组件的作用域(非常重点)
结论一:组件可以作用于父组件,得出:如果我的组件只想作用于一个组件,那么就放到这个组件下面。
结论二:组件可以作用于平级兄弟组件。
结论三:组件可以作用于平级兄弟组件之下的子组件。
简单一句话总结:取样器 / 控制器之外的配置元件、断言、监听器,作用范围是当前层级及所有下级子组件。
四、Jmeter接口测试实战----请求方式,,请求路径,请求参数,请求头
(技巧关键)接口测试关键在于填写:请求方式,,请求路径,请求参数,请求头
1、场景一:我一个人负责所有的接口:项目规模不大
概况:
注意:access_token每一次请求之后都是会变的,不是固定的。
接口关联:下一个接口要用到上一个接口的access_token参数
场景一:
例子1:查询字符串参数
请求 URL:
`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=secret`
第一步:根据请求url填写相关的内容
第二步:添加一个http请求(第一个接口),协议与服务器名称及端口号默认与前面一致,参数为查询字符串参数,根据参数说明填参数
第三步:添加一个查看结果树,运行后,查看响应数据
例子2:json参数
第一步:根据请求url填写相关的内容
第二步:添加一个http请求(第二个接口),协议与服务器名称及端口号默认与前面一致,参数为json参数,将其复制粘贴到消息体数据出上传
第三步:查看路径还需填写那些参数,这里还要填写access_token,从例子1的响应数据处获取,将其粘贴到路径的对应位置。
第四步:运行后,查看响应数据
例子3:jsonpath实现接口关联---后置处理器(json提取器)
概况:
第一步:在获取鉴权码接口处添加正则表达式提取器/json提取器
第二步:在查看结果树里选json path tester,{}为根节点,用$表示,{}里面的参数为子节点的值,然后在$后写一个".",然后填要查询的参数
第三步:将正则表达式$.access_token填到那里,将其赋值给www,这是第一个值,如果没有取到则用default代替。
第四步:下一接口要用时,用${www}代替
第五步:查看www是否取到值,两种方法,法一:在下一接口的请求里面看法二:调试取样器里看
例子4:无参数,正则表达式实现接口关联-----后置处理器(正则表达式提取器)
概况:
第一步:添加新接口,填写完整路径
第二步:返回参数说明那里可看到有csrf_token鉴权码,因返回的是html脚本(文档),所以用正则表达提取
第三步:
第四步:在regexp tester中,将其粘贴然后查询,可以看到他可以取4个值
第五步:该正则提取器从首页 HTML 响应里提取第 2个 csrf_token 存入变量aaa,供后续接口使用;用第一个正则去取值,取到后选取到的第2个值,若页面只有 1 个 token 则提取失败,默认default。($1$代表用第一个正则去匹配)
第六步:在查看结果树里面查看aaa是否取到了值
例子5:请求头,表单参数
概况:
第一步:添加一个http请求,填入http请求及完整路径
第二步:填请求头。添加http信息头管理器,根据接口文档填写名称及值
第三步:将表单参数填入
第四步:查看regtexp的结果,看是否与接口文档的返回示例一致
例子6:http cookie管理器的使用
2、场景二:多个测试人负责整个项目,我只负责其中几个模块的接口测试。协同接口测试
概括:
1、如何使用测试片段(本地)
第一步:新建一个测试片段,测试片段默认是禁用的
第二步:这是张三这个测试人员做的一些请求
第三步:增加一个查看结果树,测试片段就相当于只是项目的一部分用例,不能单独运行,必须要和控制器(include 模块)一起使用才能执行。
第四步:在线程组增加一个模块控制器,用它控制张三的测试片段
2、测试汇总,组长如何处理收集回来的测试片段
概括:
(组长 leader:张三,李四,王五三个人的用例都拿过来,然后一起执行)
第一步:启用测试片段
第二步:把测试片段保存到桌面,可以看到jmx文件,然后发给leader(一般通过svn或git版本控制工具来发)
第三步:你是leader,新建线程组,添加include控制器控制,添加刚才张三,李四,王五...发来的jmx文件
第四步:查看他们发来的所有用例,
第五步:
第六步:
五、
六、