Gatling + Maven 从零实现性能测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: Gatling + Maven 从零实现性能测试

实施 Gatling 性能测试项目的最佳方式是什么?

当我们设计一个框架的时候,可维护性和可扩展性是我们考虑的非常重要的两个因素。

在本文中,我们将展示如何创建使用 Gatling 和 Maven 从 0 创建一个性能测试项目。

Gatling + Maven 的测试框架

前置条件

在开始前,你应在你本地安装完成以下几个工具:

  • Java 1.8
  • Maven 3.5
  • IntelliJ IDE 中的 Scala 插件

首先我们使用 maven 命令创建一个 gatling 风格的基础项目

mvn archetype:generate -DarchetypeGroupId=io.gatling.highcharts -DarchetypeArtifactId=gatling-highcharts-maven-archetype
复制代码

image.png

plus:在执行上述命名时找不到 gatling 项目框架,所以接下来会通过 IDEA 直接创建 Maven 项目。

IntelliJ 创建一个新的 Maven 项目,添加基础架构的坐标和版本号,可以参考 Maven 官网。如下图所示:

image.png

image.png

给项目命名为 gatling-framework,如下图所示:

image.png

点击 Next:

image.png

当你使用 IntelliJ 打开项目时,你会看到默认创建了许多文件和文件夹:

image.png

resources 目录下包含了:

bodies 文件夹用保存请求的 Payload,比如各种请求的请求模板。

data 文件夹用来保存测试数据,比如 CSV 文件等。

除了上面提到的两个文件夹外,还有 gatling.conf、logback.xml 和 recorder.confg 文件,在本文中不会涉及。

Gatling Archetype 同时创建了 3 个 Scala Object,在创建完测试用例之后,通过执行 Engine Object 来执行测试。

另外,我们还将创建四个 packages,分别是 config、request、scenarios 和 simulations。

image.png

Config Package

在 config 包下,创建 Scala Object Config,这个 Object 将会存储各种项目的配置信息,如应用的 URL 地址,默认的用户等等。

点击 New,选择 Scala Class:

image.png

输入名称,选择 Object:

image.png

Config Object 的代码如下:

object Config {
    val app_url = "http://example-app.com"
    val users = Integer.getInteger("users",10).toInt
    val rampUp = Integer.getInteger("rampup", 1).toInt
    val throughput = Integer.getInteger("throughput",100).toInt
}
复制代码

Request Package

requests 包则是用来存储各种不同的请求,如我们可以创建一个请求来获取认证的 token,其他请求就可以使用获取到的 token 来进行创建用户等操作。

这些是发送到不同地址的独立请求。

GetTokenRequest

import io.gatling.http.Predef._
import io.gatling.core.Predef._
import com.testexcellence.config.Config.app_url
object GetTokenRequest {
    val get_token = http("RequestName").get(app_url + "/token")
        .check(status is 200)
        .check(jsonPath("$..token").saveAs("token"))
}
复制代码

CreateUserRequest

object CreateUserRequest {
    val sentHeaders = Map("Authorization" -> "bear ${token}")
    val create_user = exec(http("Create User Request")
        .post(app_url + "/users")
        .headers(sentHeaders)
        .formParam("name", "John")
        .formParam("password", "John5P4ss")
        .check(status is 201)
        .check(regex("Created").exists))
}
复制代码

Scenarios Package

Scenario package 保存各种业务场景,比如,要创建一个用户,我们首先必须获得一个 token,然后将该 token 当做请求头发送请求来创建用户。本例中我们使用第一个请求的响应作为到第二个请求的头。这种“请求链”在 API 测试中非常常见。

CreateUserSecnario

import com.testexcellence.requests.{CreateUserRequest, GetTokenRequest}
import io.gatling.core.Predef.scenario
object CreateUserSecnario {
    val crateUserScenario = scenario("Create User Scenario")
        .exec(GetTokenRequest.get_token)
        .exec(CreateUserRequest.create_user)
}
复制代码

Simulations Package

最后,我们在 Simulations Package 中创建一个 Simulation。您可以将 Simulations 当做不同的测试负载。例如,我们可以进行正常负载模拟或峰值模拟的性能测试

Simulation 必须是 Scala Class,并且必须继承 Gatling 的 Simulation 类。

CreateUserSecnario

import com.testexcellence.scenarios.CreateUserScenario
import io.gatling.core.Predef.Simulation
import com.testexcellence.config.Config.users
import io.gatling.core.Predef._
class CreateUserSimulation extends Simulation{
    private val createUserExec = CreateUserScenario.createUserScenario
            .inject(atOnceUsers(users))
    setUp(createUserExec)
}
复制代码

