我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何使用Gateling进行性能测试

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何使用Gateling进行性能测试

这篇文章主要讲解了“如何使用Gateling进行性能测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Gateling进行性能测试”吧!

Gatling是什么?

Gatling 是一个用 Scala 编写的负载测试工具,功能强大。它完全支持 HTTP 协议,也可以用来测试 JDBC 连接和 JMS。使用 Gatling 时,需要用 Scala dsl 代码定义测试场景。值得一提的是,Gatling 生成的 HTML 负载报告内容全面,并且提供了 Gradle、Maven 和 Jenkins 插件方便集成。

构建示例应用

开始测试前,需要准备测试应用。示例程序非常简单,源代码可以在 GitHub 上找到(github.com/piomin/sample-gatling-load-tests)。它提供了一组 CRUD 操作的 RESTful HTTP API,在可以数据库中新增和搜索 Entity。数据库用 Postgres,基于 Spring Boot 构建,使用Spring Data 实现持久层。

plugins {
   id 'org.springframework.boot' version '1.5.9.RELEASE'
}
dependencies {
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
compile group: 'org.postgresql', name: 'postgresql', version: '42.1.4'
testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test'
}

Person entity映射到 person 表。

@Entity
@SequenceGenerator(name = "seq_person", initialValue = 1, allocationSize = 1)
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_person")
private Long id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "birth_date")
private Date birthDate;
@Embedded
private Address address;
// ...
}

数据库连接设置和 Hibernate 属性配置在 application.yml 中。

spring:
 application:
   name: gatling-service
 datasource:
   url: jdbc:postgresql://192.168.99.100:5432/gatling
   username: gatling
   password: gatling123
 jpa:
   properties:
     hibernate:
       hbm2ddl:
         auto: update
server:
 port: 8090

正如之前提到的,示例程序提供了在数据库中添加、搜索 person 的 API,下面是 Spring REST controller 实现。

