目录
2. 场景二:多个测试人负责整个项目,我只负责其中几个模块的接口测试。协同接口测试
一、接口测试基础
1. 为什么要做接口测试?
-
前后端分离架构
-
项目一般都不是独立的,经常要调用外部的项目。项目和项目之间交互数据,通过接口交换。
-
安全考虑。
2. 接口测试测什么?
-
接口就是个函数
-
USB接口:数据传递的正确性(参数),输出结果的正确性,以及各种容错处理和权限控制。
-
项目接口:参数,结果,容错处理,权限。
3. 接口测试的工具?
Jmeter、Postman,Apifox,Apipost,各种七七八八。
二、Jmeter安装配置以及核心目录详解
1. 安装
jmeter基于java语言来开发,java需要jdk环境:
-
安装jdk并且配置jdk的环境变量
-
jmeter只需要解压就可以使用了
-
双击jmeter.bat文件就可以启动
2. 目录
-
backups:自动备份目录
-
bin:启动文件
-
jmeter.properties核心配置文件
-
-
docs:文档 不重要
-
extras:存放和第三方集成的构建文件
-
lib:存放jar包
-
licenses
-
printable_docs
-
LICENSE
-
NOTICE
-
README.md
三、jmeter组件和作用域详解
1. 组件(元件):(记住)
-
测试计划:容器
-
线程组:用户
-
配置元件:接口配置,协议,接口服务器IP,接口服务器端口
-
前置处理器:在接口请求之前的操作
-
逻辑控制器:判断条件成立才请求接口,循环请求
-
定时器:延迟请求接口
-
取样器:发送请求
-
后置处理器:在接口请求之后的操作
-
断言:判断接口是否成功
-
监听器:收集测试结果
2. 组件作用域:
-
最基本的架构
-
-
结论一:组件可以作用于父组件。如果我的组件(它)只想作用于一个组件,就把它放到组件的下面。
-
结论二: 组件可以作用于平级组件。
-
结论三:组件可以作用于平级组件之下的子组件。
四、jmeter接口测试实战
1. 场景一:我一个人负责所有的接口,项目规模不大
-
接口文档示例(开发给):
-
一下都是建立在【测试计划-》线程组-场景一-》】下
-
HTTP请求默认值
-
Web服务器:https
-
服务器名称或ip:api.weixin.qq.com
-
端口号:http:80 https:443
-
-
HTTP Cookie管理器
-
用户定义的变量
-
HTTP请求(请求方式,请求路径,请求参数,响应查看结果)
-
获取鉴权码access token接口
-
Web服务器、服务器名称或ip、端口号 不用配置 默认
-
HTTP请求:GET
-
路径:/cgi-bin/token?grant type=client credential&appid=appid&secret=secret(/cgi-bin/token?grant type=client credentia&appid=wx8a9de038e93f77ab&secret=8326fc915928dee3165720c910efb86)
-
查询字符串参数:直接在路径后面?传,多个参数之间用&分开
-
-
编辑标签接口
-
Web服务器、服务器名称或ip、端口号 不用配置 默认
-
HTTP请求:POST
-
路径:/cgi-bin/tags/update?access token=ACCESS TOKEN
-
ACCESS TOKEN是上个请求生成的token
-
在运行这个接口测试前,把第一个接口请求禁用掉,否则每一次请求token会变
-
-
josn参数格式:消息体数据-》把文档中的参数复制进去
-
文件参数:在文件上传传递
-
-
访问phpwind论坛首页接口
-
Web服务器、服务器名称或ip、端口号 不用配置 默认
-
HTTP请求:GET
-
路径:和默认配置不一样的话输入完整路径就可以抵消掉http:/147.107.116.139/phpwind
-
查看结果树-》JSON下的访问phpwind论坛首页接口-》响应数据(是网页格式)
-
要从中提取参数的话只能用正则表达式
-
-
-
登录接口
-
Web服务器、服务器名称或ip、端口号 不用配置 默认
-
HTTP请求:POST
-
路径:和默认配置不一样的话输入完整路径就可以抵消掉本站新帖 - 码尚教育 - Powered by phpwind
-
参数:根据接口文档填写
-
其中包括需要从上一个接口提取的信息 值为${aaa}
-
-
要求是必须带请求头
-
登录接口-》添加-》配置元件-》HTTP信息头管理器-》根据接口文档填写名称和值
-
Accept 只接受json格式
-
X-Requested-WVith 异步请求
-
cookies
-
-
查看结果树-》RegExp Tester下的登录接口-》【RegExp Tester】查看参数是否符合接口文档要求
-
-
-
查看结果树(可选josn格式)
-
运行-》【响应数据】、【请求】中查看对还是错
-
有text格式、json格式
-
-
注意:
-
access token每一次请求之后都是会变的。不是固定的。
-
接口关联:下一个接口需要用到上一个接口的access token参数
-
2. 场景二:多个测试人负责整个项目,我只负责其中几个模块的接口测试。协同接口测试
-
什么是测试片段?
-
就相当于只是项目的一部分用例,不能单独运行,必须要和控制器(include,模块)一起使用才能执行。
-
默认禁用
-
与线程组属于同一个级别
-
-
如何使用测试片段?
-
新建一个测试片段,然后把所有的组件都放到这个测试片段下面,然后通过线程组下面的模块控制器去控制这个片段执行查看结果。
-
组长leader:张三,李四,王五三个人的用例都拿过来,然后一起执行。
(1)组员启动测试片段,把测试片段保存为jmx文件,然后发给组长leader(一般通过SVN或者GIT版本控制工具发送)
(2)Leader新建一个线程组,然后再线程组下新建include控制器去控制上面的脚本运行。
-
已下为我是张三 我的目录结构
-
测试计划-》线程组-场景二
-
测试计划-》线程组-》添加-》逻辑控制器-》模块控制器(命名:模块控制器-商品管理)-》选中所需测试片段(命名:商品管理模块-张三测试)
-
测试计划-》测试片段(命名:商品管理模块-张三测试)
-
HTTP请求默认值
-
HTTP Cookie管理器
-
用户定义的变量
-
获取鉴权码access token接口
-
编辑标签接口
-
-
查看结果树
-
步骤:
-
进行测试
-
测试完成后 启用测试片段
-
商品管理模块-张三测试-》选中部分保存为jmx文件
已下为我是leader 我的目录结构
-
测试计划-》线程组-》添加-》逻辑控制器-》include控制器-》文件名选择组员的文件
-
测试计划-》线程组-》添加-》监听器-》查看结果树
步骤:
-
把组员文件添加进来
-
运行
-
在【查看结果树】中查看运行结果
五、接口关联
-
应用场景:下一个接口需要用到上一个接口的参数
1. json path实现接口关联
-
测试一下:查看结果树-》JSON Path Tester(是json提取器的测试工具)-》填写JSON Path Expression
-
JSON Path Expression表达式写法:
-
$ 根节点(大括号)
-
. 取子节点的值
-
例:$.access token
-
-
-
第一个接口-》添加-》后置处理器-》正则表达式提取器/json提取器
-
json提取器 取值
-
Names of created variables:表达式取到的值保存的位置 给它起个名字
-
JSON Path expressions:$.access token
-
Match No. (0 for Random):取到的值的个数 1
-
Compute concatenation var (suffix _ALL):
-
Default Values:没有取到值的情况下的默认值 default
-
-
-
下一个接口(也就是要用到上一个接口参数的关联接口)-》路径-》使用${变量名}使用值(/cgi-bin/tags/update?access_token=${www})
-
查看是否关联成功:
-
查看结果树-》JSON Path Tester-》前一个接口get的【响应数据】和下一个接口post的【请求】是否对应
-
场景一-》取样器-》debug sampler-》运行后在调试取样器的【响应数据】中查看www是否取到值
-
2. 正则表达式实现接口关联
-
测试一下:查看结果树-》RegExp Tester(是正则表达式提取器的测试工具)-》填写Regular Expression
-
Regular Expression表达式写法:
-
<input type="hidden" name="csrf token" value="647c43e98dfa90e7"/>
-
取值:647c4ae98dfa90e7
-
左边界+取值+右边界(必须唯一):name="csrf token" value="647c4ae98dfa90e7"
-
例如:name="csrf token" value="(.*?)"
-
-
-
当前需要用正则表达式的接口-》添加-》后置处理器-》正则表达式提取器
-
引用名称:aaa
-
正则表达式:name="csrf token" value="(.*?)"
-
模板:$1$(固定写法 表示用第一个正则去取值)
-
匹配数字(0代表随机):匹配到的第几个
-
缺省值:default
-
查看是否关联成功:
-
场景一-》取样器-》RegExp Tester-》运行后 在调试取样器的【RegExp Tester】中查看aaa是否取到值