介绍

最近公司搭建了一套压力测试平台,引用的是开源的项目 Ngrinder,做了二次开发,在脚本管理方面,去掉官方的SVN,引用的是Git,其他就是做了熔断处理等。

对技术一向充满热情的我,必须先来拥抱下传说中的压测平台。

一、开发脚本环境配置项:

安装JDK1.7+,Git,Maven

二、新建一个maven项目


三、创建一个groovy脚本TestRunner.groovy,添加以下内容

这个脚本写的就是,向服务端发送Json 格式请求,比较简单,未涉及到上下文参数化,混合场景配置比例,方法介绍等,到时需要再写2篇专题

import HTTPClient.HTTPResponse
import HTTPClient.NVPair
import net.grinder.plugin.http.HTTPPluginControl
import net.grinder.plugin.http.HTTPRequest
import net.grinder.script.GTest
import net.grinder.scriptengine.groovy.junit.GrinderRunner
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread
import org.junit.Test
import org.junit.runner.RunWith
import static net.grinder.script.Grinder.grinder
import static org.hamcrest.Matchers.is
import static org.junit.Assert.assertThat
// 每个测试类加这注解
@RunWith(GrinderRunner)
class TestRunner{
public static GTest test
public static HTTPRequest request
// 在每个进程启动前执行
@BeforeProcess
static void beforeProcess() {
HTTPPluginControl.getConnectionDefaults().timeout = 8000
test = new GTest(1, "查询贷款数量")
request = new HTTPRequest()
grinder.logger.info("before process.");
}
// 在每个线程执行前执行
@BeforeThread
void beforeThread() {
//监听目标方法,如果打标不会生成该方法的报告
test.record(this,"loanCountTest");
// 延时生成报告
grinder.statistics.delayReports=true;
grinder.logger.info("before thread.");
}
private NVPair[] headers() {
return [
new NVPair("Content-type", "application/json;charset=UTF-8")
];
}
@Test
void loanCountTest(){
def json = "{\"uid\": \"1_1154249\"}";
HTTPResponse result = request.POST("http://hdai.com/query-loaning-count",json.getBytes(), headers());
grinder.logger.info(result.getText());
if (result.statusCode == 301 || result.statusCode == 302) {
grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", result.statusCode);
} else {
assertThat("判断响应结果:",result.statusCode, is(200));
}
}
}

四、拷贝以下内容到新建的 pom.xml 

<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>ngrinder</groupId>
<artifactId>loan-xx-perf</artifactId>
<version>0.0.1</version> <properties>
<ngrinder.version>3.4</ngrinder.version>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <repositories>
<repository>
<id>ngrinder.maven.repo</id>
<url>https://github.com/naver/ngrinder/raw/ngrinder.maven.repo/releases</url>
</repository>
<repository>
<id>ymm-central-cache</id>
<url>http://maven.aliyun.com/nexus/service/local/repositories/central/content/</url>
</repository>
<repository>
<id>aliyun</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.ngrinder</groupId>
<artifactId>ngrinder-groovy</artifactId>
<version>${ngrinder.version}</version>
<scope>provided</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>
org.eclipse.jdt.groovy.core.groovyNature
</projectnature>
<projectnature>
org.eclipse.m2e.core.maven2Nature
</projectnature>
</additionalProjectnatures>
</configuration>
</plugin>
</plugins>
</build>
</project>

五、完成后,目录机构如下

 resources资源目录下,不能为空,否则上传到 试压机跑压测会报错

六、运行报错处理

添加之后就可以运行成功

七、注意:

  1. 依赖jar 拉取很慢,有可能会出现超时,多尝试下
  2. 测试脚本必须是Ngrinder标准的Groovy Maven项目,所以 resources资源目录下,不能为空,我这里随便搞了个文件,服务端会校验目录结构
  3. 目录结构,maven引用等,可以参考Ngrinder官方的例子:https://github.com/naver/ngrinder/wiki/Groovy-Maven-Structure

 八、使用感受:

从零开始搭建了一套本地的 脚本开发环境,我觉得还是特别的快,创建maven 自动引入依赖; 语言开发方面只要熟悉java,上手Groovy 很快就能编写脚本; 编写脚本不像Jmeter 或 loadrunner 那样有可视化界面,而是完全用代码来实现,还好的是它提供了很多的工具类,不用重复造轮子。

