Jmeter 自动化测试

目录

 

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版本:下载地址

 

1、指定JDK

进入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%

2、新建HTTP测试任务

2.1、添加线程组

Jmeter 自动化测试_第1张图片

2.2、默认请求值

用于公共参数

Jmeter 自动化测试_第2张图片

Jmeter 自动化测试_第3张图片

2.3、HTTP请求

Jmeter 自动化测试_第4张图片

Jmeter 自动化测试_第5张图片

这里消息体参数来自于csv文件变量

2.4、请求消息体读csv

Jmeter 自动化测试_第6张图片

Jmeter 自动化测试_第7张图片

忽略首行、第一行是变量名

文件内容:

Jmeter 自动化测试_第8张图片

2.5、查看结果树

Jmeter 自动化测试_第9张图片

2.6、聚合报告

Jmeter 自动化测试_第10张图片

3、script

3.1、jmeter常用内置参数

在很多地方都可以使用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());

3.2、BeanShell PostProcessor

这里对响应体数据做了处理

Jmeter 自动化测试_第11张图片

Jmeter 自动化测试_第12张图片

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");

3.3、使用泛型

不要使用类似于Map map = new HashMap<>();

直接使用Map map = new HashMap();即可

4、循环调用csv文件数据

这里文件有两条数据,循环两次

Jmeter 自动化测试_第13张图片

Jmeter 自动化测试_第14张图片

Jmeter 自动化测试_第15张图片

5、命令行

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 使用的代理主机的端口号

6、导入外部jar

Jmeter 自动化测试_第16张图片

7、断言

7.1、BeanShell断言

Jmeter 自动化测试_第17张图片

在BeanShell PostProcessor中将需要做断言的字段存在内置变量中:

JSONObject responseJson = new JSONObject(resultStr);
String menuId = responseJson.getString("menuId");
log.info("menuId的值:" + menuId);
vars.put("menuId", menuId);

然后在BeanShell断言中用 Failure 来标识断言的结果,FailureMessage 来标识断言的结果内容:

Jmeter 自动化测试_第18张图片

8、中文乱码

jmeter.properties

sampleresult.default.encoding=UTF-8

还有在BeanShell PostProcessor中加入

prev.setDataEncoding("UTF-8");

9、JDBC

连接配置:添加->配置元件->JDBC Connection Configuration

请求配置:添加->Sampler->JDBC Request

可以通过计数器配合JDBC Request循环取数据,封装到请求提,计数器:添加->配置元件->计数器

引用JDBC Request返回变量的数据,并且通过计数器的变量动态取值:"${__V(vc_instructionno_${num})}"

如果JDBC中是插入数据,需要设置:Prepared Update Statement

如果JDBC中是查询数据,需要设置:Select Statement

你可能感兴趣的:(Java)