Jmeter是Apache公司开发的基于Java语言的压力测试工具,可以做接口测试,也可以做性
能测试。
jdk:建议1.8以上
jmeter:不要用最新版。用最新版的下1-2个版本
一、什么是接口以及为什么需要做接口测试
(1) 什么是接口?
硬件接口:USB接口,投影仪接口,鼠标键盘接口。 作用?
软件接口:统称为:API,提现,充值。(鉴权码:token,key,appkey,.csrf_token)
内部接口:开发人员开发软件接口给当前自身软件调用。模块和模块之间。子系统之
间。
用户接触不到,对完全性的要求不高。
外部接口:
1.系统对外提供的服务接口。(长沙银行项目:提供接口给微信。。。。)
对安全非常重视,所以测试的覆盖率达到极致。
2.系统调用外部的接口。(电商项目:使用支付宝支付,调用支付宝接口)
只需要测试正例即可。
(2)为什么做接口测试?
1.前后端分离
(1)当后端的接口开发完成,即可以直接测试,
(2)前端开发好了,但是后端接口还没完成,需要使用Mock Server
2.基于安全考虑,UI的JS的验证很容易绕过,所以需要在接口层面对安全性做考虑。
3.测试左移(前移)的思想。
二、目前市场上的接口架构设计风格以及它们所基于的协议
(1) 基于SOAP的接口架构:08的时候很流行,它是一种轻量级的,简单的,基于XML协议
的规范。
webservice协议:地址的最后面以?wsdl(web service discription language)结尾的
(2)基于RPC的接口架构:远程调用,它像调用本地服务一样去调用远程服务器的接口服
务。
1.dubbo协议,阿里RPC架构,特点:dubbo:// 适用于高并发,数量少的情况下。
2.基于SpringCloud的微服务
3.thrift,RMI,Hessiasn
(3)基于RestFul的接口架构:它将网络上的事物看成是资源,xml,json,jpg,所有的操作
无状态
特点:同样的接口地址:
http://127.0.0.1:8080/user
,不同的请求方式结果不一样,get查
询用例,psot新增用户,put修改用户,delete删除用户
http协议:
超文本传输协议,主要分为请求和响应两部分,
请求:
请求行(GET /phpwind/ HTTP/1.1),
请求头(很重要,因为很多的接口必须带特定的请求头。常用请求头)
Accept
:客户端接收的数据格式。
X-Requested-With
:登录接口,异步请求(ajax的技术)
User-Agent:
发送请求的客户端的类型(百度的查询接口必须带这个请求头)
Content-Type:
请求的内容格式,发送post请求默认加application/json
Cookie
;发送Cookie信息,
Http Cookie管理器。(作用,工作原理)
Cookie的工作原理:Http Cookie管理器的工作原理
第一步:在客户端第一次访问服务器的时候,那么服务器会生成Cookie信
息,并且在响应头的Set-Cookie里面把Cookie的信息传输到客户端。
第二步:从第2-N的请求都会在请求头的Cookie里面自动的带上上面的
Cookie信息。
作用就是:Cookie鉴权。证明后面的请求都是同一个客户端。
session和token可以通过cookie传输,也可以不通过它传输。
其他请求头:Host,Connnection,Content-length,Accpt-Language
请求正文数据。
请求的数据。
响应:
响应行
响应头
响应正文数据。
三、目前市面上接口返回的数据类型
1.xml webservice
2.html http
3.json http,dubbo
开发接口潜规则:{error_code:错误码,message:错误码的中文说明,data:[]}
JSON数据详解:是一种数据格式,1,2,3,abcd,只有两种数据:
键值对:{key:value,key:value}
列表:[value1,value2,value3]
{
“name”
:
“John Doe”
,
“age”
: 18,
“address”
: {
“country”
:
“china”
,
“zip
code”
:
“10000”
}}
{
“a”
: 1,
“b”
: [1, 2, 3]}
四、目前市面上的接口测试工具的应用场景
jmeter+ant+jenkins+git/svn接口自动化
postman+newman+jenkins+git/svn接口自动化。
jmeter好还是Postman好,看公司,全要会。
没有git是因为你的项目比较小,不需要团队协作。
其他:soupui,apipost,postwoman,fiddler,charles
git,github,gitlib,gitee
git:分布式的版本控制工具
github:网站,国外,所有的文件都是公开的。私有的版本控制需要收费。
gitlab:网站,是本地公司搭建的网站,私有的。
gitee:网站,码云,既有公开的也有私有的
git,gitlab
git,码云gitee
五、熟练Jmeter每个文件夹的作用
backups:自动备份的文件夹,当你保存Jmeter的脚本的时候,会自动的在这个目录生成
一份JMX脚本。
bin目录:存放Jmeter的启动脚本,配置文件,模块文件等。
ApacheJMeter.jar是jmeter最核心的jar包,可以通过java -jar ApacheJMeter.jar
jmeter.bat文件,jmeter的启动文件。
jmeter.properties jmeter最核心的配置文件。
XXX.sh的文件,都是Linux操作系统的文件。
docs目录:存放Jmter的api离线文档,用于二次开发。
extras目录:存放和第三方进行集成构建的文件,比如Ant,jenkins集成。
lib目录“:存放jar包,组件类,函数类等。
licences:存放许可文件
printable_docs:用户手册
六、Jmeter常用的组件(元件)
(1)必须组件
1.测试计划:他是Jmeter接口测试的起点,是其他组件的容器,注意可以加外部jar包(加 Lib下)。
2.线程组:代表的一组虚拟用户。
3.Sampler取样器:发送请求最小单元
(2)辅助组件
4.逻辑控制器:自定义发送请求的逻辑。
5.前置处理器:在发送请求之前的操作6.后置处理器:在发送请求之后的操作
7.断言:用来判断请求是否成功的组件
8.定时器:负责定义请求之间的延迟时间。固定,随机,高斯。
9.配置元件:基本的配置信息
10.监听器:负责收集结果
组件执行顺序:
配置元件–前置处理器–定时器–取样器–后置处理器–断言–监听器
组件的作用域:
辅助组件对父组件,同级组件,子组件起作用。
需求:希望java3请求发送之后,停留三秒再发送java4请求
注意:前置,后置,断言只能对取样器起作用,如果没有取样器,那么这三个组件不执行
七、接口测试流程和方案
接口功能测试。
1.拿到api接口文档(找开发拿,抓包,录制(badboy,代理服务器)),熟练接口业务,接口地址,鉴权方式,入参, 出参,错误码。
2.编写接口测试计划和方案(怎么测)。
3.接口测试用例以及评审(组内评审,三方会审)
思路:
正例:输入正常入参,接口正常返回。
反例:
鉴权反例:空,错误,已过期。。。
参数反例:空,类型异常,长度异常,错误码异常。
其他场景:黑名单,接口调用次数,分页(第0页,第1页,中间页,最后一页)
业务异常:……
4.使用接口工具执行测试。
5.输出报告。
八、使用Jmeter执行接口测试
1.测试计划
2.线程组
线程数:虚拟用户数10
Ramp-UP时间:多久时间加载上面的虚拟用户数。1秒代表5秒加载5个用户。
循环次数:每一个虚拟用户发送多少个请求,2 总共发送10*2=20个请求
∙
3.Http Cookie管理器(非必要)
4.Http请求默认值
5.取样器
HTTP请求
自动化重定向和跟随重定向:当发送请求如果返回300,那么Jmeter会自动化重定向到新的页面。
Keep-Alive:保持和服务器的活跃状态。
参数:用户传键值对
(它不能和消息体数据一起使用)
消息体数据:用于传JSON格式。
(它不能和参数一起使用)
文件上传:用于传文件。
6.监听器
查看结果树:以不同的格式查看结果,同时也可以查找结果中的内容:
{“access_token”:”45_YOh9-rtnEgiTZH4-
IHcXXV1kptChjmPlyFc9XO5TzObXVjXLvPh6Ore7kwlhbCiMwDoMCtEmHIHjjDX4ptwIwavIVPv0qWPwOQyzUDRlKlPC4Ia6Atz661TSAbJeAkKaKSfgZmLn0nXUis_2VKKbAHAKZZ”,”expires_in”:7200}
(1)RegExp Tester:正则表达式查找测试
左边界:”access_token”:”(.*?)”右边界
(2)CSS查找测试(CSS定位:自动化八大元素定位)
li[class=’current’]
(3)Xpath查找测试(自动化八大元素定位)
//title
(4)JSONPath查询测试
$.access_token
九、接口关联
1.JSON提取器
2.正则表达式提取器(Cookie提起器:选择信息头,表示从响应头里面取值。)
十、断言
Apply to“:主请求和子请求,仅主请求,仅子请求。
测试字段:
响应文本:返回的数据
响应代码:200,300 404
响应信息:OK
响应头
请求头
URL
文档(文本):匹配响应数据的文本信息。
忽略状态:一个请求断言失败,直接忽略。
请求数据:
匹配规则:
字符串:响应内容中包括匹配的字符串就会成功,不支持正则表达式,区分大小写
包括:响应内容中包括匹配的字符串就会成功,支持正则表达式,区分大小写
匹配:响应内容完全等于输入的字符串,,支持正则表达式,区分大小写
相等:响应内容完全等于输入的字符串,,不支持正则表达式,区分大小写
否:取反。
或者
csv,txt参数化。
十一、Jmeter接口测试的调试方案
1.检查【查看结果树】
检查:请求头,请求信息,响应头,响应信息
2.使用【调试取样器】
3.Jmeter结合Fiddler进行调试
十二、没有接口文档如何开展接口测试
1.抓包
2.录制(jmeter自带的代理服务器)
十三、ant+jenkins+jmeter持续集成
掌握jmeter命令行的运行方式:
jmeter命令来执行。、
参数列表:
-n 表示让jmx脚本通过非GUI(图形)的方式运行,不能单独用,必须和-t(指定jmx脚 本)结合使用
例如:jmeter -n -t mashang.jmx
-l:表示指定存储测试结果的文件。一般情况下通过jtl文件来保存报告。
jtl文件格式的报告,可以通过任意的监听器查看结果
注意:默认的情况下是没有请求和响应信息的
jmeter.save.saveservice.output_format=xml
默认不支持CSV,改成XML
jmeter.save.saveservice.response_data=true
响应数据
jmeter.save.saveservice.samplerData=true
请求数据
在生产jtl的时候,直接生成HTML报告
jmeter -n -t mashang.jmx -l result.jtl -e -o html
注意:-e -o
jmeter.save.saveservice.output_format=csv
使用ANT实现
1.官网上下载并且安装ant,并且配置环境变量。
E:\apache-ant-1.10.10\bin
2.自定义一个bulid.xml。构建比较麻烦。
精通接口测试还需要掌握哪些技能?
1.Jmeter所有工作的场景基本都要实现。
2.接口加解密。
3.金融:接口签名
4.ant+jenkins持续。
既然有接口工具postman和jmeter,为什么现在企业里面需要用python来实现接口自动化?
postman+newman+jenkins+git/svn
jmeter+antr+jenkins+git/svn
1.Jmeter团队协作能实现吗?大型项目无法实现团队协作。异常工作。
2.功能限定死的,没有办法扩展。
加密接口,md5加密,其他的加密方式,自定义的加密方式。接口签名(
js
或
java
)。
3、多种协议的接口。
4.日志监控。问题定位。
5.复制接口,多接口串联
6.allue报告。
7.接口
+web
一体化
版权声明:本文为Faith_Lzt原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。