目录
1、指定JDK
2、新建HTTP测试任务
2.1、添加线程组
2.2、默认请求值
2.3、HTTP请求
2.4、请求消息体读csv
2.5、查看结果树
2.6、聚合报告
3、script
3.1、jmeter常用内置参数
3.2、BeanShell PostProcessor
3.3、使用泛型
4、循环调用csv文件数据
5、命令行
6、导入外部jar
7、断言
7.1、BeanShell断言
8、中文乱码
9、JDBC
这里用的是5.1.1版本:下载地址
进入jmeter bin目录选择jmeter.bat,编辑在最前面添加
set MINIMAL_VERSION=1.8.0
set JAVA_HOME=D:\tomcat\jdk1.8\JDK8_64
set PATH=%JAVA_HOME%\bin;%PATH%
用于公共参数
这里消息体参数来自于csv文件变量
忽略首行、第一行是变量名
文件内容:
在很多地方都可以使用vars.get("XXX"); 来获取全局变量,并且全局变量可以来自于csv文件,比如之前的文件有一列,input,可以增加一列作为断言标识 argv,然后直接 vars.get("argv");获取当前请求的值;
1. vars API:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html
vars.get("");
vars.put("",XXX);
2. log
log.info("xxx");
3.ctx API:http://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html
ctx.getThreadNum()
4.props
encoding = props.get("sampleresult.default.encoding");
log.info("sampleresult.default.encoding="+encoding);
5.prev API:http://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html
System.out.println(prev.getResponseCode());
System.out.println(prev.getResponseDataAsString());
prev.setResponseCode("222");
System.out.println(prev.getResponseCode());
prev.setResponseMessage("qiaoyeye你好");
System.out.println(prev.getResponseMessage());
prev.setResponseData("qiaoyeye你好","UTF-8");
System.out.println(prev.getResponseDataAsString());
System.out.println(${port});
System.out.println(ctx.getThreadNum());
这里对响应体数据做了处理
prev.setDataEncoding("UTF-8");
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Base64;
import java.util.zip.GZIPInputStream;
import org.json.*;
public static String uncompress(String input) throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
byte[] decoderByte = decoder.decode(input.getBytes("UTF-8"));
if (decoderByte == null || decoderByte.length == 0) {
return null;
}
ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(decoderByte);
try {
GZIPInputStream ungzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = ungzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
} catch (Exception e) {
e.printStackTrace();
}
return new String(out.toByteArray(), "UTF-8");
}
String resultStr = uncompress(prev.getResponseDataAsString());
prev.setResponseData(resultStr, "UTF-8");
不要使用类似于Map
直接使用Map map = new HashMap();即可
这里文件有两条数据,循环两次
jmeter -n -t -l
示例: jmeter -n -t testplan.jmx -l test.jtl
示例含义:则表示以命令行模式运行testplan.jmx文件,输出的日志文件为test.jtl
-h, –help -> prints usage information and exit
-n, –nongui -> run JMeter in nongui mode
-t, –testfile -> the jmeter test(.jmx) file to run
-l, –logfile -> the file to log samples to
-r, –runremote -> Start remote servers (as defined in remote_hosts)
-H, –proxyHost -> Set a proxy server for JMeter to use
-P, –proxyPort -> Set proxy server port for JMeter to use
-h 帮助 -> 打印出有用的信息并退出
-n 非 GUI 模式 -> 在非 GUI 模式下运行 JMeter
-t 测试文件 -> 要运行的 JMeter 测试脚本文件
-l 日志文件 -> 记录结果的文件
-r 远程执行 -> 在Jmter.properties文件中指定的所有远程服务器
-H 代理主机 -> 设置 JMeter 使用的代理主机
-P 代理端口 -> 设置 JMeter 使用的代理主机的端口号
在BeanShell PostProcessor中将需要做断言的字段存在内置变量中:
JSONObject responseJson = new JSONObject(resultStr);
String menuId = responseJson.getString("menuId");
log.info("menuId的值:" + menuId);
vars.put("menuId", menuId);
然后在BeanShell断言中用 Failure 来标识断言的结果,FailureMessage 来标识断言的结果内容:
jmeter.properties
sampleresult.default.encoding=UTF-8
还有在BeanShell PostProcessor中加入
prev.setDataEncoding("UTF-8");
连接配置:添加->配置元件->JDBC Connection Configuration
请求配置:添加->Sampler->JDBC Request
可以通过计数器配合JDBC Request循环取数据,封装到请求提,计数器:添加->配置元件->计数器
引用JDBC Request返回变量的数据,并且通过计数器的变量动态取值:"${__V(vc_instructionno_${num})}"
如果JDBC中是插入数据,需要设置:Prepared Update Statement
如果JDBC中是查询数据,需要设置:Select Statement