`
tongqingqiu
  • 浏览: 24792 次
  • 性别: Icon_minigender_1
  • 来自: 亚特兰大
社区版块
存档分类
最新评论

高性能HTTP负载测试

阅读更多
HTTP负载测试的目的是测试站点或服务是否能够能在一定的时延范围内每秒处理上万到百万个请求。在Java的世界里,最常用的免费负载测试工具是Apache JMeter。这里介绍另外一个工作——gatling,以及如何将其与一种随机数据生成器一起使用。

Gatling是一个开源的,基于Scala, Akka和Netty的负载测试框架。它首要的特性就是高效。利用有限的资源,Gatling可以生成海量的并发请求。其次,编写测试脚本十分简单和直观。它是基于scala的领域特定语言(DSL)。一个简单的例子如下:


cenario("Standard User")
        .exec( http("Access Github") get("http://github.com") )
        .pause(2, 3)
        .exec( http("Search for 'gatling'") get("http://github.com/search") queryParam("q","gatling") )
        .pause(2)


最后,测试生成的报告是一系列包含表格和图表的网页,直观展现测试内容。


单单使用Gatling并不能满足所有负载测试的需求。很多情况下,我们需要使用大量数据进行负载测试。虽然Gatling支持从CSV文件或者SQL数据库读取数据,但是它们会贮存在内存里,并不适用于海量数据。更多的时候,我们为每个请求希望随机生成数据。这里随机数据生成器就派上用场了。log-synth是个简单易用的日志生成器。同时,也可以直接将它作为Java库调用。用户可以使用JSON描述需要生成什么样的数据, 例如

{"name":"foo1", "class":"event", "rate": "0.1/d"},
{"name":"foo2", "class":"event", "start": "2014-01-01", "format":"yyyy-MM-dd HH:mm:ss", "rate": "10/s"},
{"name":"foo3", "class":"event", "format": "MM/dd/yyyy HH:mm:ss", "start": "02/01/2014 00:00:00", "rate": "0.5/s"}


将log-synth和gatling集成不是难事。Gatling是Scala编写的,可以直接调用Java方法。总结起来,集成包含了一下几个步骤

首先,将log-synth相关库文件加入Gatling库(需要处理一些冲突)
而后,定义数据模式,例如 "schema.json"
[
  {"name":"id", "class":"id"},
  {"name":"name", "class":"name", "type":"first_last"},
  {"name":"gender", "class":"string", "dist":{"MALE":0.5, "FEMALE":0.5, "OTHER":0.02}},
  {"name":"address", "class":"address"},
  {"name":"first_visit", "class":"date", "format":"MM/dd/yyyy"}
]


接下来,编写Gatling脚本时定义data feed

// custom feed generate the usernames randomly.
  val myCustomFeeder = new Feeder[String] {
    // always return true as this feeder can be polled infinitively
    override def hasNext = true

    val s: SchemaSampler = 
    new SchemaSampler(Resources.asCharSource(Resources.getResource("schema.json"), Charsets.UTF_8).read)

    override def next: Map[String, String] = {
      val record: JsonNode = s.sample
      var name = record.get("name").asText
      var id = record.get("id").asText
      val today = Calendar.getInstance().getTime()
      val formater = new SimpleDateFormat("yyyyMMddHHmmssSSS")
      var todayStr = formater.format(today)
      Map("name" -> name, "id" -> id, "time" -> todayStr)
    }
  }


最后,使用data feed
val scn = scenario("Write Test")
    .feed(myCustomFeeder)
    .exec(
      http("insert_request")
        .put("/keyvalue/test_collection/${id}") // must be lowercase
        .header("Content-Type", "application/json")
        .body("""{ "username": "${name}" }""").asJSON
        .check(status.in(200 to 210))

    )
  .exec(
      http("get_request")
        .get("/keyvalue/test_collection/${id}") // must be lowercase
        .header("Content-Type", "application/json")
        .check(status.in(200 to 210))

    )

  setUp(
    scn.users(threads).ramp(rampup).delay(1).protocolConfig(httpConf)
)


完整的例子在我的github项目gratling-random中。
https://github.com/tongqqiu/gatling-random
  • 大小: 95.8 KB
分享到:
评论

相关推荐

    Web性能测试与负载测试

    ### Web性能测试与负载测试知识点概述 #### 一、Web性能测试与负载测试的基本概念 - **Web性能测试**:主要是为了评估Web应用在不同负载条件下的表现,确保其能够处理预期的用户流量并保持良好的用户体验。这通常...

    简单的web负载测试工具

    简单来说,负载测试就是模拟大量用户同时访问网站或应用,以检验其在高压力下的性能表现。在本例中,我们关注的是一个名为"简单的web负载测试工具",这个工具主要用于测试与HTTP协议相关的GET和POST请求。 HTTP(超...

    LR9.5负载测试中文教程

    5. **负载测试策略**:学习不同的负载测试策略,如负载渐增、稳定性测试、压力测试和耐久性测试,以全面评估系统性能。 6. **性能监视器**:了解如何集成系统资源监视器,收集服务器、数据库和其他基础设施的性能...

    Golang_GoHTTP负载测试工具和库超过9000.zip

    1. **vegeta** - Vegeta是一个高性能的HTTP负载测试工具,它可以以恒定的速率发送请求,并输出详细的统计结果。Vegeta支持JSON格式的请求定义,可以方便地进行复杂场景的模拟。压缩包中的`vegeta_master.zip`很可能...

    loadrunner负载测试实例(含步骤)

    负载测试的目标可能包括确定系统的最大用户承载量、识别性能瓶颈、优化系统性能或者确保在高负载下系统的稳定性。了解这些目标有助于规划测试策略和场景设计。 第二步:选择合适的协议 LoadRunner支持多种协议,如...

    基于LVS负载均衡的高性能Web站点设计与实现

    在构建高性能Web站点时,基于LVS(Linux Virtual Server)的负载均衡技术是关键的一环。LVS是一种开源的负载均衡解决方案,它能够将网络流量有效地分发到多个服务器上,以提高系统的处理能力和可用性。本文将详细...

    JMeter性能测试、负载测试和压力测试

    JMeter主要用于性能测试、负载测试和压力测试,以评估应用程序在不同负载情况下的性能和稳定性。它可以模拟多种协议(如HTTP、HTTPS、FTP、SOAP、REST等)的请求,并生成大量并发用户以模拟真实世界的使用情况。通过...

    软件测试中的性能测试与负载测试技巧2.pptx

    ### 软件测试中的性能测试与负载测试技巧 #### 第一章:简介 ##### 1.1 什么是性能测试与负载测试? - **性能测试**:旨在评估系统在特定工作负载下的表现,如响应时间、吞吐量、资源利用率等。 - **负载测试**:...

    HTTP负载测试工具 Vegeta.zip

    Vegeta是一款强大的HTTP负载测试工具,主要由Go语言编写,它允许用户模拟大量并发请求以测试Web服务的性能和稳定性。Vegeta的设计理念是轻量级且灵活,能够帮助开发者评估其应用程序在高负载下的表现,以及系统在...

    软件测试中的性能测试与负载测试技巧1.pptx

    ### 软件测试中的性能测试与负载测试技巧 #### 第一章:简介 ##### 1.1 什么是性能测试与负载测试? - **性能测试**:旨在评估系统在特定工作负载下的表现,如响应时间、吞吐量、资源利用率等。 - **负载测试**:...

    Go-Vegeta-HTTP负载测试工具和库

    **Go-Vegeta-HTTP负载测试工具和库** Vegeta是一款强大的...总的来说,Vegeta是Go语言生态中一个强大的HTTP负载测试工具,无论是对个人开发者还是企业团队,都能提供有价值的性能测试数据,帮助优化和稳定Web服务。

    Go-FBender-用于通用网络协议的负载测试命令行工具

    **Go-FBender:通用网络协议的负载测试命令行工具** Go-FBender是一个由Go语言编写的高效、轻量级的命令行工具,专门设计用于执行通用网络协议的负载测试。它允许用户对各种网络服务进行压力测试,评估其在高并发...

    使用LodRunner实现大负载测试的四部曲.pdf

    ### 使用LoadRunner实现大负载测试的四部曲 #### 第一部曲:系统参数配置与优化 在进行大负载测试之前...这些策略不仅适用于LoadRunner,也适用于其他高性能测试场景,为IT行业的软件质量和性能评估提供了有力支持。

    wrk-master

    wrk是一个用LuaJIT编写的现代、高性能HTTP负载测试工具,它能够模拟多个客户端并行发送请求,以评估服务器性能。下面将详细阐述wrk的工作原理、主要功能以及如何使用它进行性能测试。 wrk的工作原理基于事件驱动的...

    性能测试大全(性能测试的基础和高级知识)

    3. Gatling:轻量级、高性能的负载测试工具,适用于现代Web应用,支持HTTP/2和WebSocket协议。 4. Locust:Python编写的轻量级性能测试工具,适合分布式测试,适用于API和网站的负载测试。 《性能测试报告模板.doc...

    服务器负载测试工具SB

    支持HTTP负载测试,所有并发重复下载一个http文件。可将80Gbps带宽测试的72Gbps。执行程序:./objs/sb_http_load 支持RTMP流播放测试,一个进程支持5k并发。执行程序:./objs/sb_rtmp_load 支持RTMP流推流测试,一个...

    windows下模拟高并发来进行负载测试工具siege

    siege工具的主要功能在于能够模拟多个并发用户对Web服务器进行连续的HTTP/HTTPS请求,以此来评估服务器在高负载下的性能表现。通过设置不同的参数,可以调整并发用户数量、请求持续时间、请求间隔以及URL列表等,以...

    Tsung负载测试tigase

    ### Tsung负载测试Tigase知识点详解 #### Tsung概述 Tsung是一款高效的压力测试工具,采用Erlang语言开发,能够支持多种网络协议,包括XMPP、HTTP、MySQL等。其独特的分布式特性使得它能够在单机环境下模拟大量...

Global site tag (gtag.js) - Google Analytics