一、原理及特点 参数放在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