一、原理及特點
- 參數放在XML文件中進行管理
- 用httpClient簡單封裝一個httpUtils工具類
- 測試用例管理使用了testNg管理,使用了TestNG參數化測試,通過xml文件來執行case。
- 測試報告這里用到第三方的包ReportNG 項目組織用Maven
二、准備
使用工具:eclipse,maven
用到的第三方jar包:dom4j、reportng、testng
理解難點:httpUtils和xmlUtil工具類的封裝;dom4j使用;CookieStore的應用
三、框架構思
1、項目結構
2、用例執行流程
3、接口調用流程
4、調度腳本流程
四、框架實現
1、輸入參數
1.1 參數放在XML文件中進行管理
例:這里測試獲取角色的接口輸入參數為,page和rows,mapRole.xml內容如下
<?xml version="1.0" encoding="UTF-8"?> <map> <bean beanName="GetRole"> <!--Locator lists --> <locator name="page" value="1"></locator> <locator name="rows" value="10"></locator> </bean> </map>
1.2 封裝一個xmlUtil工具類負責讀取XML,使用第三方的jar包dom4j
1.2.1 xmlUtil中readXMLDocument方法返回值為HashMap<String, String>
public static HashMap<String, String> readXMLDocument(String beanName,String xmlName){ }
參數xmlName(xml文件的名字); 參數beanName(xml文件中節點的名稱);
1.3 封裝一個CookieUtil工具類,通過CookieStore儲存cookie
1.3.1 CookieUtil類中setCookieStore方法返回值為CookieStore
public CookieStore setCookieStore(HttpResponse httpResponse) { }
1.4 用httpClient簡單封裝一個httpUtils工具類有get.post,put,delete方法
1.4.1 httpUtils中post封裝方法如下:
public CloseableHttpResponse post(String url, Map<String, String> params,CloseableHttpClient httpclient,CookieStore cookieStore){ }
2、返回參數
2.1 創建一個接口返回對象ResponseBean
對象ResponseBean,包括status、statusCode、contentType、body、url、method、cookies
2.2 在工具類中在創建一個ReponseUtil工具類
ReponseUtil工具類負責將請求的返回數據CloseableHttpResponse 轉換成ResponseBean
public ResponseBean setResponseBean(CloseableHttpResponse httpResponse) { }
3、測試用例
測試用例管理使用了testNg管理 ,使用了TestNG參數化測試,通過xml文件來執行case
3.1 測試case腳本
public class GetRoleTest { static CookieStore cookieStore ; static CookieUtil cookieUtil=new CookieUtil() ; CloseableHttpClient client; HttpUtils httpUtils=HttpUtils.getInstance(); @Parameters({ "url", "objBean" ,"statusCode","xmlName"}) @BeforeSuite /* * 登錄進入系統獲取JSESSIONID放入到CookieStore中 * */ public void TestLoginIn(String url ,String objBean, String statusCode,String xmlName) { Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName); client = HttpClients.createDefault(); CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore); //cookieUtil.printResponse(httpResponse); cookieStore=cookieUtil.setCookieStore(httpResponse); } @Parameters({ "url", "objBean" ,"statusCode","body","xmlName"}) @Test(priority = 2) public void TestGetRole(String url ,String objBean, String statusCode,String body,String xmlName) { Map<String,String> params=xmlUtil.readXMLDocument(objBean,xmlName); client = HttpClients.custom().setDefaultCookieStore(cookieStore).build(); CloseableHttpResponse httpResponse= httpUtils.post(url, params, client, cookieStore); ResponseBean rb=new ReponseUtil().setResponseBean(httpResponse); // add Assert Assert.assertEquals("OK", rb.getStatus()); Assert.assertEquals(statusCode, rb.getStatusCode()); Assert.assertEquals(true, rb.getBody().contains(body)); } @AfterSuite public void closeClient(){ try { // 關閉流並釋放資源 client.close(); } catch (IOException e) { e.printStackTrace(); } } }
- [注] 因為API接口測試時每次都要校驗Cookie,所有我們每次都先執行登錄操作去獲取Cookie
3.2 xml文件的編寫
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestGetRole" parallel="classes" thread-count="5"> <parameter name="url" value="/sys/login" /> <parameter name="objBean" value="loginIn" /> <parameter name="status" value="OK" /> <parameter name="statusCode" value="200" /> <parameter name="xmlName" value="mapRole" /> <test name="TestGetRole" preserve-order="true"> <parameter name="url" value="/json/getRoleInfo" /> <parameter name="objBean" value="GetRole" /> <parameter name="status" value="OK" /> <