1、接口测试分类
内部接口:测试被测系统个子模块之间的接口,或者北侧系统提供给内部系统使用的接口
外部接口:1>被测系统调用的外部接口
2>系统对外提供的接口
接口测试要点:
检查接口参数传递的正确性,接口功能的正确性,输出结果的正确性
以及各种异常情况的容错处理,权限控制、分页、调用次数的限制;
2. 目前接口结构的设计
<1>.基于SOPA结构,基于XML规范,基于WebService协议
特点:接口地址以?wsd结尾
<2>.基于RPC架构,基于dubbo协议,thrift协议,springcloud微服务
<3>.基于RestFul架构,基于http协议,基于json规范--->市场占有率高
RestFul规则:
接口地址:http://127.0.0.1/user,get(查询用户),post(新增用户),put(修改用户), delete(删除用户)
json数据格式,只要两种类型:
键值对:[key:Value]
数组:[arry1,arry2]
4、http详解
请求:请求行,请求头,请求正文
请求行
post http://192.168.5.68 /phdwind/index.php?m=U&C=login&a=dorun HTTP/1.1
请求头
Host:192.168.5.68 (请求主机)
connection:keep-alive(连接保持活跃)
content-length:112(内容长度)
Accept:application/json.tct/javascript,*/*;q=0.01(数据格式)
X-Requested-with:XMLHTTPRequest (异步请求)
User-Agent:Mozilla/5.0 (Windows NT6.1;Win64;X64)AppleWebkit/537.36(KHTML,like Gecko)chrome/9.1.1.4472.124 Safari/536.36 (客户端类型)
Content-Type:application/x-www-form-urlen coded;charset=UTF-8 (内容类型)
Origin:http://192.168.5.68
Referer:http://192.168.5.68 /phpwind/index.php?m=U&C=login&a
Accept-Encoding=gzip.deflate
cookie:csrf_token=e117c906125a0868; (cookie信息,客户端发送给服务器的cookie)
WN9_Vistor=......
WN9_lastvisit=......
请求正文(中间空出一大行)
username=msxy&passsword=......
响应:响应行,响应头,响应正文
响应行
HTTP/1.1 200 OK
响应头
server:nginx
Date:Tue,24 Aug 2021 12:23:12 GMT
content-Type:text/html;charset=UTF-8
Transfer-Encoding:chunked
connection:keep-alive(连接保持活跃)
X-Powered_By:PHP/5.6.36
Set-cookie: (服务器发送给客户端的cookie)
WNq_Lastvisit=150%09.....
content-Encoding:gzip
vary:Accept-Encoding
响应正文
.....
.....
.....
3. 市面上的接口测试工具(主流框架)
Jmeter + Ant + Git + Jenkins
Postman + Newman + Git + Jenkins
4. Jmeter简介
基于Java语言的压力测试工具,可以做接口测试,也可以做性能测试
5. Jmeter目录介绍
<1>backups:脚本备份目录,格式jmx
<2>bin目录:存放Jmeter的启动脚本、配置文件、模块文件
jmeter.bat 启动jmeter
jmeter.properties
<3>docs目录:离线帮助文档
<4>extra目录:存放第三方的集成构建文档,集成Ant、Jenkis
<5>lib目录:存放jar包
<6>license:许可证文件
6. Jmeter常用组件
<1>测试计划:起点,所以组件的容器
<2>线程组:代表一定数量的用户
<3>取样器:向服务器发送请求的最小单元
<4>逻辑控制器:结合取样器实现一些复杂的逻辑
<5>前置处理器:在请求之前的工作
<6>后置处理器:在请求之后的工作
<7>断言:用于判断请求是否成功
<8>定时器:负责在请求之间的延迟间隔、固定、高斯、随机
<9>配置文件:配置信息
<10>监听器:负责收集结果
顺序:测试计划-->线程组-->配置元件-->前置处理器-->定时器-->取样器-->后置处理器-->断言-->监听器
作用域:
必须组件:测试计划、线程组、取样器
辅助组件:除了必须组件之外
注:辅助组件作用于父组件、统计组件、以及同级组件下的所有子组件
7. Jmeter接口测试的执行
<1>拿到API接口文档(无接口文档,可使用Fiddler抓包),熟悉接口业务、接口地址、鉴权方式、入参、出参、错误码
<2>编写接口测试用例
测试思路:
正例:输入正确的入参,查看接口返回是否成功
反例:
鉴权:空、错误、鉴权过期、鉴权次数限制等
参数:空、错误的类型、错误的长度、错误码的覆盖等
其他:黑名单、分页等
<3>使用接口测试工具执行
<4>Jmeter+Ant+Git+Jenkins 实现持续集成输出接口测试报告
8. 接口测试例子
<1>线程组
1.线程属性:线程组-->加载用户数
Ramp-UP时间-->多长时间内执行完线程组内所有用户
循环测试
请求-->从第1->n次每次都带上cookie,客户端-->服务器
响应-->只有第1次发送cookie,服务器-->客户端
2.配置元件
1>http cookie管理器-->作用:第一次服务器->客户端带上cookie,后面自动带上客户端->服务器的cookie
2>http请求默认值
http协议-->默认80端口
https协议-->默认443端口
一般设置协议 + IP + 端口
3>用户定义的变量
4>http请求
协议 + IP + 端口-->若不添加则使用Http请求默认值中的配置
自动重定向-->在重定向是只会跳转到最后结果
跟随重定向-->重定向过程中的每一个细节均会记录下来
对post使用Multipart|form-data-->发送post请求是,使用这种方式发送文件
鉴权码:
1.通过接口获取,appid,secret
2.登录之后自动生成,uername,password
取样器结果页面详解:
Thread Name:线程组 1-1 -->线程组名称
Sample start:2021-09-30 21:12:30 CST -->开始时间
Load time:232 -->加载时间
Connect Time:117 -->连接时间
latency:232
Size in bytes:343 -->传输字节数
Sent bytes:229 -->发送字节数
Headers size in bytes:149 -->请求头字节数
Body size in bytes:194 -->Body字节数
Sample count:1 -->第一个请求实例
Error count:0 -->错误
Data type("txt"|"bin"|""|):test -->数据类型
Response code:200 -->响应码
Response message:OK -->响应信息
HTTPSampleResult fields:
ContentType:application/json:encoding=utf-8 -->编码方式
DataEncoding=null
注:参数和消息体数据不能共存
9. Jmeter接口关联
<1>使用正则表达式实现接口关联
1.正则表达式提取器-->可以作用于任意值
引用名称 -->需要取值的字符串名称
正则表达式:"access_token":"(.*?)"
模板:$1$ -->表示去第1个正则表达式,
$1$,$2$ -->取第1,2个正则表达式
匹配数字(0代表随机):1 -->代表取第一个值
缺省值:-->没有取到值时,会取默认值
2.添加调试取样器
-->判断正则表达式是否取到值,能看到全局变量详细结果
<2>使用Jsonpath表达式实现接口关联
从根目录开始找(绝对路径):$.expires_in -->字符串名称,会随着情形改变
从任意目录开始找(相对路径)$..expires_in
后置处理器-> Json提取器
Name of created variables: -->取值字符串名称
Json Path expressions:$..expires_in -->Json表达式
Math No.(0 form Random):1 -->代表第一个值
Default values: -->没有取到值时,会取默认值 -->只能用于返回值是json格式的
10.实现接口业务的闭环
增、删、改、查
创建接口标签 -->标签名不能重复
{“tag:{"name": "456321"}}
--"456321"-->Tools->函数助手对话框
-->选择一个功能(_Random)-->最大值、最小值、变量名-->生成-->拷贝并粘贴函数字符串中生成的替代就可以实现标签名的不重复,多次执行
11. Jmeter动态参数处理
随机数字:$(_Random (10000,99999,random_int)
随机字符串:$(_Random string (6,abcdefg13456,random_str)
12.Jmeter 接口测试断言
响应文本:返回的Json数据
响应代码:200,404
响应信息:OK
文档(文本):返回的json数据以文本的方式取判断
忽略状态:当有多个断言是,如果有断言失败了,其中一个成功了,结果依旧是成功
请求数据:-->需要断言什么
字符串:响应内容包含需要匹配的字符串,大小写敏感,不支持正则表达式
包括:响应内容包含需要匹配的字符串,大小写敏感,支持正则表达式
匹配:响应内容完全等于需要匹配的字符串,大小写敏感,支持正则表达式
相等:响应内容完全等于需要匹配的字符串,大小写敏感,不支持正则表达式
否:取反
测试模式:-->代码写去其中
13.Jmeter接口测试调试方案
<1>通过查看结果树里面的请求信息和响应信息
<2>使用调试取样器
<3>jmeter结合Fiddler -->没有接口文档,所有接口通过抓包工具实现
设置Fiddler代理
http请求-->高级-->代理服务器(IP->本机IP,端口:8888->fiddler默认监控端口)
14.CSV参数化的处理



