Jmeter接口测试
Jmeter测试接口:
层级关系:
测试计划/testplan : ===> 项目/project
线程组/threadGroup ===> class(比如: 一个功能类)
Sampler(根据具体的接口类型选择)===》某个方法(比如一个功能类中的一个大测试点,比如新增报价单)
测试计划下直接可创建的处理器& 作为全局的:
===》HTTP Request Default: 存放协议&系统的IP地址,全局都一样可以引用使用的,
===》HTTP Header Manager: 存放测试计划 级别的 变量。 比如token
JSON提取器 & 设置全局变量
因为每个sampler请示请求数据的格式,都可能不一样,所以可以在每个sampler都可以有自己的HTTP 信息头管理器。
=》在sampler中将某个相应数据设置为全局变量的话(跨线程调用的话需要借助Bean shell处理器来设置选举变量),使用后置处理器中的===》Beanshell PostProcessor
=》目前一般的请求相应格式都是json格式,所以,可以只用json提取器将响应中的某个数据提取数来,语法比正则简单易懂。
=》json提取器语法: $开头。用点连接不同层级,不管层级数据格式是字典还是列表,用[下标数字]获取元素
比如: $.第一层.第二层.第三层[1] ==>表示第三层下的第二个元素

==》正则表达式:
比如有一段响应是 <title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class="head_wrapper">,
想要提取其中的百度一下,你就知道 =》 可以这样写表达式: <title>(.*?)</title>
正则表达式提取器中的一些西段含义。

设置全局变量:
${__setProperty(y,${x},)} : 返回${x}的值并保存在变量y中。 并将y设置为全局变量。
===》引用变量语法格式: ${__property(y)}


线程组=》配置原件=》用户自定义变量:
用户自定义的变量引用时格式: ${变量名}
${__property(变量名)} =》返回变量的值

${__V(commodityID_${x})} :=》它可以被用于执行嵌套函数引用

循环器控制器 & 计数器 :
===========》循环器:sampler处右键=》逻辑处理器中的循环控制器=》

===========》计数器


响应断言:sampler处右键断言=》添加响应断言,然后具体断言中每个选择的意义,进而选择合适的

Jmeter 函数助手:
参数化:
======》1:用户自定义的变量, 比如 IP,端口号。 引用方式,例如: ${IP}
======》2: random函数,生成随机数。 例如:${__Random(1,100,)} , ${__RandomString(6,abcdefg12345!#,)}
======》3:__CSVRead 函数: 比如读取D盘下的test.csv文件,读取第二列数据: ${__CSVRead(C:\Users\zchen\Desktop\test.csv,1)}
=》注意:列的下标是从0开始的。

======》4:CSV Data Set Config 配置原件: (支持txt 和 CSV文件)



=====》 各字段的设置含义:

Jmeter连接数据库:(可以参开此教程: https://www.bilibili.com/video/BV1j5411H7x4?p=13)
step1: 下载jar 包 (可以从官网直接下载:https://www.mysql.com/downloads/, 下载操作可以参考 https://blog.csdn.net/weixin_45393723/article/details/104391432 )
step2: 将下载下来的jar 包存放到Jmeter的lib目录下:

step3: 启动Jmeter, 然后创建线程组 =》 然后在 配置元件 中添加 JDBC connection configuration (是Jmeter 用来连接数据库的元件)

step4: 在 JDBC connection configuration 中进行配置


step5: 添加JDBC request去验证数据库的连接: 线程组=》sampler =》 JDBC request
===》scenario1: 普通的SQL语句查询

===》scenario2: 占位符 的形式: 用?作为占位符,查询条件来自提前定义的 parameter values

===》scenario3: 用户自定义变量:
添加配置元件:User defined Variables => 设置变量D,对应的值为ZhangSan

然后在JDBC request中的SQL语句中引用该变量, 注意,要把上一个scenario里设置的parameter values 等信息清掉。

然后跑接口,就可以看到对应的值被查询出来。

数据查询出来的数据的调用:
注意:查询出来的的结果是列表的形式,调用的时候以下标的形式, 比如:${newName_1}



响应中乱码的问题:
可以在线程中添加一个Bean shell 后置处理器,然后添加这段代码prev.setDataEncoding("utf-8"), 后面再执行接口,就不会乱码了。 亲测有效!
还有个永久的方法: 在jmeter.properties中搜索default.encoding设置编码格式为UTF-8,取消注释,保存之后重启jmeter就可以。 ---》因为这里默认的编码格式是IOS
接口请求失败,怎么办?
=>1: 检查查看结果数,查看请求信息(请求头和请求体)和相应信息(响应头和响应体)
=>2: 借助 调试取样器: 这里可以看到一些中间变量(素有的json提取器,正则提取器等提取到的变量)
=>3:jmeter结合fiddler
如果只有其中某一个接口有问题,想用fiddler抓该请求的包,可以在该请求的高级设置中进行如下设置
(======》如果想要fiddler抓取该Jmeter中所有请求的包,那么不用再在每个请求的高级设置中设置fiddler 的代理信息,可以在 请求默认值 元件中的高级设置中设置fiddler 的代理信息。)

Jmeter录制接口:
=>测试计划 =》添加non-config elements => HTTP(S) Test Script Recorder
===>选择录制的脚本将要存放的到地方

===》 本地设置所有浏览器的代理服务器,然后确定

===》然后在jmeter代理服务器中启动:

===》 启动之后会出现录制悬浮框:

===》然后继续请求,就会抓取到包;
===》还可以设置,对抓取到的包进行过滤:以下类型的包会被排除

以命令行的方式执行jmeter脚本& Jmeter生成报告:
=》: -n表示让jmeter脚本通过非GUI的形式运行,但是不能单独使用,必须结合-t(指定jmx脚本)使用。
=》比如:jmeter -n -t SQ_Project.jmx
=》:-l表示指定存储测试结果的文件,一般情况下通过jtl文件来保存报告。
=》jmeter -n -t SQ_Project.jmx -l report.jtl
=》而且生成的jtl文件可以在jmeter中通过(任意的监听器),比如:查看结果数来打开。
=》默认情况下是没有请求和响应信息的
-o (html报告的目录,必须是空)
-e -o: 对应的必须是csv格式: jmeter.save.saveservice.output_format=csv
==》Jmeter -n -t SQ_Project.jmx -l report.jtl -e -o html
以下两个是需要去bin=>jmeter.properties中进修改的,不然生成的报告中是不包含请求和响应数据的。
=》这三个要一起都设置,只设置后两个也不行。
jmeter.save.saveservice.output_format=xml
jmeter.save.saveservice.response_code=true =》报告中会包含相应数据
jmeter.save.saveservice.samplerData=true =>: 报告中包含请求数据

Jmeter对数据进行加密:
可以使用jmeter提供的digest函数。
Jmeter + ANT 持续集成测试:
step1: 官网下载ANT并配置其环境变量(bin目录添加到path)
===》具体可以惨考这个贴: https://blog.csdn.net/u010354618/article/details/79553670
step2: 对Jmeter进行集成需要使用到extras目录下的build文件
===》原本自带的build文件不是很完善,可以进行自定义
===》 把build文件放到jmeter脚本所在目录:

===》注意,一定要在build文件中配置好对应的Jmeter_home, 否则,执行ant命令会报错: You must set jmeterhome to your JMeter install directory
在build中设置好对应的JMETER_HOME路径之后

===》再执行ant命令,就可以成功了。
===》执行成功之后,脚本所在文件夹里会出现新的

===》 jtl文件可以用Jmeter打开


浙公网安备 33010602011771号