至此,你的整个项目结构应该如下图所示:

image.png

我们还需要修改 pom.xml,添加 maven gatling plugin

<plugin>
    <groupId>io.gatling</groupId>
    <artifactId>gatling-maven-plugin</artifactId>
    <version>3.0.0</version>
</plugin>
复制代码

执行 Engine Object 就可以运行测试:

image.png

控制台输出运行的信息以及报告保存的位置:

image.png

报告如下图所示:

image.png


相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
7月前
|
SQL Java 数据库连接
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
【1月更文挑战第2天】 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
315 3
Mybatis之Mybatis简介、搭建Mybatis相关步骤(开发环境、maven、核心配置文件、mapper接口、映射文件、junit测试、log4j日志)
|
2月前
|
Java Maven
Maven 项目测试
接下来我们要学习如何构建和测试这个项目。
57 5
|
6月前
|
Java Maven
maven跳过测试清理、打包、安装
maven跳过测试清理、打包、安装
133 4
|
7月前
|
XML Java 测试技术
Maven 构建 & 项目测试
本节介绍了如何使用Maven进行Java应用的构建和测试。在`C:\MVN\consumerBanking`项目中,`pom.xml`配置了JUnit测试框架。执行`mvn clean package`命令,Maven会清理目标目录、编译源码和测试代码,运行测试,并生成`consumerBanking-1.0-SNAPSHOT.jar`。测试报告位于`surefire-reports`目录。
|
6月前
|
数据可视化 Java 持续交付
JavaWeb后端开发之Maven 2024介绍安装测试详解
JavaWeb后端开发之Maven 2024介绍安装测试详解
82 0
|
7月前
|
XML Java 测试技术
Maven 构建 & 项目测试
本文介绍了如何使用Maven构建和测试Java应用。在`C:/MVN/consumerBanking`项目中,`pom.xml`配置了JUnit作为测试框架。执行`mvn clean package`命令进行构建,Maven会清理目标目录,编译源码和测试代码,运行测试用例,最后生成`consumerBanking-1.0-SNAPSHOT.jar`。测试报告位于`surefire-reports`文件夹。添加新Java类`Util.java`到项目后,更新`App.java`以使用`Util`类。
|
7月前
|
XML Java 测试技术
Maven 构建 & 项目测试
该文介绍了如何使用Maven进行Java应用的构建与测试。在`C:/MVN/consumerBanking`项目中,`pom.xml`配置了JUnit依赖。Maven默认创建了源码和测试文件,通过命令`mvn clean package`进行构建,生成`consumerBanking-1.0-SNAPSHOT.jar`。测试报告在`surefire-reports`文件夹。新增`Util`类并更新`App`后,执行`mvn clean compile`编译,然后运行`java -cp . com.companyname.bank.App`显示&quot;Hello World!&quot;。
|
6月前
|
XML Java 测试技术
Maven 构建 & 项目测试
在本节中,我们学习了如何使用Maven构建和测试Java应用。在`C:/MVN/consumerBanking`项目中,`pom.xml`配置了JUnit为测试框架。通过命令行运行`mvn clean package`,Maven执行清理、编译、运行测试和打包成`consumerBanking-1.0-SNAPSHOT.jar`。测试报告位于`target/surefire-reports`。新增`Util.java`类后,更新`App.java`以调用它。执行`mvn clean compile`后,运行结果显示&quot;Hello World!&quot;。
|
IDE Java 项目管理
【Maven】Maven的新建、使用、安装配置、集成配置到eclipse,Maven项目测试servlet,Maven容易出现的问题
Maven是一个流行的构建工具和项目管理工具,它能够自动处理项目的编译、依赖管理和构建部署等任务。通过使用Maven,开发人员可以更轻松地管理和构建Java项目,而不必手动解决复杂的依赖关系。Maven是一个Java项目管理工具,它提供了一种结构化的方法来管理项目的构建、依赖、文档和发布等方面的工作。它基于项目对象模型(Project Object Model,POM)的概念,通过配置文件来定义项目的构建和行为。Maven将项目的构建过程自动化,并提供了许多插件和功能来简化开发人员的工作。
|
Java 测试技术 Maven
maven跳过单元测试-maven.test.skip和skipTests的区别
maven跳过单元测试-maven.test.skip和skipTests的区别