性能测试Gatling入门教程

栏目: Java · 发布时间: 6年前

内容简介:性能测试Gatling入门教程

Gatling 是一个功能强大的负载测试工具。它是为易用性、可维护性和高性能而设计的,它能生成丰富多彩的报告,包含测试案例中收集的所有指标,该功能似乎比 JMeter更好,因此我在实际压力测试中选用Gatling。

Gatling安装

从Gatling 官网 下载后解压即可,执行bin目录下的gatling.bat或者gatling.sh即可运行,要先安装好jdk配置好环境变量。

快速教程

推荐使用Intelj idea + maven archetype插件来搭建开发环境,Gatling采用了Scala DSL语言,首先要配置好Scala环境,在Idea的插件库搜索Scala并安装,然后从

Scala 官网 下载scala SDK,打开Idea的project structure,找到Global Library那一栏,点加号添加下载的Scala SDK.

执行Maven命令创建项目骨架:

mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=io.gatling.highcharts -DarchetypeArtifactId=gatling-highcharts-maven-archetype -DgroupId=com.ezlippi  -DartifactId=gatling.test  -Dversion=1.0

生成如下项目结构:在src/test/scala目录下新建一个继承Simulation类的测试类,在里面写测试方法:

 class OpenApiSimulation extends Simulation {

  val httpConf = http
    .baseURL("https://someUrl")
    .acceptHeader("application/json")
    .contentTypeHeader("application/json")
    .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0")

 //forever表示一直执行,具体写法可以参考:https://gatling.io/docs/2.3/general/simulation_setup/
  val scn = scenario("com.ezlippi.OpenApiSimulation")
      .forever(exec(http("request_1")
        .get("")))

//只执行一次
//  val scn = scenario("com.ezlippi.OpenApiSimulation")
//      .exec(http("request_1").get("/646df17616081148d3e679"))

  //立刻注入100个用户
  val injectStrategy = atOnceUsers(100)


  
  setUp(
    scn.inject(injectStrategy)
  ).protocols(httpConf).maxDuration(Duration.apply(10, TimeUnit.MINUTES))

执行测试脚本

如果通过maven命令执行测试脚本,需要在pom文件中配置gatling-maven-plugin,simulationClass表示要执行的测试类,resultsFolder是测试报告存放的路径,

disableCompiler执行的时候是否禁止编译,因为我写完测试类后就右键编译把scala文件编译好了,执行maven命令时没必要再次编译,插件配置如下:

 <plugin>
	<groupId>io.gatling</groupId>
	<artifactId>gatling-maven-plugin</artifactId>
	<version>2.2.4</version>
	<configuration>
		<!-- 测试脚本 -->
		<simulationClass>com.ezlippi.OpenApiSimulation</simulationClass>
		<!-- 结果输出地址 -->
		<resultsFolder>gatling</resultsFolder>
		<disableCompiler>true</disableCompiler>
	</configuration>
</plugin>

然后执行mvn gatling:execute就可以执行用例了,输出结果如下:

================================================================================
2018-01-22 21:34:27                                           0s elapsed
---- com.ezlippi.OpenApiSimulation ---------------------------------------------
[                                                                          ]  0%
          waiting: 100    / active: 0      / done:0     
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=0      KO=0     )

================================================================================


================================================================================
2018-01-22 21:34:32                                           4s elapsed
---- com.ezlippi.OpenApiSimulation ---------------------------------------------
[--------------------------------------------------------------------------]  0%
          waiting: 0      / active: 100    / done:0     
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=4789   KO=0     )
> request_1                                                (OK=4789   KO=0     )
================================================================================

查看测试报告

打开gatling目录已时间戳结尾的文件夹下的index.html文件就可以查看报告了,结果非常明显。

直接通过maven配置