@RestController
@RequestMapping("/persons")
public class PersonsController {
private static final Logger LOGGER = LoggerFactory.getLogger(PersonsController.class);
@Autowired
PersonsRepository repository;
@GetMapping function(){   //外汇跟单www.gendan5.com
public List
<Person> findAll() {
 return (List
 <Person>) repository.findAll();
   }
   @PostMapping
   public Person add(@RequestBody Person person) {
   Person p = repository.save(person);
   LOGGER.info("add: {}", p.toString());
   return p;
   }
   @GetMapping("/{id}")
   public Person findById(@PathVariable("id") Long id) {
   LOGGER.info("findById: id={}", id);
   return repository.findOne(id);
   }
   }

运行数据库

开发示例程序的下一步是运行数据库,最合适的方式是 Docker image。下面的 Docker 命令会启动一个 Postgres container,完成 gatling 用户和数据库初始化。

docker run -d --name postgres -e POSTGRES_DB=gatling -e POSTGRES_USER=gatling -e POSTGRES_PASSWORD=gatling123 -p 5432:5432 postgres

设计测试场景

每个 Gatling test suite 都要继承 Simulation 类,使用 Gatling Scala DSL 声明一系列测试场景。我们的目标是启动30个客户端,同时发送1000次请求。首先,客户端通过 POST /persons 方法向数据库添加 person。然后,调用 GET /persons/{id}搜索 person。总共向应用程序发送6万次请求:3万次 POST,3万次 GET。下面代码展示了测试场景,非常简单。在 class="lazy" data-src/test/scala 目录下可以找到 ApiGatlingSimulationTest。

class ApiGatlingSimulationTest extends Simulation {
 val scn = scenario("AddAndFindPersons").repeat(1000, "n") {
       exec(
         http("AddPerson-API")
           .post("http://localhost:8090/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:8090/persons/${n}")
           .check(status.is(200))
       )
 }
 setUp(scn.inject(atOnceUsers(30))).maxDuration(FiniteDuration.apply(10, "minutes"))
}

为了在项目中启用 Gatling 框架,还需要在 Gradle 构建文件中添加依赖。

testCompile group: 'io.gatling.highcharts', name: 'gatling-charts-highcharts', version: '2.3.0'

运行测试

通过一些 Gradle 插件可以在项目构建期间运行测试。但是,也可用 io.gatling.app.Gatling 类定义简单的 gradle 任务。

task loadTest(type: JavaExec) {
  dependsOn testClasses
  description = "Load Test With Gatling"
  group = "Load Test"
  classpath = sourceSets.test.runtimeClasspath
  jvmArgs = [
       "-Dgatling.core.directory.binaries=${sourceSets.test.output.classesDir.toString()}"
  ]
  main = "io.gatling.app.Gatling"
  args = [
          "--simulation", "pl.piomin.services.gatling.ApiGatlingSimulationTest",
          "--results-folder", "${buildDir}/gatling-results",
          "--binaries-folder", sourceSets.test.output.classesDir.toString(),
          "--bodies-folder", sourceSets.test.resources.class="lazy" data-srcDirs.toList().first().toString() + "/gatling/bodies",
  ]
}

使用 gradle loadTest 执行定义好的 Gradle 任务。当然,运行测试之前需要启动应用程序,在 IDE 中启动 main class pl.piomin.services.gatling.ApiApplication 或者执行 java -jar build/libs/sample-load-test-gatling.jar 命令。

测试报告

测试执行完毕会以文本形式打印报告。

================================================================================
---- Global Information --------------------------------------------------------
> request count                                      60000 (OK=60000  KO=0     )
> min response time                                      2 (OK=2      KO=-     )
> max response time                                   1338 (OK=1338   KO=-     )
> mean response time                                    80 (OK=80     KO=-     )
> std deviation                                        106 (OK=106    KO=-     )
> response time 50th percentile                         50 (OK=50     KO=-     )
> response time 75th percentile                         93 (OK=93     KO=-     )
> response time 95th percentile                        253 (OK=253    KO=-     )
> response time 99th percentile                        564 (OK=564    KO=-     )
> mean requests/sec                                319.149 (OK=319.149 KO=-     )
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                         59818 (100%) > 800 ms < t < 1200 ms                                 166 (  0%) > t > 1200 ms                                           16 (  0%)
> failed                                                 0 (  0%)
================================================================================

但是,Gatling 最擅长的是报告图表。生成的 HTML 报告在 build/gatling-results 目录下。第一个报告展示了全局信息,包含请求总数和最大响应时间(百分比)。例如,95%的 GetPerson API 请求的最大响应时间为206ms。

感谢各位的阅读,以上就是“如何使用Gateling进行性能测试”的内容了,经过本文的学习后,相信大家对如何使用Gateling进行性能测试这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何使用Gateling进行性能测试

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何使用Gateling进行性能测试

这篇文章主要讲解了“如何使用Gateling进行性能测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用Gateling进行性能测试”吧!Gatling是什么?Gatling 是一个用
2023-06-02

使用traceview进行Android性能测试

一、 TraceView工具简述Traceview是android平台配备的一个很好的性能分析工具。它可以通过图形界面的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。二、 TraceView工具使用方法TraceView有
2022-06-06

使用Apache ab进行http性能测试

Mac自带了Apache环境 打开“终端(terminal)”,输入 sudo apachectl -v,(可能需要输入机器秘密)。如下显示Apache的版本接着输入 sudo apachectl start,这样Apache就启动了。打开
2022-06-04

如何进行H5前端性能测试

如何进行H5前端性能测试,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。说到H5测试,对于做WEB测试的同学来说再熟悉不过了,它包括页H5功能测试,前端性能测试,
2023-06-05

如何使用Go语言进行高效的性能测试

go 语言提供了高效的性能测试工具,包括内置的 testing 包,用于编写基准测试。基准测试使用 benchmark 函数定义,并通过 run 函数运行。例如,可以编写一个基准测试来测量 fib 函数在不同输入下的执行时间。通过性能测试可
如何使用Go语言进行高效的性能测试
2024-05-07

如何进行C++代码的性能测试?

如何进行C++代码的性能测试?概述:在软件开发过程中,性能测试是一项非常重要的任务。对于C++代码来说,性能测试可以帮助开发人员了解代码的执行效率,找到性能瓶颈,并对其进行优化。本文将介绍一些常用的C++代码性能测试方法和工具,帮助开发人员
如何进行C++代码的性能测试?
2023-11-02

如何使用Go语言对大型应用进行性能测试

如何使用 go 语言对大型应用进行性能测试?安装 beego 和 bombardier 工具。创建一个使用 beego 框架的 web 应用。创建一个使用 bombardier 生成的负载生成器脚本。运行性能测试并分析结果,包括请求数、成功
如何使用Go语言对大型应用进行性能测试
2024-05-08

Centos8下怎么使用Sysbench进行性能测试

本篇内容介绍了“Centos8下怎么使用Sysbench进行性能测试”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SysBench 是一个基
2023-06-27

Golang 技术性能优化中如何进行性能测试?

进行性能测试对于优化 go 应用程序至关重要,可以通过使用各种工具,例如 bencher、pprof、httperf 和 wrk,来评估应用程序在特定负载下的性能,包括响应时间、吞吐量和资源利用率等指标。实战案例中演示了如何使用 wrk 测
Golang 技术性能优化中如何进行性能测试?
2024-05-11

如何使用Go语言对分布式应用进行性能测试

对于分布式应用程序的性能测试,go 提供了 vegeta 和 locust 两个框架。使用 vegeta,可创建自定义测试脚本并配置攻击选项,执行并发请求并生成详细报告。使用 locust 则可通过更友好的界面创建复杂工作负载,并通过 we
如何使用Go语言对分布式应用进行性能测试
2024-05-08

Java使用JMH进行基准性能测试分析

本篇内容主要讲解“Java使用JMH进行基准性能测试分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java使用JMH进行基准性能测试分析”吧!一、前言在日常开发工作当中,开发人员可能有这些困
2023-06-25

如何对 C++ 函数性能进行基准测试?

为 c++++ 函数进行基准测试,可采取以下步骤:使用计时工具(如 std::chrono 库)测量执行时间。编写基准测试函数以执行代码并返回执行时间。利用基准测试库获取高级功能,如统计收集和比较。如何对 C++ 函数性能进行基准测试基准
如何对 C++ 函数性能进行基准测试?
2024-04-19

如何在Python中进行代码性能优化和性能测试

如何在Python中进行代码性能优化和性能测试引言:当我们编写代码时,经常会面临代码执行速度慢的问题。对于一个复杂的程序来说,效率的提升可以带来明显的性能提升。本文将介绍如何在Python中进行代码性能优化和性能测试,并给出具体的代码示例。
2023-10-22

如何使用 PHP 进行单元测试?

单元测试检查软件的最小构成部分(如函数、方法),php 可通过 phpunit 框架进行单元测试。首先安装 phpunit,然后创建测试类(扩展自 testcase),再编写以 "test" 开头的测试方法,使用 assertequals
如何使用 PHP 进行单元测试?
2024-04-19

如何用yum的方式安装PHP7并进行性能测试

今天小编给大家分享一下如何用yum的方式安装PHP7并进行性能测试的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。PHP7与H
2023-06-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录