`
tongqingqiu
  • 浏览: 24051 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    服务器负载测试工具SB

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

    实战Nginx高性能Web服务器

    6、高性能Web服务器Nginx的配置与部署研究(6)核心模块之主模块的测试常用指令 内容:详解Nginx的主模块中,测试时经常使用的指令。 7、高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用...

    Tsung负载测试tigase

    tsung是一个非常好用的压力测试软件,基于erlang语言,支持多种协议如xmpp,http,mysql,支持集群,高效率,可以用一台普通的机器压垮几台性能强大的服务器。 针对消息通知服务xmpp服务器,可以用tsung来测试消息...

    jbender, 创建负载测试应用程序的易于使用的库.zip

    jbender, 创建负载测试应用程序的易于使用的库 JBender JBender使得使用诸如HTTP和 Thrift ( 还有很多) 协议的服务构建负载测试器变得很容易。 JBender提供了一个灵活的easy-to-use基元库,可以以组合( 使用普通Java...

    hurl, 轻量的高性能 C HTTP库和实用工具.zip

    hurl, 轻量的高性能 C HTTP库和实用工具 抛出:C 中的HTTP服务器负载测试他们是什么一些用于测试和从http服务器卷卷的实用工具。 hurl HTTP服务器负载测试器是一个与支持 tls 。http2.多线程。并行性和url范围的http...

    使用aws-fargate进行分布式负载测试:设置AWS Fargate以运行多区域分布式性能测试的解决方案

    [OLD]使用Fargate进行分布式负载测试 该项目启动了一个使用和运行分布式负载测试的解决方案。 您可以使用它来测试高压力情况下的服务,并了解其行为和可伸缩性。 Taurus充当JMeter的包装,并允许您并行模拟实际场景...

    集群好书《高性能Linux服务器构建实战》 试读章节下载

    第2章 高性能HTTP加速器Varnish 2.1 初识Varnish 2.1.1 Varnish概述 2.1.2 Varnish的结构与特点 2.1.3 Varnish与Squid的对比 2.2 开始安装Varnish 2.2.1 安装前的准备 2.2.2 获取Varnish软件 2.2.3...

    Jemeter高并发性能测试工具,中文版

    Jemeter高并发性能测试工具,中文版。可以进行接口调试、大并发测试。并发统计,接口数据流转测试。 JMeter作为一个高并发性能测试工具,具有以下优点: 广泛的协议支持:JMeter支持多种协议和技术,包括HTTP、...

    接口性能测试入门培训(Jmeter+Dynatrace)

    它还可以用于压力测试、负载测试和功能测试,以确保应用程序在不同情况下都能正常运行。 除了性能测试,JMeter还可以用于接口测试和自动化测试。它支持脚本编写和调试,可以对应用程序的各个功能进行全面测试。 ...

    性能测试进阶指南——LoadRunner11实战 part2

    《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:...

    服务器性能测试工具Gatling.zip

    Gatling是一款基于Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。Gatling主要用于测量基于HTTP的服务器,比如Web应用程序,RESTful服务等,除此之外...

    ApacheJMeterweb性能测试实例

    为了在JMeter中创建负载测试,需要构建测试计划。在实际操作中,Jmeter需要执行一系列的操作。最简单的测试计划通常包括下列元件:线程组——这些元件用于指定运行的线程数和等候周期。每个线程模拟一个用户,而等候...

    性能测试从零开始:LoadRunner入门与提升

    11.3 案例实践:性能测试第二阶段Ajax系统负载测试 307 11.3.1 本轮测试目的 307 11.3.2 测试场景规划 307 11.3.3 负载测试案例分析 309 11.3.4 性能结果量化分析 312 11.4 总结 315 第12章 测试也开发--自开发性能...

    Linux高性能服务器编程

    15.5 半同步半反应堆线程池实现 15.6 用线程池实现的简单Web服务器 15.6.1 http_conn类 15.6.2 main函数 第三篇 高性能服务器优化与监测第16章 服务器调制、调试和测试 16.1 最大文件描述符数 16.2 调整内核...

    性能测试进阶指南——LoadRunner11实战 part3

    《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:...

    性能测试进阶指南——LoadRunner11实战 part1

    《测试实践丛书:性能测试进阶指南·LoadRunner 11实战》结合了很多工作中的实际案例,图文并茂,既适合渴望了解性能测试的新人,也适合对性能测试有一定认识和经验的中、高级测试工程师。同时,《测试实践丛书:...

    基于Nginx负载均衡的动态改进算法_张宇星.pdf

    而Nginx作为一款高性能的HTTP和反向代理服务器,正越来越多的应用到实践中。本文将分析Nginx服务器负载均衡的体系架构,研究默认的加权轮询算法,并提出一种改进后的动态负载均衡算法,实时收集负载信息,重新计算并分配...

    360开源的高性能分布式存储服务 HustStore.zip

    nginx 是工业级的 http server 标准,得益于此,huststore 具备以下特性:高吞吐量hustdb 的网络层采用了开源的 libevhtp 来实现,结合自主研发的高性能 fastdb 存储引擎,性能测试 QPS 在 10w 以上。高并发参考 ...

    IHS性能调优参数设置经验总结

    前端的集群分发使用的是IHS IBM Http Server 在loadrunner的压力测试中 针对于IHS负载不均 不能响应请求等问题 作了一些性能调优参数设置方面的工作 本文会围绕这些相关参数的设置展开 来说明这些参数的意义以及参数...

Global site tag (gtag.js) - Google Analytics