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