ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

性能优化与压测引擎一

2022-02-03 14:34:01  阅读:251  来源: 互联网

标签:pause http get 压测 exec request 引擎 gatling 优化


性能优化与压测引擎一

压测框架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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有