一、环境准备
1.导入httpClient依赖包
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency>
导入fastJson依赖实现实体类序列化和json反序列操作
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.54</version> </dependency>
testng依赖
<dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8.8</version> <scope>test</scope> </dependency>
二、Get请求发包代码实现
package test; import java.util.Arrays; import java.util.HashMap; import org.apache.http.Header; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.testng.Assert; import org.testng.annotations.Test; import com.alibaba.fastjson.JSONObject; public class HttpClientTest { String url = "http://localhost:8081/user/login"; String get_params = "username=xiaobing&password=123456"; @Test public void GetTest() { //创建HttpGet对象 HttpGet httpGet = new HttpGet(url+"?"+get_params); //准备HttpClient客户端 CloseableHttpClient httpClient =HttpClients.createDefault(); CloseableHttpResponse httpResponse = null; try { //发送请求 httpResponse = httpClient.execute(httpGet); } catch (Exception e) { e.printStackTrace(); } //取出响应状态码 int code = httpResponse.getStatusLine().getStatusCode(); System.out.println("响应码:"+code); //取出消息头 Header[] header = httpResponse.getAllHeaders(); System.out.println("消息头:"+Arrays.toString(header)); //取出响应报文 String result = null; try { //使用EntityUtils工具类将Entity实体类toString转换 result = EntityUtils.toString(httpResponse.getEntity()); System.out.println("响应报文:"+result); } catch (Exception e) { e.printStackTrace(); } HashMap<String, String> map = JSONObject.parseObject(result, HashMap.class); String actual = map.get("message"); System.out.println("actual_message:"+actual); String expected = "登录成功"; //断言 Assert.assertEquals(actual, expected); } }
响应码:200 消息头:[Content-Type: application/json;charset=UTF-8, Transfer-Encoding: chunked, Date: Sun, 14 Jul 2019 14:06:44 GMT] 响应报文:{"status":"1","message":"登录成功"} actual_message:登录成功 PASSED: GetTest =============================================== Default test Tests run: 1, Failures: 0, Skips: 0 =============================================== =============================================== Default suite Total tests run: 1, Failures: 0, Skips: 0 ===============================================
三、POST请求发包代码实现(表单方式)
服务端:
@RestController//控制器类 @RequestMapping("/user")//映射路径 public class UserController { @RequestMapping(value="/login",method=RequestMethod.POST,consumes="application/x-www-form-urlencoded") public Result login(User user) { 。。。 。。。 }
客户端:
@Test public void postFormSend() { //测试数据准备 String url = "http://localhost:8081/user/login"; String params = "username=xiaobing&password=123456"; //创建HttpPost对象 HttpPost httpPost = new HttpPost(url); //将Content-Type类型添加到消息头 Header header = new BasicHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8"); httpPost.addHeader(header); //将表单参数添加到Entity实体类放到请求体 HttpEntity entity = new StringEntity(params, "UTF-8"); httpPost.setEntity(entity); //准备HttpClient客户端 CloseableHttpClient httpClient =HttpClients.createDefault(); CloseableHttpResponse httpResponse = null; try { //发起请求 httpResponse =httpClient.execute(httpPost); } catch (Exception e) { e.printStackTrace(); } int code = httpResponse.getStatusLine().getStatusCode(); System.out.println("响应码:"+code); Header[] resHeader = httpResponse.getAllHeaders(); System.out.println("消息头:"+Arrays.toString(resHeader)); HttpEntity httpEntity = httpResponse.getEntity(); String result = null; try { result = EntityUtils.toString(httpEntity); } catch (Exception e) { e.printStackTrace(); } System.out.println("响应报文:"+result); HashMap<String, String> map = JSONObject.parseObject(result, HashMap.class); String actual = map.get("message"); System.out.println("actual_message:"+actual); String expected = "登录成功"; //断言 Assert.assertEquals(actual, expected); }
响应码:200 消息头:[Content-Type: application/json;charset=UTF-8, Transfer-Encoding: chunked, Date: Sun, 14 Jul 2019 15:13:53 GMT] 响应报文:{"status":"1","message":"登录成功"} actual_message:登录成功 PASSED: postFormSend =============================================== Default test Tests run: 1, Failures: 0, Skips: 0 =============================================== =============================================== Default suite Total tests run: 1, Failures: 0, Skips: 0 ===============================================
四、POST请求发包代码实现(Json方式)
服务端:
@RestController//控制器类 @RequestMapping("/user")//映射路径 public class UserController { @RequestMapping(value="/login",method=RequestMethod.POST,consumes="application/json") public Result login(@RequestBody(required=false)User user) {
。。。 。。。
}
客户端:
@Test public void postJsonSend() { //测试数据准备 String url = "http://localhost:8081/user/login"; String params = "{"username":"xiaobing","password":"123456"}"; //创建HttpPost对象 HttpPost httpPost = new HttpPost(url); //将Content-Type类型添加到消息头 Header header = new BasicHeader("Content-Type","application/json;charset=utf-8"); httpPost.addHeader(header); //将表单参数添加到Entity实体类放到请求体 HttpEntity entity = new StringEntity(params, "UTF-8"); httpPost.setEntity(entity); //准备HttpClient客户端 CloseableHttpClient httpClient =HttpClients.createDefault(); CloseableHttpResponse httpResponse = null; try { //发起请求 httpResponse =httpClient.execute(httpPost); } catch (Exception e) { e.printStackTrace(); } int code = httpResponse.getStatusLine().getStatusCode(); System.out.println("响应码:"+code); Header[] resHeader = httpResponse.getAllHeaders(); System.out.println("消息头:"+Arrays.toString(resHeader)); HttpEntity httpEntity = httpResponse.getEntity(); String result = null; try { result = EntityUtils.toString(httpEntity); } catch (Exception e) { e.printStackTrace(); } System.out.println("响应报文:"+result); HashMap<String, String> map = JSONObject.parseObject(result, HashMap.class); String actual = map.get("message"); System.out.println("actual_message:"+actual); String expected = "登录成功"; //断言 Assert.assertEquals(actual, expected); }
响应码:200 消息头:[Content-Type: application/json;charset=UTF-8, Transfer-Encoding: chunked, Date: Sun, 14 Jul 2019 15:18:53 GMT] 响应报文:{"status":"1","message":"登录成功"} actual_message:登录成功 PASSED: postJsonSend =============================================== Default test Tests run: 1, Failures: 0, Skips: 0 =============================================== =============================================== Default suite Total tests run: 1, Failures: 0, Skips: 0 ===============================================
五、代码整合
未完待续。。。