强大的负载测试工具之Gatling

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

成都创新互联公司主要从事成都做网站、成都网站设计、网页设计、企业做网站、公司建网站等业务。立足成都服务凌河,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

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

可能你们很多人听过 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 咯:

 
 
 
 
  1. docker run -d \ 
  2.   --name postgres \ 
  3.   -e POSTGRES_DB=gatling \ 
  4.   -e POSTGRES_USER=gatling \ 
  5.   -e POSTGRES_PASSWORD=gatling123 \ 
  6.   -p 5432:5432 \ 
  7.   postgres 

3、在 IDEA 中安装 scala 环境

安装 scala 插件

安装 scala SDK

4、编写性能测试脚本

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

 
 
 
 
  1. class ApiGatlingSimulationTest extends Simulation { 
  2.  
  3.   val scn = scenario("AddAndFindPersons").repeat(1000, "n") { 
  4.     exec( 
  5.       http("AddPerson-API") 
  6.         .post("http://localhost:8080/persons") 
  7.         .header("Content-Type", "application/json") 
  8.         .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}}}""")) 
  9.         .check(status.is(200)) 
  10.     ).pause(Duration.apply(5, TimeUnit.MILLISECONDS)) 
  11.   }.repeat(1000, "n") { 
  12.     exec( 
  13.       http("GetPerson-API") 
  14.         .get("http://localhost:8080/persons/${n}") 
  15.         .check(status.is(200)) 
  16.     ) 
  17.   } 
  18.  
  19.   setUp(scn.inject(atOnceUsers(30))).maxDuration(FiniteDuration.apply(10, "minutes")) 
  20.  

5、运行 Spring Boot 应用

6、运行测试脚本

配置 Maven 插件参数

 
 
 
 
  1.  
  2.      
  3.          
  4.             io.gatling 
  5.             gatling-maven-plugin 
  6.             ${gatling-plugin.version} 
  7.              
  8.              
  9.                  com.anoyi.test.ApiGatlingSimulationTest 
  10.              
  11.                 /Users/admin/code/gatling 
  12.              
  13.          
  14.      
  15.  

执行测试

 
 
 
 
  1. mvn gatling:execute 

7、查看测试报告

全局报告

单个接口明细报告

【本文为专栏作者“翟永超”的原创稿件,转载请通过联系作者获取授权】

本文名称:强大的负载测试工具之Gatling
URL标题:http://www.shufengxianlan.com/qtweb/news12/304862.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联