靈活輕巧的java接口自動(dòng)化測試實(shí)戰(zhàn)

前言

無論是自動(dòng)化測試還是自動(dòng)化部署,擼碼肯定少不了,所以下面的基于java語言的接口自動(dòng)化測試,要想在業(yè)務(wù)上實(shí)現(xiàn)接口自動(dòng)化,前提是要有一定的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

項(xiàng)目結(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);
    }


實(shí)戰(zhàn)示例

通過Swagger2調(diào)取controller層示例



  • 請求示例


    image
  • 響應(yīng)示例

接口測試用例通過extentreports生成測試報(bào)告
  • 執(zhí)行resources下的testNG.xml生成測試用例報(bào)告
    示例測試報(bào)告如下:

通過報(bào)告可以看到用例的總數(shù),多少通過多少失敗,失敗的異常打印等信息。

  • 接口的并發(fā)測試
    測試單元ConcurrentTestCase類是測試并發(fā)的示例
    根據(jù)入?yún)?shù)設(shè)置并發(fā)量,測試結(jié)果如下:


簡單的寫了兩個(gè)示例,具體的實(shí)現(xiàn)還需根據(jù)自己的接口文檔去設(shè)計(jì)測試用例。
項(xiàng)目源碼傳送門:點(diǎn)擊獲取


  • 更多測試技術(shù)分享、學(xué)習(xí)資源以及一些其他福利可關(guān)注公眾號:【Coding測試】獲?。?/em>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容