高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

ngrinder post请求脚本demo

目录
  1. 1. post请求脚本

ngrinder脚本支持Jython和Groovy语言,这里介绍
Groovy HTTP Post请求脚本编写方式。


post请求脚本

相关jar包

脚中包括事物定义,参数化等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
package postdemo

import static net.grinder.script.Grinder.grinder

import java.util.List;

import net.grinder.plugin.http.HTTPRequest
import net.grinder.plugin.http.HTTPPluginControl
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 HTTPClient.Cookie
import HTTPClient.CookieModule
import HTTPClient.HTTPResponse
import HTTPClient.NVPair
import static org.junit.Assert.*
import com.alibaba.fastjson.JSONObject;

@RunWith(GrinderRunner)
class PostDemo {
public static GTest test1
public static GTest test2
public static HTTPRequest request
public static NVPair[] headers = []
public static Cookie[] cookies = []


public static List<String> buyerlineList //存放参数文件记录
public static def buyerRowNumber //参数行

/**
* @BeforeProcess在每个进程启动前执行该方法
*/

@BeforeProcess
public static void beforeProcess() {
//设置请求响应超时时间(ms),超过则抛出异常
HTTPPluginControl.getConnectionDefaults().timeout = 6000

//1代表执行顺序,中文代表事物名称
test1 = new GTest(1, "第一个事物")
//test2 = new GTest(2, "第二个事务")

request = new HTTPRequest()

//读取参数文件
buyerlineList = new File("./resources/buyertest.txt").readLines()

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

}

/**
* @BeforeThread 在每个线程启动前执行该方法
*/

@BeforeThread
public void beforeThread() {
//注册事件,启动test1与下面的方法名保持一致
test1.record(this, "test1")

grinder.statistics.delayReports=true;
grinder.logger.info("before thread.");
}

/**
* @Before在每次@test方法前执行
*/

@Before
public void before() {
//设置header属性
headers = [
new NVPair("Content-type","application/x-www-form-urlencoded;"),
new NVPair("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT)"),
new NVPair("Accept","*/*")] as NVPair[];
request.setHeaders(headers)

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

/*参数化数据,定义参数化迭代方式:此处为随机方式*/
buyerRowNumber = new Random().nextInt(buyerlineList.size())
String buyer = buyerlineList.get(buyerRowNumber);
//设置请求的入参--json格式
String testdata="{\"buyer\":\""+buyer+"\",\"preTotalAmt\":2000,\"afterTotalAmt\":2000}";
request.setData(testdata.getBytes("utf-8"));

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

@Test
public void test1(){

try{
//发送请求
HTTPResponse result = request.POST("http://xxxx/aa/bb/cc.html");
//获取返回报文
String respCode = JSONObject.parseObject(result.getText()).get("responseCode");

if (respCode.equals("0000")) {

println "===返回==========成功"+result.getText();
assertTrue("成功<<<",respCode.equals("0000"))
}else {
grinder.logger.error("===失败=========="+result.getText())
assertFalse("失败>>>",!respCode.equals("0000"))
}
} catch (Exception ex) {
assertFalse("失败>>>"+ex,false)
grinder.logger.error("===异常======"+ex)
}
}



}

运行的时候在vm中加入设置:
-javaagent:E:\sn\PTlib\PTlib\grinder-dcr-agent-3.9.1.jar
Alt text