接口自動化(TestNG)
數據驅動概念: 用戶輸入輸出數據來判斷測試用例是否通過從而驗證需求的測試.
一、接口自動化框架搭建(TestNG數據驅動) ---parameter
關鍵代碼:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestNG" verbose="1"> <parameter name="loginPhone" value="xxx"></parameter> <parameter name="isMobile" value= "false"></parameter> <test name="apiTest"> <classes> <class name="com.demo.Body" /> </classes> </test> </suite>
@Test @Parameters({"loginPhone", "isMobile"}) public static void postLogin(String loginPhone, String isMobile) {

二、data provider 自定義二位對象數組
注意事項: 1、定義DataProvider name, 如果沒有定義name屬性則匹配二維數組名
2、test annotation 要指定dataProvider name和步驟1 的name值相同
3、數組數據類型要和測試方法參數類型匹配。
官網模板:
//https://testng.org/doc/documentation-main.html
//This method will provide data to any test method that declares that its Data Provider //is named "test1" @DataProvider(name = "test1") public Object[][] createData1() { return new Object[][] { { "Cedric", new Integer(36) }, { "Anne", new Integer(37)}, }; } //This test method declares that its data should be supplied by the Data Provider //named "test1" @Test(dataProvider = "test1") public void verifyData1(String n1, Integer n2) { System.out.println(n1 + " " + n2); }
關鍵代碼方法一:
package ddt; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import io.restassured.RestAssured; import io.restassured.response.Response; public class DataProTest { @DataProvider(name = "test1") public Object[][] createData1() { return new Object[][] { { "loginPhone", "xxxx" }, { "isMobile", "false" }, }; } @Test(dataProvider = "test1") public static void postLogin(String loginPhone, String isMobile) { RestAssured.baseURI = "https://ipassport.damai.cn/newlogin/account/check.do"; RestAssured.basePath = ""; @SuppressWarnings("deprecation"

方法二、
package ddt; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import io.restassured.RestAssured; import io.restassured.response.Response; public class DataProTest { @DataProvider public Object[][] createData1() { return new Object[][] { { "loginPhone", "xxxx" }, { "isMobile", "false" }, }; } @Test(dataProvider = "createData1") public static void postLogin(String loginPhone, String isMobile) {
四、響應解析-響應狀態碼、響應頭域,響應Cookie
關鍵代碼:
System.out.println("響應狀態碼:" + String.valueOf(responseCode));
String responseHearder = response.getHeader("token");
System.out.println("響應頭域:" + String.valueOf(responseHearder));
String responseCookie = response.getCookie("JSESSIONID");
System.out.println("響應Cookie值:" + String.valueOf(responseCookie));
String responseContent = response.getBody().print();
響應解析Body
//方法一 JsonPath getJsonValue = response.jsonPath(); String nameValue = getJsonValue.get("name"); System.out.println("namevalue: " + nameValue); //方法二 JsonPath getResponseValue = response.jsonPath(); String value = getResponseValue.get("$.data.file[1].version");
五、請求封裝
封裝類:
package com.tools; import io.restassured.RestAssured; import io.restassured.response.Response; public class ApiTool { public static String getWebCookie() { RestAssured.baseURI = "https://www.douyin.com"; RestAssured.basePath = "/web/api/v2/platform/user/?id=1561475827829"; Response response = RestAssured .given() .header("accept", "application/json, text/plain, */*", "user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36") .param("id", "1561475827829").when().log().all().get(); String responseContent = response.getBody().print(); System.out.println(responseContent); String Cookie = response.getCookie("JSESSIONID"); return Cookie; } public static Response webGet(String url) { String cookie = ApiTool.getWebCookie(); Response response = RestAssured.given().cookie("JSESSIONID", cookie) .when().log().all().post(url); return response; } }
實現類
import io.restassured.response.Response; import org.testng.annotations.Test; import com.tools.ApiTool; public class GetHomePageInfo { @Test public void getWebHomepage() { Response response = ApiTool.webGet("www.baidu"); response.getBody().print(); } }
六、斷言
Assert
七、用例管理
從class, method ,group 三個維度,依托功能測試設計按模板、功能點,用例優先級
用例分類運行基礎是:解耦
測試一個api的增刪改查
如果不解耦,新增失敗,會導致后續的刪改查用例全部失敗
class維度:
method維度:
group維度

浙公網安備 33010602011771號