在应用程序上线之前,有多少人做过性能测试?

估计大部分开发者更多地关注功能测试,并且会提供一些单元测试和集成测试的用例。然而,有时候性能漏洞导致的影响比未发现的业务漏洞更严重,因为性能漏洞影响的是整个系统,而不仅仅是一个业务进程。

可能你们很多人听过 JMeter ,但是今天将介绍有竞争力的解决方案 —— Gatling 。它能生成丰富多彩的报告,包含测试案例中收集的所有指标。该功能似乎比 JMeter 更好。

在讨论 Gatling 之前,先了解下理论知识,性能测试的两种类型,负载测试和压力测试:

  • 负载测试(Load Testing):负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。
  • 压力测试(Stress Testing):压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。

Gatling 简介

Gatling 是一个功能强大的负载测试工具。它是为易用性、可维护性和高性能而设计的。

开箱即用,Gatling 带有对 HTTP 协议的出色支持,使其成为负载测试任何 HTTP 服务器的首选工具。由于核心引擎实际上是协议不可知的,所以完全可以实现对其他协议的支持,例如,Gatling 目前也提供JMS 支持。

只要底层协议(如 HTTP)能够以非阻塞的方式实现,Gatling 的架构就是异步的。这种架构可以将虚拟用户作为消息而不是专用线程来实现。因此,运行数千个并发的虚拟用户不是问题。

Gatling 快速入门实践

1、创建 Spring Boot 应用,提供 RESTful API,以供测试

https://github.com/ChinaSilence/gatling-test.git

如果有自己测试的 Web 应用可以忽略本步骤!

2、启动数据库

Github 中的示例代码依赖了 PostgresSQL,所以要先启动数据库,最简单的方式当然是用 Docker 咯:

docker run -d \
  --name postgres \
  -e POSTGRES_DB=gatling \
  -e POSTGRES_USER=gatling \
  -e POSTGRES_PASSWORD=gatling123 \
  -p 5432:5432 \
  postgres

3、在 IDEA 中安装 scala 环境

安装 scala 插件

安装 scala SDK

4、编写性能测试脚本

每一个 Gatling 测试都要继承 Simulation 类,在里面你可以使用Gatling Scala DSL 来声明一个场景列表。这里的目标是运行 30 个客户端,同时发送 1000 次请求。首先,客户端通过调用 POST /persons 方法将添加数据到数据库中;然后,尝试通过调用 GET /persons/{id} 方法使用 id 来查询数据。

class ApiGatlingSimulationTest extends Simulation {

  val scn = scenario("AddAndFindPersons").repeat(1000, "n") {
    exec(
      http("AddPerson-API")
        .post("http://localhost:8080/persons")
        .header("Content-Type", "application/json")
        .body(StringBody("""{"firstName":"John${n}","lastName":"Smith${n}","birthDate":"1980-01-01", "address": {"country":"pl","city":"Warsaw","street":"Test${n}","postalCode":"02-200","houseNo":${n}}}"""))
        .check(status.is(200))
    ).pause(Duration.apply(5, TimeUnit.MILLISECONDS))
  }.repeat(1000, "n") {
    exec(
      http("GetPerson-API")
        .get("http://localhost:8080/persons/${n}")
        .check(status.is(200))
    )
  }

  setUp(scn.inject(atOnceUsers(30))).maxDuration(FiniteDuration.apply(10, "minutes"))

}

5、运行 Spring Boot 应用

6、运行测试脚本

配置 Maven 插件参数

    <build>
        <plugins>
            <plugin>
                <groupId>io.gatling</groupId>
                <artifactId>gatling-maven-plugin</artifactId>
                <version>${gatling-plugin.version}</version>
                <configuration>
                    <!-- 测试脚本 -->
                    <simulationClass>com.anoyi.test.ApiGatlingSimulationTest</simulationClass>
                    <!-- 结果输出地址 -->
                    <resultsFolder>/Users/admin/code/gatling</resultsFolder>
                </configuration>
            </plugin>
        </plugins>
    </build>

执行测试

mvn gatling:execute

7、查看测试报告

全局报告

单个接口明细报告

