技巧分享-12周-Jmeter和Gatling体验结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技巧分享-12周-Jmeter和Gatling体验结果相关的知识,希望对你有一定的参考价值。
参考技术A以前公司压力测试都不使用Jmeter和Gatling工具测试,最近需要寻找更加好用压力测试工具。所以有了半天的体验结果
通过自己学习和实践来跟大家分享Jmeter和Gatling的使用体验
一天使用过程,可能很多地方没有涉及到。
但是Gatling花了好几个小时才成功发起压力测试,Jmeter只花不到1个小时就搞定。
所以最后还是主推Jmeter。
Jmeter
所有操作和配置都在UI界面上操作即可,不需要学习其他内容。而且支持中文。
Gatling
基本是通过gatling.sh/bat执行Scala脚本来完成压力测试。
压力测试所有设置都需要通过scala脚本设置
scala脚本如下
注意: 百度很多教程的语法都就旧版本,执行会报错。主要是以下几个点
1、baseURL 重新命名为 baseUrl
2、silentURI 重新命名为 silentUri
3、asJSON 重新命名为 asJson
3、over 重新命名为 during
Jmeter
通过插件Jmeter可以支持以下最主要功能
结果分析
TPS
响应时间
硬件资源监控
报文响应结果
Gatling
Gatling跟Jmeter对比缺少TPS和硬件资源监控,提供如下数据
交易响应时间、平均每秒吞吐量、最大/最小/平均响应时间
响应时间分布图
百分比响应时间分布
每秒请求次数
每秒响应次数
总体来说
1、Jmeter分析结果会更加符合目前测试需求(查阅资料,TPS目前好像没有),而且不需要单独学习另外一份脚本语言
2、目前gatling中文资料还是比较少,主要去看官网的。
性能测试之 Gatling
在应用程序上线之前,有多少人做过性能测试?
估计大部分开发者更多地关注功能测试,并且会提供一些单元测试和集成测试的用例。然而,有时候性能漏洞导致的影响比未发现的业务漏洞更严重,因为性能漏洞影响的是整个系统,而不仅仅是一个业务进程。
可能你们很多人听过 JMeter ,但是今天将介绍有竞争力的解决方案 —— Gatling 。它能生成丰富多彩的报告,包含测试案例中收集的所有指标。该功能似乎比 JMeter 更好。
在讨论 Gatling 之前,先了解下理论知识,性能测试的两种类型,负载测试和压力测试:
- 负载测试(Load Testing):负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。
- 压力测试(Stress Testing):压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。
Gatling 简介
Gatling 是一个功能强大的负载测试工具。它是为易用性、可维护性和高性能而设计的。
开箱即用,Gatling 带有对 HTTP 协议的出色支持,使其成为负载测试任何 HTTP 服务器的首选工具。由于核心引擎实际上是协议不可知的,所以完全可以实现对其他协议的支持,例如,Gatling 目前也提供JMS 支持。
只要底层协议(如 HTTP)能够以非阻塞的方式实现,Gatling 的架构就是异步的。这种架构可以将虚拟用户作为消息而不是专用线程来实现。因此,运行数千个并发的虚拟用户不是问题。
Gatling 快速入门实践
创建 Spring Boot 应用,提供 RESTful API,以供测试
https://github.com/ChinaSilence/gatling-test.git
如果有自己测试的 Web 应用可以忽略本步骤!
启动数据库
Github 中的示例代码依赖了 PostgresSQL,所以要先启动数据库,最简单的方式当然是用 Docker 咯:
docker run -d --name postgres -e POSTGRES_DB=gatling -e POSTGRES_USER=gatling -e POSTGRES_PASSWORD=gatling123 -p 5432:5432 postgres
在 IDEA 中安装 scala 环境
安装 scala 插件
安装 scala SDK
编写性能测试脚本
每一个 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"))
运行 Spring Boot 应用
运行测试脚本
配置 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
查看测试报告
全局报告
单个接口明细报告
鸣谢
链接:https://www.jianshu.com/p/cdd9d29256c0
以上是关于技巧分享-12周-Jmeter和Gatling体验结果的主要内容,如果未能解决你的问题,请参考以下文章