1. 程式人生 > 實用技巧 >面試官問:實際生產中如何快速的測試介面(開發環境、測試環境、生產環境)

面試官問:實際生產中如何快速的測試介面(開發環境、測試環境、生產環境)

1.背景

在實際開發中測試程式碼時必不可少的環節,

並且通常要測試開發環境、測試環境、預釋出環境、灰度測試、生產環境等

2.測試程式碼設計

步驟一:編寫一個測試基類Base,這個基類裡面主要是定義介面使用的token值、簽名值的生成方法、不同環境的介面ip、測試模板等

package com.ldp.user.controller;

import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method; import java.util.Map; import java.util.TreeMap; /** * @Copyright (C) 四川XXXX科技有限公司 * @Author: LI DONG PING * @Date: 2020-05-01 10:03 * @Description: <p> * http://localhost:8080/api/swagger-ui.html * </p> */ public class Base { public static String token = "eyJhbsInN1YiI6IntcImhhc1Bob25lTm9cIjp0cnVlLFwibG9naW5UeXBlXCI6MSxcInVzZXJJZFwiOjIyMX0iLCJleHAiOjE1ODc1OTI4NzJ9.2ZL06sIiTzG331K2EBy5UPWiB06PgZ8eSZAmzGlp9C-Dm39k0iI-dVNvrQBCLRhBhjevp01q3rBHWEVz3dMtWw";
/** * 用於切換測試的環境 */ public static String urlLocal = "http://localhost:8080/api"; public static String urlIp = ""; public static String urlDev = ""; public static String urlTest = ""; public static String urlPro = ""; /** * 測試模板 */ public void test() { String url
= urlLocal + "/"; System.out.println("請求地址:" + url); HttpRequest request = HttpUtil.createRequest(Method.GET, url); // 注意這裡使用TreeMap Map<String, Object> map = new TreeMap<>(); // 業務引數 map.put("name", "11"); // 公用引數 map.put("appid", "1001"); map.put("sequenceId", "seq" + System.currentTimeMillis()); map.put("timeStamp", System.currentTimeMillis()); map.put("sign", signApi(map, "123456")); request.form(map); System.out.println("請求引數:" + map); request.header("Authorization", token); request.setConnectionTimeout(60 * 1000); String response = request.execute().body(); System.out.println("請求結果:" + response); } /** * api介面簽名規則 * * @param map * @return */ public String signApi(Map<String, Object> map, String md5Key) { StringBuilder sb = new StringBuilder(); for (String key : map.keySet()) { Object o = map.get(key); if (o == null || StrUtil.isEmpty(o.toString())) { continue; } sb.append(key + "=").append(map.get(key) + "&"); } String str1 = sb.toString(); String str = str1.substring(0, str1.length() - 1) + md5Key; String md5 = SecureUtil.md5(str); System.out.println("簽名引數:" + map); System.out.println("簽名key:" + md5Key); System.out.println("簽名原串:" + str); System.out.println("簽名簽名值:" + md5); return md5; } }
View Code

步驟二:編寫或快速生成測試類

如何自動生成測試程式碼:https://www.cnblogs.com/newAndHui/p/11205750.html

package com.ldp.user.controller;

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.http.Method;
import com.alibaba.fastjson.JSON;
import org.junit.jupiter.api.Test;

import java.util.Map;
import java.util.TreeMap;

/**
 * @author 姿勢帝-部落格園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 01/01 11:49
 * @description
 */
class UserOrderControllerTest extends Base {
    /**
     * 統一日誌輸出測試
     */
    @Test
    void logTest() {
        for (int i = 100; i < 101; i++) {
            String url = urlLocal + "/userOrder/log";
            System.out.println("請求地址:" + url);
            HttpRequest request = HttpUtil.createRequest(Method.GET, url);
            Map<String, Object> map = new TreeMap<>();
            // 業務引數
            map.put("message", "abc");

            // 公用引數
            map.put("appid", "1001");
            map.put("sequenceId", "seq" + System.currentTimeMillis());
            map.put("timeStamp", System.currentTimeMillis());
            map.put("sign", signApi(map, "123456"));
            request.form(map);
            System.out.println("請求引數:" + map);
            request.header("Authorization", token);
            request.setConnectionTimeout(60 * 1000);
            String response = request.execute().body();
            System.out.println("請求結果:" + response);
        }
    }

    @Test
    void md5Test() {
        String url = urlLocal + "/userOrder/md5Test";
        System.out.println("請求地址:" + url);
        HttpRequest request = HttpUtil.createRequest(Method.GET, url);
        Map<String, Object> map = new TreeMap<>();
        // 業務引數
        map.put("name", "趙敏");
        map.put("age", "18");
        map.put("address", "光明頂");

        // 公用引數
        map.put("appid", "1001");
        map.put("sequenceId", "seq" + System.currentTimeMillis());
        map.put("timeStamp", System.currentTimeMillis());
        map.put("sign", signApi(map, ""));
        request.form(map);
        System.out.println("請求引數:" + map);
        request.header("Authorization", token);
        request.setConnectionTimeout(60 * 1000);
        String response = request.execute().body();
        System.out.println("請求結果:" + response);
    }

    @Test
    void paramCheck() {
        String url = urlLocal + "/userOrder/paramCheck";
        System.out.println("請求地址:" + url);
        HttpRequest request = HttpUtil.createRequest(Method.GET, url);
        Map<String, Object> map = new TreeMap<>();
        // 業務引數
        map.put("weChat", "851298348");
        map.put("name", "李東平");
        map.put("age", "18");
        //  map.put("status", "0");
        map.put("address", "四川成都");

        // 公用引數
        map.put("appid", "1001");
        map.put("sequenceId", "seq" + System.currentTimeMillis());
        map.put("timeStamp", System.currentTimeMillis());
        map.put("sign", signApi(map, "123456"));
        String param = JSON.toJSONString(map);
        request.body(param);
        System.out.println("請求引數:" + param);
        request.header("Authorization", token);
        request.setConnectionTimeout(60 * 1000);
        String response = request.execute().body();
        System.out.println("請求結果:" + response);
    }

    /**
     * 異常處理測試
     */
    @Test
    void exceptionTest() {
        String url = urlLocal + "/userOrder/exception";
        System.out.println("請求地址:" + url);
        HttpRequest request = HttpUtil.createRequest(Method.GET, url);
        Map<String, Object> map = new TreeMap<>();
        // 業務引數 0,1,2,3
        map.put("num", "2");
        // 公用引數
        map.put("appid", "1001");
        map.put("sequenceId", "seq" + System.currentTimeMillis());
        map.put("timeStamp", System.currentTimeMillis());
        map.put("sign", signApi(map, "123456"));
        request.form(map);
        System.out.println("請求引數:" + map);
        request.header("Authorization", token);
        request.setConnectionTimeout(60 * 1000);
        String response = request.execute().body();
        System.out.println("請求結果:" + response);
    }
}
View Code

3.使用postmain測試

個人不建議使用這個測試,雖然我看見很多人都在使用它做測試!

原因在於

1.測試引數不便於儲存和共享給他人測試;

2.測試簽名引數需要在其他地方生成好後複製進去;

3.每個人測試的時候都需要去填寫一次引數;

但是有時候如果自己寫程式碼測試不通,可以使用postmain測試驗證一下到底是自己的測試程式碼有問題還是介面本身有問題;

使用方式:

步驟一:下載並安裝postmain

步驟二:填寫測試資料(url、引數等)

案例如下:

完美!