前言
無論是自動化測試還是自動化部署,擼碼肯定少不了,所以下面的基于java語言的接口自動化測試空免,要想在業(yè)務(wù)上實現(xiàn)接口自動化,前提是要有一定的java基礎(chǔ)盆耽。
如果沒有java基礎(chǔ)蹋砚,也沒關(guān)系。這里小編也為大家提供了一套java基礎(chǔ)精講視頻(雖然年代有點(diǎn)久2017摄杂,但是講解內(nèi)容絕對干貨坝咐,小編看了很多的基礎(chǔ)視頻唯有這一套講解到位)由于視頻較大,放到了某盤上析恢,后臺回復(fù)關(guān)鍵字【java】即可獲取墨坚。
進(jìn)入主題
使用技術(shù)
- Spring Boot
- mybatis
- testng
- Swagger2
- extentreports
- httpclient(這里抽取了一些方法非常好用)
- log4j2
項目結(jié)構(gòu)
- httpclient 抽取工具類部分方法
import org.apache.http.impl.client.HttpClientBuilder;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.util.Map;
/**
* @author lgl
* @date 2020/05/15 15:19
*/
public class RestTemplateUtils {
private static final RestTemplate REST_TEMPLATE;
static {
HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(HttpClientBuilder.create()
.setMaxConnTotal(1000)
.setMaxConnPerRoute(100)
.build());
httpRequestFactory.setConnectionRequestTimeout(5000);
httpRequestFactory.setConnectTimeout(5000);
httpRequestFactory.setReadTimeout(10000);
// httpRequestFactory.setBufferRequestBody(false);
REST_TEMPLATE = new RestTemplate(httpRequestFactory);
}
// ----------------------------------GET-------------------------------------------------------
/**
* GET請求調(diào)用方式
*
* @param url 請求URL
* @param responseType 返回對象類型
* @return ResponseEntity 響應(yīng)對象封裝類
*/
public static <T> ResponseEntity<T> get(String url, Class<T> responseType) {
return REST_TEMPLATE.getForEntity(url, responseType);
}
/**
* GET請求調(diào)用方式
*
* @param url 請求URL
* @param responseType 返回對象類型
* @param uriVariables URL中的變量,按順序依次對應(yīng)
* @return ResponseEntity 響應(yīng)對象封裝類
*/
public static <T> ResponseEntity<T> get(String url, Class<T> responseType, Object... uriVariables) {
return REST_TEMPLATE.getForEntity(url, responseType, uriVariables);
}
// ----------------------------------POST-------------------------------------------------------
/**
* POST請求調(diào)用方式
*
* @param url 請求URL
* @param responseType 返回對象類型
* @return
*/
public static <T> ResponseEntity<T> post(String url, Class<T> responseType) {
return REST_TEMPLATE.postForEntity(url, HttpEntity.EMPTY, responseType);
}
/**
* POST請求調(diào)用方式
*
* @param url 請求URL
* @param requestBody 請求參數(shù)體
* @param responseType 返回對象類型
* @return ResponseEntity 響應(yīng)對象封裝類
*/
public static <T> ResponseEntity<T> post(String url, Object requestBody, Class<T> responseType) {
return REST_TEMPLATE.postForEntity(url, requestBody, responseType);
}
/**
* POST請求調(diào)用方式
*
* @param url 請求URL
* @param requestBody 請求參數(shù)體
* @param responseType 返回對象類型
* @param uriVariables URL中的變量映挂,按順序依次對應(yīng)
* @return ResponseEntity 響應(yīng)對象封裝類
*/
public static <T> ResponseEntity<T> post(String url, Object requestBody, Class<T> responseType, Object... uriVariables) {
return REST_TEMPLATE.postForEntity(url, requestBody, responseType, uriVariables);
}
/**
* POST請求調(diào)用方式
*
* @param url 請求URL
* @param requestBody 請求參數(shù)體
* @param responseType 返回對象類型
* @param uriVariables URL中的變量泽篮,與Map中的key對應(yīng)
* @return ResponseEntity 響應(yīng)對象封裝類
*/
public static <T> ResponseEntity<T> post(String url, Object requestBody, Class<T> responseType, Map<String, ?> uriVariables) {
return REST_TEMPLATE.postForEntity(url, requestBody, responseType, uriVariables);
}
實戰(zhàn)示例
通過Swagger2調(diào)取controller層示例
-
請求示例
響應(yīng)示例
接口測試用例通過extentreports生成測試報告
- 執(zhí)行resources下的testNG.xml生成測試用例報告
示例測試報告如下:
通過報告可以看到用例的總數(shù),多少通過多少失敗柑船,失敗的異常打印等信息帽撑。
-
接口的并發(fā)測試
測試單元ConcurrentTestCase類是測試并發(fā)的示例
根據(jù)入?yún)?shù)設(shè)置并發(fā)量,測試結(jié)果如下:
簡單的寫了兩個示例鞍时,具體的實現(xiàn)還需根據(jù)自己的接口文檔去設(shè)計測試用例亏拉。
項目源碼傳送門:點(diǎn)擊獲取
- 更多測試技術(shù)分享扣蜻、學(xué)習(xí)資源以及一些其他福利可關(guān)注公眾號:【Coding測試】獲取: