• 性能测试工具之Gatling


    转载:http://ningandjiao.iteye.com/blog/2004579

    Gatling一直是久闻其名但是未得机会运用,正好最近有需求做性能测试,于是趁此机会熟悉了一下,可以说,这是目前最合我胃口的性能测试工具。其主要有以下特点: 

    • 1. 绿色软件,即下即用。
    • 2. DSL脚本描述测试场景,高端大气,易读易维护
    • 3. 测试结果报表很漂亮,可读性高。
    • 4. 使用Scala的actors和异步IO,资源消耗小,且运行稳定。


    最后提一下,其还提供了一个Recorder可以录制测试场景自动生成代码,个人不推荐是用这个功能,所有的测试场景最好自己用脚本写,这样的脚本更清楚,更易维护,而且,程序员应该喜欢脚本多过UI。 

    安装和运行 
    前面说了即下即用,下载地址:https://github.com/excilys/gatling/wiki/Downloads; 解压后整个软件的目录如下:


    • bin目录下有2个脚本,gatling和recorder, gatling用来运行测试, recorder用来启动录制脚本的UI的(不推荐使用),
    • conf目录是关于Gatling自身的一些配置。
    • lib目录是Gatling自身依赖的库文件。
    • results目录用来存放测试报告的。
    • user-files目录是用来存放测试脚本的。


    当运行gating脚本的时候,其会扫描user-files目录下的所有文件,列出其中所有的Simulation(一个测试类,里面可以包含任意多个测试场景)。选择其中一个Simulation,然后填写Simulation ID和运行描述,这个都是为报告描述服务的。 



    测试运行完成后,Gatling会自动把报告生成到results目录下, 一个测试报告内容非常详细,界面也非常美观。 



    编写Gatling测试脚本 

    下面是我自己写的一个测试脚本: 

    Scala代码  收藏代码
    1. import com.excilys.ebi.gatling.core.Predef._  
    2. import com.excilys.ebi.gatling.http.Predef._  
    3. import com.excilys.ebi.gatling.jdbc.Predef._  
    4. import com.excilys.ebi.gatling.http.Headers.Names._  
    5. import akka.util.duration._  
    6. import bootstrap._  
    7.   
    8. class MySimulation extends Simulation {  
    9.   
    10.         val httpConf = httpConfig  
    11.                 .baseURL("http://www.bfsstudios.com.au")  
    12.                 .acceptCharsetHeader("ISO-8859-1,utf-8;q=0.7,*;q=0.7")  
    13.                 .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")  
    14.                 .acceptEncodingHeader("gzip, deflate")  
    15.                 .acceptLanguageHeader("fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3")  
    16.                 .disableFollowRedirect  
    17.   
    18.         val headers_1 = Map(  
    19.                 "Keep-Alive" -> "115")  
    20.   
    21.         val scn = scenario("Scenario name")  
    22.                 .exec(  
    23.                         http("main page")  
    24.                                 .get("/")  
    25.                                 .headers(headers_1)  
    26.                                 .check(status.is(200)))  
    27.                 .pause(0 milliseconds, 100 milliseconds)  
    28.                 .feed(csv("worker_id.csv").circular)  
    29.                 .exec(  
    30.                            http("Worker page")  
    31.                                 .get("/worker/${worker_id}")  
    32.                                 .check(status.is(200)))  
    33.   
    34.         setUp(scn.users(10).ramp(10).protocolConfig(httpConf))  
    35. }  
    • 1. 一个Gatling测试脚本就是一个scala的类,该类必须继承Simulation类,这样gatling才能识别其实一个测试集。该代码的后缀名必须为.scala
    • 2. 测试中可以通过httpConf为http请求做基本的配置。
    • 3. 一个scenario定义了一个测试用例。
    • 4. 一个测试用例可以包含多个http请求,每个http请求可以设置自己的http method ,http header等.
    • 5. 运行完之后,可以同个check检测每个请求的返回值
    • 6. 可以通过feeder为同一个用例注入不同的参数数据,feeder中的文件默认从user-files目录下的data文件中查找。
    • 7. 定义完scenario,通过setUp方法指定scenario的运行方式,我例子中的表示用10个用户并发跑测试,而ramp(10)的意思是10秒钟逐渐增加到10个用户,即每秒新起一个用户运行测试。



    我的脚本的运行过程如下: 


    DSL 
    Gatling提供了为运行性能测试非常完善的DSL,这儿有其支持的所有的命令:http://gatling-tool.org/cheat-sheet/使用Gatling之前,扫一眼所有的命令,对写脚本非常有帮助,因此虽然Gatling是scala的脚本,没有scala经验的同志使用起来也不会有任何问题。 

  • 相关阅读:
    UVALive
    训练指南 UVA
    训练指南 UVALive
    Codeforces Round #535 (Div. 3)
    训练指南 UVALive
    训练指南 UVALive
    Codeforces Round #534 (Div. 2)
    Codeforces Round #532 (Div. 2)
    《算法问题实战策略》——chaper9——动态规划法技巧
    《训练指南》——8.3
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/6065053.html
Copyright © 2020-2023  润新知