应用性能测试神器 Gatling,你用过吗?的更多相关文章

  1. 新一代服务器性能测试工具Gatling

    新一代服务器性能测试工具Gatlinghttp://automationqa.com/forum.php?mod=viewthread&tid=2898&fromuid=2

  2. 负载,性能测试工具-Gatling

    前言 Gatling Gatling是一款功能强大的负载测试工具,它为易于使用,高可维护性和高性能而设计. 开箱即用,Gatling由于对HTTP协议的出色支持,使其成为负载测试任何HTTP服务器的首 ...

  3. Gatling新一代压力测试工具,新一代服务器性能测试工具Gatling

    Gatling新一代压力测试工具新一代服务器性能测试工具Gatlinghttp://www.infoq.com/cn/articles/new-generation-server-testing-to ...

  4. 性能测试工具Gatling - 设置Recorder

    Gatling自带的Recorder,可以大大节省我们书写scenario的时间.     用法和selenium的IDE类似,作为一个代理服务器在browser和application之间做桥梁作用 ...

  5. 好用的python性能测试神器–Locust

    原文链接:https://mp.weixin.qq.com/s/9PxSPuHmucSLi_welq6uNQ 现在性能测试工具太多,根据业务不同使用,比如说我们熟悉的loadrunner.jmeter ...

  6. XHProf的安装和使用(PHP性能测试神器)

    XHProf是Facebook开发的性能调试工具,帮助我们的PHP程序性能调优,更加健壮.XHProf安装和使用方法将在本章讲解.XHProf是PHP的PECL扩展.没有XDeBug那些耗费资源,更加 ...

  7. web性能测试的新利器 - Gatling 介绍

    转载:http://www.51testing.com/html/10/26810-852956.html 最近发现了一个新的性能测试工具Gatling,貌似比Jmeter还好玩.这几天就先简单介绍一 ...

  8. SBT的用法

    最近需要用scala写一个测试框架,主要看中了它比较强大的DSL抽象能力和有一个简洁的web框架play,还有比较好的性能测试框架gatling和测试框架Scalatest和Spec2.揉在一起会有啥 ...

  9. 快速了解Scala技术栈

    http://www.infoq.com/cn/articles/scala-technology/ 我无可救药地成为了Scala的超级粉丝.在我使用Scala开发项目以及编写框架后,它就仿佛凝聚成为 ...

随机推荐

  1. 办公利器-一行代码搞定http服务

    平时给内网的同事分享个文件,直接用python启动一个http服务,方便又简洁: python3: python -m http.server [port] 默认端口为8000 python2: py ...

  2. kafka 名词概念

    ProducerConsumerBrokerTopicPartitionConsumer Group分布式 Broker     Kafka集群包含一个或多个服务器,这种服务器被称为brokerTop ...

  3. 初步接触 Java Net 网络编程

    本文目的是大概了解 Java 网络编程体系,需要一点点 Java IO 基础,推荐教程 系统学习 Java IO.主要参考 JavaDoc 和 Jakob Jenkov 的英文教程<Java N ...

  4. 【Zookeeper02】ZK的作用以及使用

    上一篇介绍了ZK的安装以及集群的搭建,这只能算是个软件安装过程,具体是做什么的.怎么用也没有做解释,这一篇中博主就自己的私人理解简单写一下: 1.是什么: a.Zookeeper是一个分布式协调服务, ...

  5. react 项目全家桶构件流程

    资源:create-react-app.react.react-dom.redux.react-redux.redux-thunk.react-router-dom.antd-mobile/antd. ...

  6. Python 图片识别

    Tesseract是开源的OCR引擎. 需要安装tesserocr.opencv-python.tesseract-ocr pip install tesserocr pip install open ...

  7. 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板

    标题:从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/11155 ...

  8. 面试中常见的算法之Java中的递归

    1.方法定义中调用方法本身的现象2.递归注意实现 1) 要有出口,否则就是死递归 2) 次数不能太多,否则就内存溢出 3) 构造方法不能递归使用3.递归解决问题的思想和图解: 分解和合并[先分解后合并 ...

  9. Codeforces 730B:Minimum and Maximum(交互式问题)

    http://codeforces.com/problemset/problem/730/B 题意:一个交互式问题,给出一个n代表有n个数字,你可以问下标为x和y的数的大小,会给出"> ...

  10. 从微信小程序开发者工具源码看实现原理(一)- - 小程序架构设计

    使用微信小程序开发已经很长时间了,对小程序开发已经相当熟练了:但是作为一名对技术有追求的前端开发,仅仅熟练掌握小程序的开发感觉还是不够的,我们应该更进一步的去理解其背后实现的原理以及对应的考量,这可能 ...