zoukankan      html  css  js  c++  java
  • Gatling性能测试

    转发:https://www.cnblogs.com/idbeta/p/5100089.html

    对Gatling早有耳闻,据说比jmeter的性能要好很多,我第一次试用的时候因为本机安装的jdk版本不对无法跑起来,试用失败后,因为没时间就一直没继续研究了。我当时是去java官网下载最新的jdk覆盖安装后仍然无法跑起来(这有点坑爹),所以大家使用Gatling前如果发现它跑不起来,则最好先卸载本机的jdk再安装新的。
      今天抽时间找一台新机试用了一下,发现还是蛮有趣的,我只用了它的http(get、post)功能,发现和python的httplib用法有点像。Gatling是个绿色软件,网上介绍已经很多了,解压后找到“user-filessimulations”,这里面就是测试用例了,我找了一个自带的例子,直接修改其代码来演示了,它的代码是scala,我没用过,不过看还是能看得明白的,而且貌似没有缩进要求,这点爽,呵呵。用例代码及注释如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    package computerdatabase
     
    import io.gatling.core.Predef._
    import io.gatling.http.Predef._
    import scala.concurrent.duration._
     
    class BasicSimulation extends Simulation {
     
      val httpConf = http               //表示测试的数据格式以及被测目标等,设置压力的时候会用到
        .baseURL("http://192.168.0.11") // 因为这个,我觉得和python的httplib用法有点类似
        .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")//我的用例不需要gzip
        .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0")
     
      val headers_1 = Map("Content-Type" -> "application/x-www-form-urlencoded"// 表示数据内容格式,可以定义多个,方便不同的用例请求使用,不过建议还是一个接口用例用独立一个文件来写吧
      val headers_2 = Map("Content-Type" -> "multipart/form-data; boundary=----------------------------2bb6caed7d98")
       
      val scn = scenario("Scenario Name"// 场景,有点像python的测试集或者jmeter的线程组,一个用例可以有多个场景的,相应的要对每个场景设置不同的压力
        .exec(
          http("get's example"// GET请求例子,http只是起到一个声明(命名)的作用
          .get("/api/heartbeat.json?mid=2096d4f158cb4d41a56592c816365786&ver=1.0")
          )
          //.pause(7) // Note that Gatling has recorded real time pauses,暂时没有试用
        
        .exec(
          http("post's example"// POST请求例子
          .post("/api/getconf.json?mid=ebcd32d5f68e404db1ccc8ff2dacb360&ver=1.0")
          .headers(headers_1)
          .body(StringBody("""{
       "audit_control_list" : [],
       "ui" : [],
       "ws" : [
          "base_setting"
       ],
       "xp_fix" : []
    }""")).asJSON
          //body 我当前项目中最常用的参数,用"""...."""这样body内的字符串可以换行,其中换行符实际是“ ”
          //-------------
          //.queryParam("name", "Beautiful Computer")//queryParam的效果等同于增加了URL的参数而已,即“POST /api/getconf.json?mid=ebcd32d5f68e404db1ccc8ff2dacb360&ver=1.0&name=Beautiful%20Computer”
          //-------------    
          //.formParam("name", "Beautiful Computer") //formParam的例子,官方的,没什么特别
          //.formParam("introduced", "2012-05-30") //如果这样连续写两行formParam,实际效果等于post了这个数据“name=Beautiful+Computer&introduced=2012-05-30”,空格居然是个+号,无语
          )
     
      setUp(scn.inject(atOnceUsers(1)).protocols(httpConf))
    }

      注意如果用例中有中文字符则用例文件得改为UTF8编码。
         没用过recorder,网上说是用来录制脚本的,我认为如果不是做界面测试尽量不要用录制方法,无论是它还是loadder runner,因为会有太多无关的代码被录制,影响效率。
         后面我将继续介绍它的加压和变量使用等等。例如用某个随机数代替其中的某个请求参数。

  • 相关阅读:
    数组的空位
    数组方法之pop
    数组方法之push
    深拷贝
    浅拷贝
    手动编写用于react项目开发的的webpack配置文件
    ES6:export default 和 export 区别
    JS基础算法题(二)
    Linux系统下用户如何膝盖FTP用户密码
    Sublime Text 3 安装插件与快捷键总结
  • 原文地址:https://www.cnblogs.com/happyyangyanghappy/p/15497603.html
Copyright © 2011-2022 走看看