nGrinder(http://naver.github.io/ngrinder/)是基于Grinder开源项目,但由NHN(据说是韩国最大的互联网公司)公司的nGrinder开发团队进行了重新设计和完善(所以叫做nGrinder)。nGrinder是一款非常易用,有友好简洁的用户界面和controller-agent分布式结构的强大的压力测试工具。它是由一个controller和连接它的多个agent组成,用户可以通过web界面管理和控制测试,以及查看测试报告,controller会把测试分发到一个或多个agent去执行。用户可以设置使用多个进程和线程来并发的执行该脚本,而且在同一线程中,来重复不断的执行测试脚本,来模拟很多并发用户 nGrinder的测试是基于一个python/groovy的测试脚本,用户按照一定规则编写测试脚本以后,controller会将脚本以及需要的其他文件分发到agent,用Jython执行。并在执行过程中收集运行情况、响应时间、测试目标服务器的运行情况等。并保存这些数据生成运行报告,以供以后查看. nGrinder的一大特点就是非常容易使用,安装也非常容易,可以做到开箱即用,测试新手也可以很容易就开始测试任务。当然,如果想执行一些比较复杂场景的性能测试,就需要测试人员对python有一定认识。
访问github:
https://github.com/naver/ngrinder/releases
注意:默认情况下,nGrinder用8080作为web端访问的端口。
需要配置jdk环境变量,网上找资料配置
http://tomcat.apache.org/
或者点击:
https://tomcat.apache.org/download-90.cgi
注意: !小心,永远不要将war文件放在包含像这样的文件夹的空间中 "C:\Program Files\Tomcat\webapps" 否則下載不了grinder-agent 端.
http://localhost:8080/ngrinder/login
打开nGrinder首页后,默认账号admin密码admin进入
7、简单使用一把,登录成功如下:
说明工具比较成熟,开箱即能用
下载后并且解压到相对目录
运行成功如下:
平台验证是否有agent客户端
显示客户端:
咱们用baidu页面简单做一个测试:
输入要压测的请求地址:
该页面都是中文一看就知道怎么操作:
点击输入相关内容后保存并运行:
选择:
查看相关信息:
查看详细结果:
下面就能看到文件夹,继续点击去就能看到脚本:
脚本如下:
import static net.grinder.script.Grinder.grinder
import static org.junit.Assert.*
import static org.hamcrest.Matchers.*
import net.grinder.plugin.http.HTTPRequest
import net.grinder.plugin.http.HTTPPluginControl
import net.grinder.script.GTest
import net.grinder.script.Grinder
import net.grinder.scriptengine.groovy.junit.GrinderRunner
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread
// import static net.grinder.util.GrinderUtils.* // You can use this if you're using nGrinder after 3.2.3
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith
import java.util.Date
import java.util.List
import java.util.ArrayList
import HTTPClient.Cookie
import HTTPClient.CookieModule
import HTTPClient.HTTPResponse
import HTTPClient.NVPair
/**
* A simple example using the HTTP plugin that shows the retrieval of a
* single page via HTTP.
*
* This script is automatically generated by ngrinder.
*
* @author admin
*/
@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()
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.each { CookieModule.addCookie(it, HTTPPluginControl.getThreadHTTPClientContext()) }
grinder.logger.info("before thread. init headers and cookies");
}
@Test
public void test(){
HTTPResponse result = request.GET("https://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));
}
}
}
以上简单操作,后期再次分享参数化与分布式压测;
送大家一句话:成功是努力的结果,并不是运气,平时的努力让我们拥有较高能力,失败不是缺乏能力、不是运气不好,而是缺乏努力,把其他领域的新技能、新话题、新内容纳入自己的系统中。