,强大的负载测试工具应用上线前,有多少人做过性能测试?估计大部分开发者比较关注功能测试,会提供一些用例进行单元测试和集成测试。然而,有时性能漏洞可能比未发现的业务漏洞产生更严重的影响,因为性能漏洞影响整个系统,而不仅仅是业务流程。可能很多人都听说过JMeter,但今天我将介绍一个竞争解决方案——Gatling。它可以生成包含测试用例中收集的所有指标的丰富多彩的报告。这个特性似乎比JMeter更有效。在讨论Gatling之前,先了解一下理论知识,性能测试的两种类型,负载测试和压力测试:负载测试(LoadTesting):负载测试是主要测试软件系统是否满足需求文档设计目标的测试,比如软件在一定时间内支持的最大并发用户数,软件请求的错误率等,主要测试的是软件系统的性能。压力测试:压力测试主要是测试硬件系统是否满足需求文档中设计的性能目标,如系统在一定时间内的CPU使用率、内存使用率、磁盘I/O吞吐率、网络吞吐量等。一段的时间。等等,压力测试和负载测试最大的区别就是测试的目的不同。Gatling简介Gatling是一个强大的负载测试工具。它专为易用性、可维护性和高性能而设计。Gatling开箱即用,对HTTP协议提供了出色的支持,使其成为对任何HTTP服务器进行负载测试的绝佳工具。由于核心引擎实际上是与协议无关的,因此完全可以支持其他协议,例如,Gatling目前也提供JMS支持。只要底层协议(比如HTTP)能够以非阻塞的方式实现,Gatling的架构就是异步的。该架构可以将虚拟用户实现为消息而不是专用线程。所以运行数千个并发虚拟用户不是问题。Gatling快速入门实践1.创建一个SpringBoot应用,提供RESTfulAPI用于测试https://github.com/ChinaSilence/gatling-test.git如果你有自己测试过的web应用,可以忽略这一步!2.启动数据库Github中的示例代码依赖于PostgresSQL,所以需要先启动数据库。最简单的方法是使用Docker:dockerrun-d\--namepostgres\-ePOSTGRES_DB=gatling\-ePOSTGRES_USER=gatling\-ePOSTGRES_PASSWORD=gatling123\-p5432:5432\postgres3,在IDEA中安装scala环境,安装scala插件-中,安装scalaSDK4,编写性能测试脚本每一个Gatling测试都必须继承Simulation类,在这个类中可以使用GatlingScalaDSL声明场景列表。这里的目标是运行30个客户端同时发出1000个请求。首先,客户端会通过调用POST/persons方法向数据库中添加数据;然后,尝试通过调用GET/persons/{id}方法使用id查询数据。classApiGatlingSimulationTestextendsSimulation{valscn=scenario("AddAndFindPersons").repeat(1000,"n"){exec(http("AddPerson-API").post("http://localhost:8080/persons").header("内容-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,"分钟"))}5、运行SpringBoot应用6.运行测试脚本配置Maven插件参数
