--- title: Data-Driven Testing tags: Rapi Document Chinese --- # 資料驅動測試 在 Rapi 中,使用者可以使用預先準備好的資料集來執行同一份測試案例。例如,假設您想針對某個登入畫面進行測試,您可以將預先建立的多筆人員資料匯入到 Rapi,由 Rapi 為您帶入每筆資料進行測試。本文將介紹如何使用資料驅動,把資料檔載入 Rapi 並進行測試。 ## 步驟 1:準備資料檔 1. 資料檔須為 JSON 或 CSV 格式(若資料檔非 JSON 或 CSV 格式,則須先自行轉換)。 2. 範例: - 下列為擁有二個 Keys,四個 Values,一共八筆資料的 JSON 檔: ```json= [ { "key1": "value1", "key2": "value5" }, { "key1": "value2", "key2": "value6" }, { "key1": "value3", "key2": "value7" }, { "key1": "value4", "key2": "value8" } ] ``` - 下列為擁有二個 Keys,四個 Values,一共八筆資料的 CSV 檔: ```csv= key1,key2 value1,value5 value2,value6 value3,value7 value4,value8 ``` ## 步驟 2:匯入資料檔 1. 進入到「Data Driven」視窗,並按下「Import from file」按鈕:![](https://i.imgur.com/V9hWywG.png) 2. 選取需要匯入的資料檔後,在 「Table」欄位出現資料集檔名即上傳成功:![](https://i.imgur.com/dyRNwTP.png) :::warning ⚠ **注意** 當欲上傳的資料檔檔名已存在於目前的「Table」欄位,此時上傳會失敗。若想更新同名的資料檔,請先把舊的檔案於「Table」欄位刪除後再進行上傳。 ::: ## 步驟 3:建立資料驅動指令 1. 使用資料驅動測試,需要搭配 `FOR_EACH_RECORD` 跟 `END` 這兩個指令。 2. 在欲執行資料測試的地方按下滑鼠右鍵,新增 `FOR_EACH_RECORD` 指令,並在 `FOR_EACH_RECORD` 指令的 「Target」欄位填入想匯入的資料集檔名。例如:![](https://i.imgur.com/G2v2ppW.png) 3. 使用 `${YOUR_KEY}` 的方式帶入資料。例如:![](https://i.imgur.com/A1euULC.png) 4. 最後,在欲結束資料驅動測試的地方使用 `END` 指令作為結尾:![](https://i.imgur.com/8EsIH2a.png) ## 步驟 4:播放測試案例 1. 播放測試案例時,`FOR_EACH_RECORD` 指令會自動把「Target」欄位指定的資料轉為[全域變數](https://hackmd.io/@sideex/book-zh/%2F%40sideex%2Fvariable-zh#%E5%85%A8%E5%9F%9F%E8%AE%8A%E6%95%B8%EF%BC%9A%E4%BD%BF%E7%94%A8Global-Var%E9%9D%A2%E6%9D%BF%E6%88%96storeGlobalVar%E6%8C%87%E4%BB%A4%E5%AE%A3%E5%91%8A),並把 `FOR_EACH_RECORD` 指令到 `END` 指令之間的指令帶入每筆資料後各執行一次。 - 從「全域變數」視窗可看到匯入資料: ![](https://i.imgur.com/SxZxD5r.png) - 從執行結果可看到每筆資料被帶入並執行: ![](https://i.imgur.com/DOyfSY5.png) ## 廷伸案例:一對多資料驅動測試 如果想對資料進行一對多測試,可以預先準備兩個資料集,並使用巢狀 `FOR_EACH_RECORD` 指令實現。請參考以下範例: 1. 準備好資料集: - CSV 範例資料集一: ```csv= names apple peach lemon mango ``` - CSV 範例資料集二: ```csv= prices 50 60 70 80 ``` 2. 建立指令: ```= /* 虛擬碼 */ for (each name in names){ for (each price in prices){ echo name echo price } } ``` ![](https://i.imgur.com/P2FLJBP.png) 3. 上述指令便會產生出一對多的資料組合: ```= apple -> 50 -> 60 -> 70 -> 80 peach -> 50 -> 60 -> 70 -> 80 lemon -> 50 -> 60 -> 70 -> 80 mongo -> 50 -> 60 -> 70 -> 80 ```