性能测试框架gatling

一.下载与安装

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值