nGrinder中快速編寫groovy指令碼04-傳送POST請求
POST請求分類:
1、根據是否修改程式碼,分為兩種方式:
一種是在UI介面新增後自動生成指令碼,一種是直接在指令碼中新增
2、根據請求引數的不同,主要可以分為兩種:
param為key value格式
body為json格式
一、透過UI方式傳送POST請求–key/value引數
透過 UI 設定:指令碼 -> 新建指令碼 -> 顯示高階配置
當選擇了請求方法為POST後,在高階配置中預設會在headers中顯示Content-Type為x-www-form-urlencoded,同時,新增key/value格式的params:
生成程式碼如下(由於篇幅限制,去掉import部分):
@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() {
HTTPPluginControl.getConnectionDefaults().timeout = 6000
test = new GTest(1, ")
request = new HTTPRequest()
// Set header datas
List<NVPair> headerList = new ArrayList<NVPair>()
headerList.add(new NVPair("Content-Type", "application/x-www-form-urlencoded"))
headerList.add(new NVPair("Connection", "keep-alive"))
headers = headerList.toArray()
// Set param datas
List<NVPair> paramList = new ArrayList<NVPair>()
paramList.add(new NVPair("name", "jing"))
paramList.add(new NVPair("age", "18"))
paramList.add(new NVPair("desc", "beauty"))
params = paramList.toArray()
// Set cookie datas
List<Cookie> cookieList = new ArrayList<Cookie>()
cookieList.add(new Cookie("token", "xxxxxxxx", ", "", new Date(32503647599000L), 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.each { CookieModule.addCookie(it, HTTPPluginControl.getThreadHTTPClientContext()) }
grinder.logger.info("before thread. init headers and cookies");
}
@Test
public void test(){
HTTPResponse result = request.POST("https://, params)
assertThat(result.statusCode, is(200))
assertThat(result.getText(), containsString("jing"))
}
}
從以上程式碼可以看出,這種方式跟之前使用GET方式新增引數的效果一樣,都是把引數新增在@BeforeProcess,不同的只是在@Test中使用的是request.POST方法。
二、透過UI方式傳送POST請求–json
透過 UI 設定:指令碼 -> 新建指令碼 -> 顯示高階配置
當選擇了請求方法為POST後,在高階配置中的headers中選擇Content-Type為application/json,同時,新增json字串:
生成程式碼如下(由於篇幅限制,去掉import部分):
@RunWith(GrinderRunner)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class TestRunner {
public static GTest test
public static HTTPRequest request
public static NVPair[] headers = []
public static String body = "{"name":"jing","comment":"hello"}"
public static Cookie[] cookies = []
@BeforeProcess
public static void beforeProcess() {
HTTPPluginControl.getConnectionDefaults().timeout = 6000
test = new GTest(1, ")
request = new HTTPRequest()
// Set header datas
List<NVPair> headerList = new ArrayList<NVPair>()
headerList.add(new NVPair("Content-Type", "application/json"))
headers = headerList.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.each { CookieModule.addCookie(it, HTTPPluginControl.getThreadHTTPClientContext()) }
grinder.logger.info("before thread. init headers and cookies");
}
@Test
public void test(){
HTTPResponse result = request.POST("https://, body.getBytes())
assertThat(result.statusCode, is(200))
}
}
從以上程式碼可以看出,這種方式是在靜態變數中定義了body的內容,在@BeforeProcess中新增json請求頭,並在@Test中的request.POST方法中加入了body引數。
關鍵程式碼如下:
public static String body = "{"name":"jing","comment":"hello"}"
headerList.add(new NVPair("Content-Type", "application/json"))
HTTPResponse result = request.POST("https://, body.getBytes())
三、直接在指令碼中為POST請求新增json格式的body
使用UI方式新增的json字串預設是在建立靜態變數body的同時新增的;
直接修改指令碼的話,就比較靈活,可以在類的任意位置新增,然後在POST請求中呼叫
(但是要注意變數作用域的問題)
// 定義json字串
String jsonStr = '{"name": "jing"}';
//在@Test的POST方法中使用json字串,同時新增header
request.POST("https://, jsonStr.getBytes(), [
new NVPair("Content-Type", "application/json"
] as NVPair[])
其中,需要注意的是:
POST(java.lang.String uri, byte[] data)
此方法中接收body引數時需要把字串轉成位元組陣列。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69942496/viewspace-2655106/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- nGrinder中快速編寫groovy指令碼03-在GET請求中傳送引數指令碼
- nGrinder中快速編寫groovy指令碼01-指令碼結構指令碼
- Postman傳送Post請求Postman
- Java傳送Post請求Java
- C# 傳送POST請求C#
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- java傳送GET和post請求Java
- python傳送HTTP POST請求PythonHTTP
- post 封裝Map 傳送請求封裝
- PHP傳送POST和GET請求PHP
- 用Fiddler 傳送post請求
- 使用C#傳送POST請求C#
- shell指令碼:批次傳送curl請求指令碼
- linux用curl傳送post請求Linux
- 以Raw的方式傳送POST請求
- httprequest- post- get -傳送請求HTTP
- php 利用socket傳送GET,POST請求PHP
- java傳送http的get、post請求JavaHTTP
- 使用Postman傳送POST請求的指南Postman
- java傳送post請求 ,請求資料放到body裡Java
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?PHPHTTP
- scrapy-redis原始碼解讀之傳送POST請求Redis原始碼
- postman(二):使用postman傳送get or post請求Postman
- curl 傳送 POST 請求的四種方式
- file_get_contents傳送post請求
- 【Postman】6 Postman 傳送post請求-Json格式PostmanJSON
- cURL實現傳送Get和Post請求(PHP)PHP
- oracle使用utl_http包傳送post請求OracleHTTP
- jmeter之傳送json資料的post請求JMeterJSON
- Go語言開發傳送Get和Post請求Go
- 利用post請求傳送內容進行爬蟲爬蟲
- angularjs中$http模組傳送post請求request payload轉form dataAngularJSHTTPORM
- axios傳送post請求,request.getParamter接收不到iOS
- 關於用URL類傳送POST請求的問題?
- AJAX的get和post請求原生編寫方法
- Vue中通過Axios向SpringBoot傳送get和post請求VueiOSSpring Boot
- 『動善時』JMeter基礎 — 14、使用JMeter傳送Post請求JMeter
- python+pytest介面自動化傳送post請求Python