一.下载与安装
Gatling 3.7下载地址: https://gatling.io/open-source/
下载后的软件包直接解压即可,解压后文件目录如图所示
二.环境准备
Gatling 3.7 支持用 Java、Kotlin 和 Scala 编写测试,较旧的 Gatling 版本仅支持 Scala。
1.下载安装java环境
Gatling 支持 64 位 openjdk8、11和17,推荐使用openjdk17
openjdk17下载地址:https://www.oracle.com/java/technologies/downloads/
2.下载安装 scala
这里推荐使用ide以插件的形式下载
3.打开gatling
以项目的方式用ide打开gatling,便于后续维护与调试
三.gatling目录介绍
bin:
gatling.bat:压测启动脚本
recorder.bat:录制脚本
conf:gatling自身的一些配置
lib:gatling自身依赖的库文件
results:测试报告存放目录
uesr-files:
simulations:测试脚本存放目录
resources:存放请求数据的目录
四.录制
recorder.bat:录制脚本,双击打开界面如下
HTTP Proxy:代理录制
HAR Converter:HAR文件导入
Listening port:代理端口
Packane:保存路径
Class Name:保存的包名
Format:保存的脚本语言版本
点击Start进行录制,页面如下
点击Stop&Save保存脚本,脚本如下
package test;
import java.time.Duration;
import java.util.*;
import io.gatling.javaapi.core.*;
import io.gatling.javaapi.http.*;
import io.gatling.javaapi.jdbc.*;
import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.*;
import static io.gatling.javaapi.jdbc.JdbcDsl.*;
public class Test extends Simulation {
{
HttpProtocolBuilder httpProtocol = http
.baseUrl("http://8.8.8.8")
.inferHtmlResources(AllowList(), DenyList())
.acceptHeader("*/*")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("zh-CN,zh;q=0.9")
.userAgentHeader("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36");
Map<CharSequence, String> headers_0 = new HashMap<>();
headers_0.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
headers_0.put("Cache-Control", "no-cache");
headers_0.put("Pragma", "no-cache");
headers_0.put("Proxy-Connection", "keep-alive");
headers_0.put("Upgrade-Insecure-Requests", "1");
Map<CharSequence, String> headers_1 = new HashMap<>();
headers_1.put("Cache-Control", "no-cache");
headers_1.put("Content-Type", "application/json");
headers_1.put("Origin", "http://8.8.8.8");
headers_1.put("Pragma", "no-cache");
headers_1.put("Proxy-Connection", "keep-alive");
headers_1.put("X-Requested-With", "XMLHttpRequest");
Map<CharSequence, String> headers_2 = new HashMap<>();
headers_2.put("Cache-Control", "no-cache");
headers_2.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
headers_2.put("Origin", "http://8.8.8.8");
headers_2.put("Pragma", "no-cache");
headers_2.put("Proxy-Connection", "keep-alive");
headers_2.put("X-Requested-With", "XMLHttpRequest");
Map<CharSequence, String> headers_3 = new HashMap<>();
headers_3.put("Cache-Control", "no-cache");
headers_3.put("Pragma", "no-cache");
headers_3.put("Proxy-Connection", "keep-alive");
headers_3.put("X-Requested-With", "XMLHttpRequest");
ScenarioBuilder scn = scenario("Test")
.exec(
http("request_0")
.get("/study/ajax")
.headers(headers_0)
)
.pause(11)
.exec(
http("request_1")
.post("/study/ajax_json")
.headers(headers_1)
.body(RawFileBody("test/test/0001_request.json"))
)
.pause(14)
.exec(
http("request_2")
.post("/study/ajax_form")
.headers(headers_2)
.formParam("username", "admin")
.formParam("password", "123456")
)
.pause(11)
.exec(
http("request_3")
.get("/study/ajax_get?username=admin&password=123456&_=1649230585743")
.headers(headers_3)
);
setUp(scn.injectOpen(atOnceUsers(1))).protocols(httpProtocol);
}
}
五.执行
CMD切换到gatling目录下的bin目录执行gatling.bat脚本
输入数字12执行刚才录制的脚本
等待脚本执行完毕
复制目录浏览器打开查看报告
六.其他控件
1.思考时间
pause(1)
2.断言
check(jsonPath("$.code").is("200"))
check(bodyString().is("{\"code\":200,\"data\":\"功能方法\"}")
3.关联
check(bodyString().saveAs("ajax_from_body"))
check(jsonPath("$.code").saveAs("code"))
4.循环
during(Duration.ofSeconds(10)).on()