如果通过archetype插件创建项目骨架失败了,那可以直接新建maven工程,然后添加如下内容到pom文件中:

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.ezlippi</groupId>
	<artifactId>gatling</artifactId>
	<version>1.0-SNAPSHOT</version>

	<properties>
		<maven.compiler.source>1.7</maven.compiler.source>
		<maven.compiler.target>1.7</maven.compiler.target>
		<scala.version>2.11.7</scala.version>
		<encoding>UTF-8</encoding>
		<gatling.version>2.1.7</gatling.version>
		<scala-maven-plugin.version>3.2.2</scala-maven-plugin.version>
	</properties>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>io.gatling</groupId>
				<artifactId>gatling-app</artifactId>
				<version>${gatling.version}</version>
			</dependency>
			<dependency>
				<groupId>io.gatling</groupId>
				<artifactId>gatling-recorder</artifactId>
				<version>${gatling.version}</version>
			</dependency>
			<dependency>
				<groupId>io.gatling.highcharts</groupId>
				<artifactId>gatling-charts-highcharts</artifactId>
				<version>${gatling.version}</version>
			</dependency>
			<dependency>
				<groupId>org.scala-lang</groupId>
				<artifactId>scala-library</artifactId>
				<version>${scala.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>io.gatling.highcharts</groupId>
			<artifactId>gatling-charts-highcharts</artifactId>
		</dependency>
		<dependency>
			<groupId>io.gatling</groupId>
			<artifactId>gatling-app</artifactId>
		</dependency>
		<dependency>
			<groupId>io.gatling</groupId>
			<artifactId>gatling-recorder</artifactId>
		</dependency>
		<dependency>
			<groupId>org.scala-lang</groupId>
			<artifactId>scala-library</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-codec</groupId>
			<artifactId>commons-codec</artifactId>
			<version>1.10</version>
		</dependency>
	</dependencies>

	<build>
		<testSourceDirectory>src/test/scala</testSourceDirectory>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>net.alchim31.maven</groupId>
					<artifactId>scala-maven-plugin</artifactId>
					<version>${scala-maven-plugin.version}</version>
				</plugin>
			</plugins>
		</pluginManagement>
		<plugins>
			<plugin>
				<groupId>net.alchim31.maven</groupId>
				<artifactId>scala-maven-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>testCompile</goal>
						</goals>
						<configuration>
							<args>
								<arg>-target:jvm-1.7</arg>
								<arg>-deprecation</arg>
								<arg>-feature</arg>
								<arg>-unchecked</arg>
								<arg>-language:implicitConversions</arg>
								<arg>-language:postfixOps</arg>
							</args>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>io.gatling</groupId>
				<artifactId>gatling-maven-plugin</artifactId>
				<version>2.2.4</version>
				<configuration>
					<!-- 测试脚本 -->
					<simulationClass>com.ezlippi.OpenApiSimulation</simulationClass>
					<!-- 结果输出地址 -->
					<resultsFolder>gatling</resultsFolder>
					<disableCompiler>true</disableCompiler>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.10</version>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>${project.basedir}/dependencies</outputDirectory>
							<overWriteReleases>false</overWriteReleases>
							<overWriteSnapshots>false</overWriteSnapshots>
							<overWriteIfNewer>true</overWriteIfNewer>
							<includeScope>compile</includeScope>
							<includeScope>runtime</includeScope>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

在src/test/resources目录下添加logback的配置文件logback.xml,内容如下:

 <?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
			<immediateFlush>false</immediateFlush>
		</encoder>
	</appender>

	<root level="WARN">
		<appender-ref ref="CONSOLE" />
	</root>

</configuration>

然后执行mvn gatling:execute就大功告成了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

React Native开发指南

React Native开发指南

[美]艾森曼 / 黄为伟 / 人民邮电出版社 / 2016-6-1 / CNY 59.00

本书通过丰富的示例和详细的讲解,介绍了React Native这款JavaScript框架。在React Native中利用现有的JavaScript和React知识,就可以开发和部署功能完备的、真正原生的移动应用,并同时支持iOS与Android平台。除了框架本身的概念讲解之外,本书还讨论了如何使用第三方库,以及如何编写自己的Java或Objective-C的React Native扩展。一起来看看 《React Native开发指南》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试