ngrinder解读goovy最基本的GET请求脚本

xiaoshengyige 2019-06-29

此文搬运自本人csdn博客https://blog.csdn.net/lijing7...

上一篇文章中讲了ngrinder怎么快速发送一个GET请求,在此详细解读一下其中的脚本。
(前提是你已经了解了groovy的基本代码结构,如果还不了解的先看这里--搭建 nGrinder 性能测试平台 并快速使用

一、自动生成GET请求脚本

1、配置 Create a script

在ngrinder管理台主页,点击script-->Create a script,并填写脚本名称和请求的url,如下所示:

ngrinder解读goovy最基本的GET请求脚本

点击 Create 按钮,nGrinder会自动生成对应的脚本结构,如果没有参数需要设置的话,可以直接运行了。

二、详细解决GET请求脚本

ngrinder自动生成的脚本如下所示:

解析见代码中的注释

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 org.junit.FixMethodOrder
import org.junit.runners.MethodSorters

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)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
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() {
        // 设置请求响应超时时间(ms),超过则抛出异常
        HTTPPluginControl.getConnectionDefaults().timeout = 6000
        
        // 创建GTest对象,第一个参数1代表有多个请求/事务时的执行顺序ID
        // 第二个参数是请求/事务的名称,会显示在summary结果中
        // 有多个请求/事务时,要创建多个GTest对象
        test = new GTest(1, "www.baidu.com")  
        request = new HTTPRequest()
        grinder.logger.info("before process.");
    }

    @BeforeThread
    public void beforeThread() {
        // 注册事件,启动test,第二个参数要与@Test注解的方法名保持一致
        // 有多个请求/事务时,要注册多个事件
        test.record(this, "test")
        grinder.statistics.delayReports=true;
        grinder.logger.info("before thread.");
    }

    @Before
    public void before() {
        // 在这里可以添加headers属性和cookies
        request.setHeaders(headers)
        cookies.each { CookieModule.addCookie(it, HTTPPluginControl.getThreadHTTPClientContext()) }
        grinder.logger.info("before thread. init headers and cookies");
    }

    @Test
    public void test(){
        // 发送GET请求
        HTTPResponse result = request.GET("https://www.baidu.com", params)
        // 断言HTTP请求状态码
        assertThat(result.statusCode, is(200))
    }
}