其他分享
首页 > 其他分享> > 性能优化与压测引擎一

性能优化与压测引擎一

作者:互联网

性能优化与压测引擎一

压测框架gatling

说到压测,我们最熟悉的可能就是ab命令和jmeter了,确实他们很方便,但是我最近都在用另外一个压测框架,叫gatling,为什么呢,因为他的报告很吸引我,而且写压测脚本很方便,功能也挺全的,他可以很好的去模拟一些场景,用的是scala语言,用到actor模型,很容易模拟大量并发的场景,并发真的很强,我觉得挺不错的,天生封装了http的协议,当然可以想办法实现GRPC或者DUBBO,网上其实有的,遗憾的可能就是需要用到scala,对于纯JAVA的可能不是那么友好把,不过仅仅是用压测那些脚本逻辑问题应该不大。这里我用他自带的demo说明下好了,为了给后面做铺垫,官网是https://gatling.io/,有兴趣的可以下个最新版玩玩,很方便,看看结果,也有大佬做的比较,有兴趣可以看看Gatling与Jmeter的比对

简单使用介绍

下载完直接解压打开,去bin目录下:在这里插入图片描述

然后在目录中打开cmd,输入gatling,他会启动,然后让你选择要模拟的脚本,有编号的,比如我输入了0,之后就等他跑,跑的时候会有信息:
在这里插入图片描述
就可以看到他会显示出请求名字,然后是成功和失败数目:
在这里插入图片描述
最终跑完后会生成报告:
在这里插入图片描述

报告在results目录内:
在这里插入图片描述
进去打开index.html
在这里插入图片描述
报告页面:
在这里插入图片描述
可以看到这里有所有的接口的信息,包括总共调用多少次,成功和失败的比率,QPS,最大最小耗时,然后百分比区间耗时等,很全,而且你还可以点进去看详细的:
在这里插入图片描述
在这里插入图片描述
然后下面还有一些用户注入,响应时间,请求频率等信息:
在这里插入图片描述
在这里插入图片描述

然后我们来看下这个压测脚本,居然是java的,当然也可以用scala,其实内部核心是akka,用scala写的,都可以转换为字节码,在jvm上跑的,可以互相调用,也方便的,就是用scala不习惯:
在这里插入图片描述

看下脚本,其实很简单,就是跟普通写http请求差不多,只是这里需要创建场景,给用户并发这种,这个是框架自带的,可以直接用


package computerdatabase;

import static io.gatling.javaapi.core.CoreDsl.*;
import static io.gatling.javaapi.http.HttpDsl.*;

import io.gatling.javaapi.core.*;
import io.gatling.javaapi.http.*;
import java.time.Duration;

public class BasicSimulation extends Simulation {
//创建议信息
  HttpProtocolBuilder httpProtocol =
      http
          // Here is the root for all relative URLs
          .baseUrl("http://computer-database.gatling.io")
          // Here are the common headers
          .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
          .doNotTrackHeader("1")
          .acceptLanguageHeader("en-US,en;q=0.5")
          .acceptEncodingHeader("gzip, deflate")
          .userAgentHeader(
              "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0");

  // 创建场景
  ScenarioBuilder scn =
      scenario("Scenario Name")
          .exec(http("request_1").get("/")) //get请求
          // Note that Gatling has recorded real time pauses
          .pause(7)//暂停多久
          .exec(http("request_2").get("/computers?f=macbook"))
          .pause(2)
          .exec(http("request_3").get("/computers/6"))
          .pause(3)
          .exec(http("request_4").get("/"))
          .pause(2)
          .exec(http("request_5").get("/computers?p=1"))
          .pause(Duration.ofMillis(670))
          .exec(http("request_6").get("/computers?p=2"))
          .pause(Duration.ofMillis(629))
          .exec(http("request_7").get("/computers?p=3"))
          .pause(Duration.ofMillis(734))
          .exec(http("request_8").get("/computers?p=4"))
          .pause(5)
          .exec(http("request_9").get("/computers/new"))
          .pause(1)
          .exec(
              http("request_10")
                  // Here's an example of a POST request
                  .post("/computers") //post请求,然后传一些form参数
                  // Note the triple double quotes: used in Scala for protecting a whole chain of
                  // characters (no need for backslash)
                  .formParam("name", "Beautiful Computer")
                  .formParam("introduced", "2012-05-30")
                  .formParam("discontinued", "")
                  .formParam("company", "37"));

  {
  //注入用户,刚开始就一个,协议是http
    setUp(scn.injectOpen(atOnceUsers(1)).protocols(httpProtocol));
  }
}

好了,最基本的介绍完了,这个只是命令行的,当然还有直接idea里跑的,这个网上可以找,很多资料,其实还有很多有意思的内容,可以看官网,或者看这些大佬的文章:
https://blog.csdn.net/qq_39261142/category_9622000.html
https://blog.csdn.net/o_oomg/category_9688662.html

好了,就这个就介绍到这里,这个很有意思,但是只是命令行的版本,后面我站在巨人们的肩膀上,整了一个web版本的压测系统,有些东西涉及到公司的东西,所以可能要精简下,然后可能会开源发布下,毕竟大多内容都也是开源框架里整来的,我只是最了点加工,所以还是得贡献出去,给更多有兴趣的人使用。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

标签:pause,http,get,压测,exec,request,引擎,gatling,优化
来源: https://blog.csdn.net/wangwei19871103/article/details/122775533