五、JAVA接口測試框設計 - DataProvider+txt管理測試數據

接口測試中測試用例數據管理的設計:
這里用到的是DataProvider+txt的方式進行管理,個人認為這種方式管理還是比較便捷的。

1.txt文件設計:

外部有一些 使用excel管理的方式,考慮到一些表格格式化、操作便捷性還是更換了txt的方式管理。

(1)txt參數設計模板:

將參數分類為三種 BVT、NORMAL、ABNORMAL,分別代表冒煙用例、正常邏輯用例、非正常邏輯用例(具體用法看這人習慣吧)

(2)文件結構設計:

我們假設一個 數據推送接口:datapush,新建一個 dataPushTest_BVT.txt的文件:
文件新建.png
(3)設計txt文件的參數格式:

no+annotation+params的三個字段的方式,即序號、注釋、參數:
參數設計.png

2.開始編寫處理txt文件的方式:

(1)在公共方法中新建一個工具類:

ReadTxtData.java,就是讀取出txt數據的意思。

(2)在公共文件中新建一個文件路徑拼接的工具類:

LocalSolution.java 用于拼接文件路徑。

(3)在 LocalSolution 拼接工具類中新增用例路徑獲取拼接方法:
public class LocalSolution {
    //獲取用例數據文件路徑并拼接資源目錄src/main/resources
    public String getCaseDataPath(String filenames) {
        // 獲取項目路徑
        String localPath = new File("").getAbsolutePath();
        //拼接資源路徑,這里固定的框設計文件路徑為/src/main/resources/caseData/,所以就寫死這個相對路徑。
        String localPathfile = localPath+"/src/main/resources/caseData/"+filenames;
        return localPathfile;
    }
(4)在ReadTxtData中新增txt讀取方法
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import java.io.*;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.io.BufferedReader;

public class ReadTxtData {
    // 引用路徑拼接方法拼接路徑
    LocalSolution localSolution = new LocalSolution();
    // 接收逐行查詢的數據
    public String UseCaseParameter = null;
    public List readFileContext(String paths) throws IOException {
        // 儲存讀取的txt數據
        List caseDataParameter = new ArrayList<>();
        // 拼接出測試用例數據的地址
        String fname = localSolution.getCaseDataPath(paths);
        // 取出測試數據
        try {
            String encoding = "UTF-8"; // 字符編碼(可解決中文亂碼問題 )
            // 新建一個測試數據的文件對象
            File file = new File(fname);
            // 判斷文件是否存在且是否為文件
            if (file.isFile() && file.exists()) {
                // 配置讀取txt文件信息
                InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
                BufferedReader bufferedReader = new BufferedReader(read);
                // 循環(huán)取出對應的文件
                while ((UseCaseParameter = bufferedReader.readLine()) != null) {
                    caseDataParameter.add(UseCaseParameter);
                }
                read.close();
            } else {
                System.out.println("沒有找到對應的測試用例數據文件!");
            }
        } catch (Exception e) {
            System.out.println("讀取用例數據文件錯誤!");
            e.printStackTrace();
        }
        return caseDataParameter;
    }

(5)新建一個 dataprivoder方法:
    @DataProvider(name = "testcase")
    public Object[][] dataProviders(Method method ) throws IOException {
        // 獲取執(zhí)行用例方法名稱
        String fileName = method.getName().split("_")[0];
        // 方法名稱拼接為文件名
        String paths = fileName+"/"+method.getName()+".txt";
        // 獲取txt讀取出的文件數據
        List caseValue = readFileContext(paths);
        // 循環(huán)寫入dataprovider參數接收變量中
        Object[][] caseData =new Object[caseValue.toArray().length][1];
        for(int i =0 ;i<caseValue.toArray().length;i++){
            caseData[i][0] = caseValue.get(i).toString();
        }
        return caseData;
    }
(6)新建測試用例獲取對應的參數值:

這里要注意方法名要與用例數據文件名完全一致,數據文件夾名要與接口名完全一致。對應關系如圖所示:
文件名稱關系.png
(7)測試用例接受及請求代碼:
// dataProvider設置的為name的值即testcase,其他的文件引用需要把類文件指定所以需要用dataProviderClass = ReadTxtData.class
    @Test(dataProvider = "testcase",dataProviderClass = ReadTxtData.class)
    public void dataPushTest_BVT(String params) throws IOException {
        // 接口數據為JSON參數
        JSONObject params_results = JSONObject.parseObject(params);
        // 取出接口參數
        JSONObject body_bvt =params_results.getJSONObject("params");
        // 參數構造
        System.out.println("本次請求的接口:"+requestUrl);
        System.out.println("本次請求的參數:"+body_bvt);
        // 請求接口,這里可以參照接口請求篇的文章看到詳細的接口請求封裝
        JSONObject interfaceResults =  requestHttp.postClientJson(requestUrl,body_bvt.toString());
        System.out.println("接口返回值:"+interfaceResults.toString());
        // 獲取返回值
        String results = interfaceResults.getString("total");
        // 用例斷言
        Assert.assertEquals("0",results,"判斷接口返回數據總數");
    }

3.實際運行結果:
運行結果.png

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內容