zoukankan      html  css  js  c++  java
  • 将GatlingBundle容器化,并通过参数化来执行压测

    一、制作GatlingBundle镜像

    1.下载GatlingBundle

    gatling-charts-highcharts-bundle-3.3.1-bundle

    2.将包解压后,存放到服务器(已经安装docker)上,并制作镜像。

    a.在服务器上准备类似路径A【/usr/local/dockerapp/gatlingbundle】

    b.将gatling-charts-highcharts-bundle-3.3.1-bundle文件夹存放在A路径下

    c.在A路径下新建文件Dockerfile,并输入下面内容

    FROM primetoninc/jdk:1.8
    #校对时钟
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
    
    WORKDIR /usr/local
    ADD gatling-charts-highcharts-bundle-3.3.1 /usr/local/gatling331
    

    d.在A目录下,执行下面命令,制作镜像

    docker build -t dockerapp_gatling_i:1.1 .
    

    如果需要删除,使用命令docker rmi dockerapp_gatling_i:1.1来删除

    二、基于GatlingBundle镜像,制作执行镜像

    a.在服务器上准备类似路径B【/usr/local/dockerapp/gatlingexec】

    b.在B目录下创建两个文件夹results和user-files,其中user-files下再创建如下图目录结构

    c.在B目录下新建文件Dockerfile,并输入下面内容

    FROM dockerapp_gatling_i:1.1
    
    WORKDIR /usr/local/gatling331/bin
    ENTRYPOINT ["./gatling.sh","-s"]
    

    d.在B目录下,执行下面命令,制作镜像

    docker build -t exec_gatling_i:1.1 .
    

    如果需要删除,使用命令docker rmi exec_gatling_i:1.1来删除

    三、编写Gatling脚本(参数化)

    脚本路径【/usr/local/dockerapp/gatlingexec/user-files/simulations/computerdatabase/ApiGatlingSimulationTest.scala】

    import io.gatling.core.Predef._
    import io.gatling.http.Predef._
    
    class ApiGatlingSimulationTest extends Simulation{
       
       //从JAVA_OPTS中获取值,这是Gatling参数化的使用方法。
       val nbUsers = Integer.getInteger("users", 1)
       val myRamp = java.lang.Long.getLong("ramp", 0L)
       val during = java.lang.Long.getLong("during", 0L)
    
      //设置请求的根路径
      val httpConf = http.baseUrl("http://172.20.0.84:13800")
      /*
        运行during秒 默认单位秒,如果要用微秒 during(100 millisecond)
       */
      val scn = scenario("paycenter").during(during){
        exec(http("cardbing")
          .post("/payTrade/card/getCardBin")
          .header("Content-Type","application/json; charset=utf-8")
          .formParam("cardNo","622202100101234555"))
      }
      //注入并发数
      setUp(scn.inject(rampUsers(nbUsers) during (myRamp)).protocols(httpConf))
    
    }
    
    

    四、编写执行shell脚本

    脚本路径 【/usr/local/dockerapp/gatlingexec/exec.sh】,使用chmod 755 exec.sh命令,修改权限

    #!/bin/bash
    
    exit_shell(){
    echo "**************exit*************"
    echo $1
    echo "                                                 "
    echo "                                                 "
    exit 1
    }
    
    paramNum=$#
    users=$1
    ramp=$2
    during=$3
    scriptName=$4
    
    judgeParamsNum(){
    	echo "~~~~~~~~~~~~~judgeParamsNum~~~~~~~~~~~~~"
    	num=$1
    	if [ $num != 4 ]
    	then 
    	echo "USAGE: users ramp during scriptName" 
    	exit_shell " e.g.: ./exec.sh 30 10 1000 ApiGatlingSimulationTest" 
    	fi
    	echo "the number of params is "$num
    }
    
    echo "~~~~~~~~~~~~~Main~~~~~~~~~~~~~~~~~~~~"
    judgeParamsNum $paramNum
    
    echo "~~~~~~~~~~~~~Generate Container Name~~~~~~~~~~~~~~~~~~~~"
    c_name="exec_gatling_c"$RANDOM
    echo $c_name
    
    echo "~~~~~~~~~~~~~java_opts config~~~~~~~~~~~~~~~~~~~~"
    java_opts="-Dusers=${users} -Dramp=${ramp} -Dduring=${during} "
    echo $java_opts
    
    echo "~~~~~~~~~~~~~exec~~~~~~~~~~~~~~~~~~~~"
    docker run --rm -e JAVA_OPTS="${java_opts}" 
    -v /usr/local/dockerapp/gatlingexec/results:/usr/local/gatling331/results 
    -v /usr/local/dockerapp/gatlingexec/user-files:/usr/local/gatling331/user-files 
    --name ${c_name} exec_gatling_i:1.1 ${scriptName}
    

    五、执行脚本

    #exec.sh 需要四个参数
    ##users:并发数
    ##ramp:坡度(单位s)
    ##during:持续时间(单位s)
    ##scriptName:Gatling脚本类名
    在B目录下执行命令:./exec.sh 30 10 100 ApiGatlingSimulationTest
    
    script

    六、查看Gatling报告

    为了方便查看报告,可以利用httpd,搭建一套简易的文件服务器,让浏览器可以访问到results目录(/usr/local/dockerapp/gatlingexec/results)。安装参考(https://www.cnblogs.com/zhuyeshen/p/11693362.html)

    report

    总结

     1.GatlingBundle容器化后,可以随时启动一个容器去执行压测,执行完成后,容器自动被删除,只留下压测报告。
     2.可以参数化执行后,就可以远程调用,便于接入测试平台。

  • 相关阅读:
    五月一日工作感悟
    Loadrunner 性能指标
    tcp ,http .udp
    Loadrunner 面试常见问题
    抓包不求人
    性能测试自动化测试平台
    jmeter 控制器
    转:java中String使用equals和==比较的区别
    转:Java对象及对象引用变量
    排序算法小结
  • 原文地址:https://www.cnblogs.com/moonpool/p/13533785.html
Copyright © 2011-2022 走看看