前言nGrinder是一个用于在多台机器上运行用jython(在JVM上运行的python)编写的测试脚本的应用程序。它的内部引擎是基于Grinder。nGrinder分别用控制器和agent将Grinder的控制台和agent包装起来,并扩展了支持多个并发测试的特性.

本文对nGrinder做一个入门了解,掌握基本使用.

测试环境准备自己搭建一套测试环境,这个架构和我们公司的服务架构基本相似.

架构: java + eureka + gateway + app

框架: springclound

eureka注册中心把所以微服务注册到eureka中,方便后续的服务调度.

gateway网关gateway是所有的服务的入口,通过路由转发到具体微服务上.

app是具体的应用app是具体的一个微服务应用,具体业务中有会有N个微服务.

代码地址

代码语言:javascript复制https://github.com/xinxi1990/backendSpring.gitnGrinder介绍下面是nGrinder的两个介绍,可自行查阅.

代码语言:javascript复制https://github.com/naver/ngrinder

http://naver.github.io/ngrinder/工具对比因为平时自己都用jmeter去做压测,所以找了一张对比图.

架构图脚本执行下载controllercontroller主要是负责展示页面、调度任务的.

代码语言:javascript复制https://github.com/naver/ngrinder/releases/tag/ngrinder-3.4.3-20190709代码语言:javascript复制java -XX:MaxPermSize=200m -jar ngrinder-controller-3.4.war --port 999下载monitormonitor用来监控发压数据

启动monitor代码语言:javascript复制sh run_monitor.sh下载agentagent用来发压

agent代码语言:javascript复制sh run_agent.shnGrinder平台nGrinder提供了一个web平台,可以创建任务,执行任务等.

访问:127.0.0.1:9999

代码语言:javascript复制账号/密码: admin/admin任务列表任务详情脚本脚本支持groovy和jpython两种语言,个人感觉groovy要好一点

groovy代码语言:javascript复制import HTTPClient.Cookie

import HTTPClient.CookieModule

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.Before

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

public static NVPair[] headers = []

public static NVPair[] params = []

public static Cookie[] cookies = []

@BeforeProcess

public static void beforeProcess() {

HTTPPluginControl.getConnectionDefaults().timeout = 6000

test = new GTest(1, "www.baidu.com")

request = new HTTPRequest()

// 设置请求头数据

List headerList = new ArrayList()

headerList.add(new NVPair("test_header", "test_header_value"))

headers = headerList.toArray()

// 设置请求参数

List paramList = new ArrayList()

paramList.add(new NVPair("paramname", "vaule"))

params = paramList.toArray()

// 设置 cookie 信息

List cookieList = new ArrayList()

cookieList.add(new Cookie("username", "testname", "www.baidu.com", "/", new Date(), false))

cookies = cookieList.toArray()

// 记录日志

grinder.logger.info("before process.")

}

@BeforeThread

public void beforeThread() {

test.record(this, "test")

// 配置延迟报告统计结果

grinder.statistics.delayReports = true

// 记录日志

grinder.logger.info("before thread.")

}

@Before

public void before() {

// 设置本次请求头

request.setHeaders(headers)

// 设置本次请求的 cookies

cookies.each { CookieModule.addCookie(it, HTTPPluginControl.getThreadHTTPClientContext()) }

// 记录日志

grinder.logger.info("before thread. init headers and cookies")

}

@Test

public void test() {

HTTPResponse result = request.GET("http://www.baidu.com", params)

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))

}

}

}报告在报告中可以看到tps、曲线图等数据.

svn内置了svn地址,可以在idea工具中直接导入

idea开发脚本脚本如下,这个脚本是fork了一个韩国那边同学的脚本改量的.

脚本中使用junit框架,导入了grinder依赖,脚本开发难度一般.

代码语言:javascript复制https://github.com/xinxi1990/nGrinderScript.git结语nGrinder和jmeter在使用上有很大差别,nGrinder的脚本适用有脚本开发经验的.jmter支持多协议、入手比较容易.

参考nGrinder 简易使用教程

代码语言:javascript复制https://www.cnblogs.com/jwentest/p/7136727.htmlnGrinder - Groovy 脚本指南

代码语言:javascript复制https://testerhome.com/topics/12173性能测试工具-Ngrinder使用-添加一个简单脚本(groovy)

代码语言:javascript复制https://www.cnblogs.com/xiaowei89426/p/9356694.htmlhttps://moyadu.oschina.io/diligentpractice/books/chapter-Grinder/nGrinderdevelop/

Copyright © 2088 羽毛球世界杯_世界女排世界杯 - umiloo.com All Rights Reserved.
友情链接