基于Groovy搭建Ngrinder脚本调试环境的更多相关文章

  1. 基于Groovy编写Ngrinder脚本常用方法

    1.生成随机字符串(import org.apache.commons.lang.RandomStringUtils) 数字:RandomStringUtils.randomNumeric(lengt ...

  2. ok6410[002] ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境

    ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境 系统:  ubuntu16.04 裸板: 飞凌公司OK6410开发板 目标:搭建基于ubuntu1604系统和基于RA ...

  3. 基于Eclipse搭建Hadoop源码环境

    Hadoop使用ant+ivy组织工程,无法直接导入Eclipse中.本文将介绍如何基于Eclipse搭建Hadoop源码环境. 准备工作 本文使用的操作系统为CentOS.需要的软件版本:hadoo ...

  4. Xcode搭建真机调试环境 图文实例

    本文介绍的Xcode搭建真机调试环境 图文实例,图文并茂,使我们学习起来更方便些,我们先来看内容. AD: 2013云计算架构师峰会超低价抢票中 Xcode搭建真机调试环境 是本文要介绍的内容,不多说 ...

  5. vscode加MinGw三步搭建c/c++调试环境

    vscode加MinGw三步搭建c/c++调试环境 step1:安装vscode.MinGw 1.1 vscod常规安装:https://code.visualstudio.com/ 1.2 MinG ...

  6. 通过模拟器和ida搭建Android动态调试环境的问题

    这几天在学Android的native层逆向.在按照教程用ida搭建动态调试环境时,第一步是把android_server 放到手机里执行,但是在手机里可以,在genymotion模拟器上就提示 no ...

  7. 基于Visual Studio Code搭建Golang开发调试环境【非转载】

    由于对Docker+kubernetes的使用及持续关注,要理解这个平台的原理,势必需要对golang有一定的理解,基于此开始利用业余时间学习go,基础语法看完之后,搭建开发环境肯定是第一步,虽然能g ...

  8. 搭建基于qemu + eclipse的kernel调试环境(by quqi99)

    作者:张华  发表于:2016-02-06版权声明:能够随意转载.转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 使用q ...

  9. 微信开发 -- 搭建基于ngrok的微信本地调试环境

    第一步,安装ngrok客户端 (1)首先先到官网下载个客户端 http://natapp.cn/,选择适合的客户端类型,本人选择的是windows版 (2)下载后,解压,可以看到如下目录: 第二步,开 ...

随机推荐

  1. Introduction to ES6上课笔记

    课程链接:https://scrimba.com/g/gintrotoes6 这个网站有几个热门的前端技术栈的免费课程,上课体验除了英语渣只能看代码理解听老师讲的一知半解之外,是极佳的学编程的网站了. ...

  2. 并发编程之多线程(Java)

    一.线程与进程区别 每个正在系统上运行的程序都是一个进程.每个进程包含一到多个线程.线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以线程基本上是 ...

  3. Linux上编译安装PHP

    这篇文章主要介绍了关于Linux上编译安装PHP,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 之前在服务器上编译安装了PHP运行环境,但是安装完过了一段时间就差不多忘记了,只是零零星 ...

  4. JavaScript 类型 检测

    前言 ECMAScript中有5种数据类型,分别为Number,Boolean,Null,Undifined和String,以及一种复杂的数据类型Object(由名值对组成,是这门语言所有对象的基础类 ...

  5. 主动降噪技术(ANC)的前生今世–行业分析

    一 原始玩家 1978年,创始人Amar G. Bose博士在从欧洲飞往波士顿的飞机上,发现飞机引擎的噪音扫净了他戴耳机欣赏音乐的兴致.这激发了他在BOSE公司进行一项消噪科技的研究.弹指之间,十年过 ...

  6. Bumblebee服务网关之统一请求验证

    对于微服务网关来说,统一请求验证是一个比较重要和常用的功能,通过网关验证后台服务就无须关注请求验证:对于多语言平台的服务而言制定验证方式和变更验证配置都是一件比较繁琐和工作量大的事情.Bumblebe ...

  7. ELK 学习笔记之 elasticsearch Bulk操作

    Bulk操作: Bulk操作用于批量插入数据: 请求体格式: 编辑一个文件:(插入2个新的文档) curl -XPOST 'http://192.168.1.151:9200/library/book ...

  8. Windows10搭建开发环境----MySQL8.0.17安装

    Windows10 MySQL8解压版最新最全图文安装配置 一.官网下载解压版安装包 MySQL官网 1. 进入官网点击downloads,如图: 2. 翻到网页底部,点击如图位置: 3. 点击MyS ...

  9. 软件开发工具(第9章:使用Eclipse进行C/C++开发)

    一.安装MinGW MinGW是指用来生成可执行文件的编译环境,它是开发C/C++项目 的工具集.为了能够使用Eclipse CDT编译且运行C和C++程序,必须 要安装一个C/C++编译器. 下载: ...

  10. Angular: If ngModel is used within a form tag, either the name attribute must be set or the form control must be defined as ‘standalone’ in ngModelOptions.

    在Angular中,动态生成的Html控件,如果没有name属性并且在ts中要操作Model的内容.就会引发如题的错误. 解决方案两个: 加上name的属性 设置ngModelOptions   [n ...