二、傳送請求,獲取響應資料
介面測試的第一步就是需要傳送介面請求,獲取到響應資料
因為每個請求內部實現都是一樣的,不同的只是請求引數、地址等資訊,所以為了可複用,需要先封裝請求方式,即HTTP的常用請求GET、POST,然後不同的介面通過呼叫該方法獲取到響應資料
分析請求內容如下:
- 一個請求包括頭部,請求URL,請求引數等
- 固定的頭部可寫在配置檔案中(如ContentType等),可變的頭部通過引數傳遞(如token等)
- 請求URL包括域名和地址,每個請求的地址是不確定的,所以會通過引數傳遞
但是域名只有幾個,包括開發環境,測試環境,預發環境和生產環境,所以可寫在配置檔案中
前提條件:
先在pom檔案中新增依賴包httpclient、json-lib
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.1</version>
<classifier>jdk15</classifier>
</dependency>
如何通過HttpClient傳送請求呢?
- 建立HttpClient物件
- 建立請求方法的例項,並指定請求URL
如果需要傳送GET請求,建立HttpGet物件;如果需要傳送POST請求,建立HttpPost物件 - 傳送請求引數,可呼叫HttpGet、HttpPost共同的setParams方法來新增請求引數;對於HttpPost物件而言,也可呼叫setEntity方法來設定請求引數
新增請求頭,可通過addHeader()方法 - 呼叫HttpClient物件的execute()傳送請求
- 呼叫HttpResponse的getAllHeaders()、getHeaders(String name)等方法可獲取伺服器的響應頭
呼叫HttpResponse的getEntity()方法可獲取伺服器的響應內容 - 釋放連線。無論執行方法是否成功,都必須釋放連線
public JSONObject post(String url, List<NameValuePair> params, List<NameValuePair> headers, String encoding){
JSONObject response = null;
try{
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
JSONObject json = new JSONObject();
for(int i=0;i<params.size();i++){
json.put(params.get(i).getName(),params.get(i).getValue());
}
StringEntity entity = new StringEntity(json.toString(),encoding);
httpPost.setEntity(entity);
if(headers != null){
for(int i=0;i<headers.size();i++){
httpPost.addHeader(headers.get(i).getName(),headers.get(i).getValue());
}
}
HttpResponse httpResponse = httpClient.execute(httpPost);
if(httpResponse.getStatusLine().getStatusCode() == 200){
String result = EntityUtils.toString(httpResponse.getEntity());
response = JSONObject.fromObject(result);
}
httpPost.abort();
httpClient.close();
}catch (Exception e){
e.printStackTrace();
}
return response;
}
將域名放在配置檔案中
上面說過URL的域名會變,所以為了避免每次都修改很多檔案,我們需要將它們寫入配置檔案中,通過配置檔案讀寫
注:地址替換方法封裝詳見地址替換方法封裝
程式碼修改如下:
get請求如下:
public JSONObject get(String projName,String url, List<NameValuePair> params, List<NameValuePair> headers, String encoding){
JSONObject response = null;
try{
String uri = DNSReplacement.replacedURL(url,projName)+"?"+ EntityUtils.toString(new UrlEncodedFormEntity(params,encoding));//拼接域名和地址和?後引數
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(uri);
if(headers != null){
for(int i=0;i<headers.size();i++){
httpGet.addHeader(headers.get(i).getName(),headers.get(i).getValue());
}
}
HttpResponse httpResponse = httpClient.execute(httpGet);
if(httpResponse.getStatusLine().getStatusCode() == 200){
String result = EntityUtils.toString(httpResponse.getEntity());
response = JSONObject.fromObject(result);
}
httpGet.abort();
httpClient.close();
}catch (Exception e){
e.printStackTrace();
}
return response;
}
如此,我們就基本完成了請求的封裝,得到一個公用類(Request),當然我們還可以再封裝一層,將get、post方法變成private,然後增加一個方法,通過傳入的引數中增加請求型別(GET or POST),根據請求型別呼叫不同方法實現
其他可根據自己專案情況做不同修改以適應專案需求
參考文章:
https://www.cnblogs.com/boris-et/p/7922267.html
http://blog.csdn.net/zknxx/article/details/51598852
相關文章
- curl 請求獲取響應時間
- HttpClient入門(1) 傳送請求,處理響應及響應重複讀取HTTPclient
- java傳送post請求 ,請求資料放到body裡Java
- Jmeter 請求 websocket 獲得的響應資料不全JMeterWeb
- postman傳送請求使用篇(二)Postman
- react-fetch資料傳送請求React
- Python爬蟲(二)——傳送請求Python爬蟲
- postman(二):使用postman傳送get or post請求Postman
- jmeter之傳送json資料的post請求JMeterJSON
- 【Go】優雅的讀取http請求或響應的資料GoHTTP
- 【Go】優雅的讀取 http 請求或響應的資料GoHTTP
- ARP原理概述——基於WinPcap傳送ARP請求資料包獲取遠端MAC地址PCAMac
- RxHttp 一條鏈傳送請求之強大的資料解析功能(二)HTTP
- Postman傳送Post請求Postman
- Java傳送Post請求Java
- 傳送GET請求 示例
- HttpClient--傳送請求HTTPclient
- perl傳送http請求HTTP
- java傳送http請求JavaHTTP
- 【Go】優雅的讀取 http 請求或響應的資料-續GoHTTP
- 【Go】優雅的讀取http請求或響應的資料-續GoHTTP
- java發http,https請求獲取資料JavaHTTP
- 使用Python獲取HTTP請求頭資料PythonHTTP
- Jmeter —— jmeter利用取樣器中http傳送請求JMeterHTTP
- okhttp 原始碼解析 - 網路協議的實現 - 請求流程: 請求的傳送與響應的接收HTTP原始碼協議
- 如何傳送請求以及AJAX
- C# 傳送POST請求C#
- 使用HttpClient傳送GET請求HTTPclient
- 使用httpclient傳送http請求HTTPclient
- Solon 框架如何方便獲取每個請求的響應時間?框架
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- Zttp 傳送 form params 請求 而非 JSON 請求ORMJSON
- AJAX 獲取伺服器響應資料伺服器
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?PHPHTTP
- SAP UI5 應用的 OData 後設資料請求的傳送原理分析UI
- java傳送GET和post請求Java
- 使用Feign傳送HTTP請求HTTP
- python傳送HTTP POST請求PythonHTTP