基于Groovy搭建Ngrinder脚本调试环境

介绍

最近公司搭建了一套压力测试平台,引用的是开源的项目 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 那样有可视化界面,而是完全用代码来实现,还好的是它提供了很多的工具类,不用重复造轮子。

原文地址:https://www.cnblogs.com/unknows/p/11771756.html

时间: 2024-11-07 17:32:29

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

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

ubuntu1604系统下搭配ckermit和dnw基于RAM的裸机程序调试环境 系统:  ubuntu16.04 裸板: 飞凌公司OK6410开发板 目标:搭建基于ubuntu1604系统和基于RAM的裸机程序开发环境 1.安装配置ckermit 在ubuntu1604下一般做裸板开发时都是使用ckermit作为远程通讯终端,下面我们就开始讲解下其安装与配置. 1.1.安装ckermit 在ubuntu系统下安装ckermit,使用 sudo  apt-get  install  ckermi

使用 VMware + win10 + VirtualKD + windbg 从零搭建双机内核调试环境

原总结debug调试kernel debugwindbgbcdeditvirtualKD转储双机调试双机内核调试 前言 当我们没有两台物理机时,又想做双机内核调试怎么办?当然是装虚拟机啦!本文总结了使用 VMware15.5 + win10 + virtualkd + windbg 搭建双机内核调试环境. 安装环境 VMware 版本: 15.5 pro .可以到 VMware 官网下载地址 下载最新版本. 我的物理主机系统:win10 1909.其它版本的 windows 也可以,VMware

通过虚拟机搭建windows内核调试环境

今天我们来记录下通过虚拟机搭建windows内核调试环境. 这里是官方文档. 1.在虚拟机设置中为目标计算机创建命名管道 2.在目标计算机中开启调试 3.在windbg中输入目标计算机(虚拟机)的地址信息 4.在windbg菜单中点击[Debug|Break]开始内核调试.

Eclipse for php + Xdebug搭建PHP的调试环境

Xdebug安装教程 下载Xdebug 首先我们需要下载Xdebug,务必根据安装的PHP版本,选择合适的Xdebug版本,由于我是在Windows环境下安装PHP的,所以选择下载Windows版本的Xdebug2.1.0(5.3 VC6 (32 bit)),下载下来的Xdebug文件为php_xdebug-2.1.0-5.3-vc6.dll,这是由于Xdebug是作为PHP模块的形式被安装配置与使用的. Xdebug安装提示:如果你不清楚安装的PHP版本,你可以通过phpinfo()函数参看,

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

这几天在学Android的native层逆向.在按照教程用ida搭建动态调试环境时,第一步是把android_server 放到手机里执行,但是在手机里可以,在genymotion模拟器上就提示 not executable :32-bit ELF file ,百度谷歌都没找到答案,然后试了试Android studio自带的模拟器 ,ABI选了x86  x86_64都不行,最后发现需要选择arm的ABI才可以....但是运行比较卡,因为我的电脑是x86的. 我就发现了这一个解决办法,不知道是不

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

作者:张华  发表于:2016-02-06版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 使用qemu结合eclipse或者DDD等gdb的图形前端,跟踪协议栈或者文件系统内存管理等都会非常方便.就是与硬件驱动相关的跟踪可能差点. 编译内核 下载Linux Kernel源码,并编译生成压缩的kernel镜像(/bak/linux/linux-2.6/arch/x86_64/boot/bzIma

基于VSCode的PYTHON 构建调试环境搭建指南

1.安装python解释器,配置好path变量. 下载网址:https://www.python.org/downloads/release/python-374/ 安装python的时候,建议将python添加到path环境变量的复选框勾上,并且使用自定义安装,因为可以自定义安装目录,我是安装在C:\Python37中的 3.下载并安装好vscode编辑器(安装时,将复选框全部勾上) 下载地址:https://code.visualstudio.com/ 4.在vscode中安装python插

基于rollup搭建JavaScript类库开发环境

平时开发过程中,积累了不少的经验和技巧都应用到项目中,而下次用到的时候却又开始到处翻. 有时也想自己搭建个类库或工具包什么的来积累自己的经验技巧,又没有专门的时间去搭建各种 环境,像rollup或者webpack这样的打包工具.ES6转码工具Babel.Eslint.Jest测试工具等等. 这里就特意做了一个起始项目,将rollup.ES6转码.Eslint.Jest都集成起来,平时用的时候只需要 积累模块和方法即可. 本文参考:基于Webpack和ES6打造Javascript类库 http:

Ubuntu下基于u-boot搭建qemu的vexpress环境

上一篇文章搭建了基于zImage的qemu环境,基本的环境配置已经可以使用,为了还原真正的嵌入式ARM启动场景,搭建基于u-boot的qemu环境. 1. u-boot下载及编译 1.1 下载地址  https://ftp.denx.de/pub/u-boot/,本文使用的版本为2019.10 1.2 下载后解压进行配置 原文地址:https://www.cnblogs.com/edver/p/12117349.html