乌鸦不会飞 - gatling
type: channel
link: https://bigerhead.com/category/gatling/
items: 性能测试工具——gatling

性能测试工具——gatling
type: item
date: 2016-11-23T08:42:00+00:00
description: 【距离上次的文章，已经过去快3个月了。懒癌犯了，也没啥动力写。】前言乌鸦半路出家，对于某一工具的测试结果无法信任，无论结果如何，总感觉是自己做的不对。之前尝试过：lr，太臃肿，99%的功能用不上。ab，安装apache的附属品，windows安装失败。locust，基于python，号称能发起百万级并发。但是，对比测试结果的时候，跟jmeter和gatling差一个数量级。有至少两个产品的测试结果，能给自己一些自信。gatling的初次尝试还比较顺利，录制、运行，修改脚本都比较顺畅，重点和难点就是对于脚本的维护，基于scala语言的脚本的相关的API还得重新学习。懒癌又犯了。。。本来想写一个初体验教程，然后发现了testerhome上有一波质量上乘的教程，还是做搬运工吧。。。Gatling 文档翻译 (一)-QuickStartGatling 文档翻译 (二)-Advanced TutorialGatling 官网教程翻译之 Simulation SetupGatling 官网教程翻译之 ConceptsGatling 官网翻译之高级教程Windows 下的 Gatling 学习笔记第一季Windows 下的 Gatling 学习笔记第二季Windows 下的 Gatling 学习笔记第三季gatling干货乌鸦懒癌犯了，想必其他小伙伴也有懒癌重度患者。原计划是使用freemaker和模板，通过输入几个参数直接生成可以使用gatling脚本，看了下freemaker，算了，还是先做模板，然后手工替换指定的几个参数吧。这个脚本的作用是从csv读取数据，以post+body的方式发送。https://github.com/wang153723482/HelloWorld_gatling//* * 按照setp1-3修改相关参数，将文件放在 $GATLING_HOME/user-files/simulations/{package} 下 * 例如 package 是 com.wangc ，那文件应该存放在 $GATLING_HOME/user-files/simulations/com/wangc 下 */ //step1.修改包名 package com.wangc import scala.concurrent.duration._ import io.gatling.core.Predef._ import io.gatling.http.Predef._ import io.gatling.jdbc.Predef._ //setp2.修改类名 class s7_post_json_csv_duration extends Simulation { //setp3.修改参数 // start 参数修改部分 start //csv的列头 val csvHeader = "json_date" //准备充足的数据，如果csv数据不够会报错，无法生成报告 //可以使用绝对路径，或者放在 $GATLING_HOME/user-files/data 下使用相对路径 val csvFilePath = "/home/gatling/foo.csv" //服务器的ip和端口 val baseURL = "http://127.0.0.1:8080" //请求的路径 val requestPath = "/index_do_json.jsp" //虚拟用户数 val vu = 3 //启动上述用户的时间（秒） val rampup = 1 //持续时间（秒） val duration = 2 // end 参数修改部分 end val csvFeeder = csv(csvFilePath).queue val httpConf = http .baseURL(baseURL) .contentTypeHeader("application/json") val requestA = feed(csvFeeder). exec( http("requestA") .post(requestPath) .body(StringBody("${"+csvHeader+"}")) ) val scn = scenario("scn_0").during(duration){ requestA } setUp(scn.inject(rampUsers(vu) over(rampup))).protocols(httpConf) }