首页 技术 正文
技术 2022年11月15日
0 收藏 468 点赞 3,224 浏览 2300 个字

应用性能测试神器 Gatling,你用过吗?

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

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

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

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

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

Gatling 简介

应用性能测试神器 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 插件
应用性能测试神器 Gatling,你用过吗?

安装 scala SDK

应用性能测试神器 Gatling,你用过吗?

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 应用

应用性能测试神器 Gatling,你用过吗?

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

应用性能测试神器 Gatling,你用过吗?

7、查看测试报告

全局报告

应用性能测试神器 Gatling,你用过吗?

单个接口明细报告

应用性能测试神器 Gatling,你用过吗?

应用性能测试神器 Gatling,你用过吗?

应用性能测试神器 Gatling,你用过吗?

应用性能测试神器 Gatling,你用过吗?

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,122
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,594
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,439
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,210
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,846
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,931