这段时间,公司做活动,要检测下项目代码在多并发下的情况,然后就让我们自己找工具进行压测。
最开始用的是Apache的jmeter,照着网上的教程来,发现拿不到cookie。然后又去下载了badbody,在上面录制流程,然后导出jmeter可运行的文件。发现还是不行,然后感到无解,没办法,就跑去用Gatling了。
脚本如下:
val httpConf = http
.baseURL("http://www.xxx.com")
.inferHtmlResources(WhiteList(), BlackList())
.disableFollowRedirect
object tests {
val operateChain =
exec(
addCookie(Cookie("mall_cookie", "\"${userId}\""))
)
.exec(http("confirmOrder")
.get("http://www.xxx.com/confirmOrder.do?itemIds=${itemIds}"))
val repeatOperateChain =
repeat(1){
operateChain
}
}
val duringOperateChainFeeder=csv("yzg.csv").random
val duringOperateChainTest = scenario("confirmOrder")
.feed(duringOperateChainFeeder)
.exec(tests.repeatOperateChain);
setUp(
duringOperateChainTest.inject(
atOnceUsers(500)
)
).protocols(httpConf)
简单说明下Gatling 的目录与脚本对应的信息。
bin目录:gatling.bat 与 gatling.sh ,很显然,一个Windows启动,一个Linux启动。
recorder 这个不知道具体干啥的,没用上,以后了解了再来补充。
conf和lib 工具自带的一些jar和配置文件,个人没有关注多,有兴趣的可以去看看。
results:脚本执行完之后生成的报告文件,通过浏览器打开,可以看到对应的成功、失败数量、比例,运行时间的最大值、最小值、不同阶段的运行时长,还有一些图表信息 之类的。
target:脚本生成的class文件。
usef-files:脚本、配置文件存放目录。
-- data :配置文件存放目录(上面脚本中yzg.cvs存放位置)
-- simulations :脚本存放目录
下面分断介绍下脚本中需要留意的位置:
val httpConf = http.baseURL("http://www.xxx.com")
.inferHtmlResources(WhiteList(), BlackList())
.disableFollowRedirect
这一块也就那个地址需要根据自己的需求变动
addCookie(Cookie("mall_cookie", "\"${userId}\""))
添加脚本需要用到的cookie值 ${userid} 配置文件可读属性,也可以写死,根据自身需求来。
.exec(http("confirmOrder")
.get("http://www.xxx.com/confirmOrder.do?itemIds=${itemIds}"))
val repeatOperateChain =
repeat(1){
operateChain
}
对应方法名称,地址信息,${itemids}与上面的userId相同
val duringOperateChainFeeder=csv("yzg.csv").random
读取配置文件,配置文件存放目录上面说过。格式跟Excel里面一样,第一行是脚本中写的userId、itemids,后面的行就是这些字段对应的变化值
val duringOperateChainTest = scenario("confirmOrder")
.feed(duringOperateChainFeeder)
.exec(tests.repeatOperateChain);
关联执行脚本与配置文件
setUp(
duringOperateChainTest.inject(
atOnceUsers(500)
)
).protocols(httpConf)
虚拟500用户进行测试。
程序执行的时候,会有一个列表出现,不同的数字对应你添加进去不同的脚本。