Java接口自动化(HttpClient+TestNG)
搭建方式为HttpClient+TestNG+ExtentReports(待补充),测试数据采用excel获取(待补充),执行使用多线程(待补充)
1.maven依赖引入
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.9.10</version>
<scope>compile</scope>
</dependency>
2. 封装请求方法
- 封装get请求
public static HashMap<String, String> get(String url) {
//构建请求
HttpGet get = new HttpGet(url);
//创建客户端
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
HashMap<String, String> result = new HashMap<>();
try {
//执行请求,得到响应对象
response = httpClient.execute(get);
//获取响应中的内容
//1.响应状态码
int statusCode = response.getStatusLine().getStatusCode();
String status = String.valueOf(statusCode);
//2.响应头
Header[] allHeaders = response.getAllHeaders();
String headers = allHeaders.toString();
//3.响应体
HttpEntity entity = response.getEntity();
String s = EntityUtils.toString(entity);
//
result.put("entity",s);
result.put("status",status);
result.put("headers",headers);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
response.close();
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
- 封装post请求方式
public static HashMap<String,String> post(String url, HashMap<String, String> headerMap, HashMap<String, String> paramsMap) {
//构建post请求
HttpPost post = new HttpPost(url);
//添加请求头
Set<String> keySet = headerMap.keySet();
for(String key: keySet){
post.setHeader(key,headerMap.get(key));
}
//遍历参数map,组织成为NameValuePair的参数列表
Set<String> set = paramsMap.keySet();
List<NameValuePair> params = new ArrayList<>();
for (String key : set) {
params.add(new BasicNameValuePair(key, paramsMap.get(key)));
}
try {
post.setEntity(new UrlEncodedFormEntity(params));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
//创建客户端
CloseableHttpClient httpClient = HttpClients.createDefault();
HashMap<String,String> result = new HashMap<>();
try {
CloseableHttpResponse response = httpClient.execute(post);
//获取响应信息
Header[] allHeaders = response.getAllHeaders();
int statusCode = response.getStatusLine().getStatusCode();
//将响应状态码转为字符串
String status = String.valueOf(statusCode);
HttpEntity entity = response.getEntity();
//获得响应体中内容
String entity_str = EntityUtils.toString(entity);
result.put("headers",allHeaders.toString());
result.put("entity",entity_str);
result.put("statusCode",status);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
3. 分别请求get和post接口,并用状态码进行断言
- 请求get接口
@Test
public void testHttpGet1() {
String url = "http://www.baidu.com";
HashMap<String,String> result = HttpUtil.get(url);
String status = result.get("status");
Assert.assertEquals("200",status,"响应状态码是200");
}
}
- 请求post接口
@Test
public void testHttpPost1 () {
String url = "https://passport.baidu.com/v2/api/?login";
//设置header
HashMap<String, String> header = new HashMap<>();
header.put("Content-type","text/xml");
//设置参数
HashMap<String, String> params = new HashMap<>();
params.put("username","shiguang");
params.put("bx9pe1CDQdbYGexz1BzGiqP0bX7riABE9jcGWRxNybA4d0GdmcewJ68puKGkYvRXU" +
"beC8CYPn1uYGzpkdBIm85NTiJi4Xq6ohZRDAcqM9hQKAxEq5l4lKFC6vgvZ0h88YNwiIW+4bDebshnIU78KKLyGd3h6sa+ImcCDuEF0y0U=");
HashMap<String,String> result = HttpUtil.post(url, header, params);
String status = result.get("status");
//进行断言
Assert.assertEquals("200",status,"响应状态码是200");