这个接口自动化测试框架到目前为止,我们已经完成了Get请求的封装和必要的工具类的支持。接下来这篇,我来介绍如何完成POST请求的封装过程。一般来说,在一个项目中,接口测试很多时候就是测试Get和POST方法,其他的请求方式的接口很少,占的比重几乎不计。所以,这个Java接口自动化测试框架的核心就是Get和POST请求方法的封装过程。

1.POST接口举例

浏览器打开https://reqres.in/,下拉一屏。点击第一个POST请求,这个接口的介绍信息如下。

Java写接口自动化处理cookie java编写接口自动化_post接口实现

 

 

 

  这个接口的作用是创建用户,参数是一个json类型的数据,一个name一个job,两个JSON对象。发送请求之后,返回的JSON数据有name和job和id,以及创建时间这几个数据。

2.Postman手动实现 

我们先在本地postman环境,先来手动测试实现下这个post接口的请求过程。

Java写接口自动化处理cookie java编写接口自动化_apache_02

这个post接口请求还是比较简单,很容易在postman上实现该请求。 

3.Java代码自动化实现

       我们已经可以正确地在postman上实现创建用户这个接口的手动测试,那么我们想要这个过程自动化实现,如何做呢。下面我在RestClient.java封装了两个方法,一个是带请求头信息的Get请求,一个是带请求头信息的POST请求方法。这篇,了解了POST请求方法,带请求头的Get方法封装就很好理解

Java写接口自动化处理cookie java编写接口自动化_apache_03

1 package operator.http;
 2 
 3 import org.apache.http.Header;
 4 import org.apache.http.client.ClientProtocolException;
 5 import org.apache.http.client.methods.CloseableHttpResponse;
 6 import org.apache.http.client.methods.HttpGet;
 7 import org.apache.http.client.methods.HttpPost;
 8 import org.apache.http.entity.StringEntity;
 9 import org.apache.http.impl.client.CloseableHttpClient;
10 import org.apache.http.impl.client.HttpClients;
11 
12 import java.io.IOException;
13 import java.util.HashMap;
14 import java.util.Map;
15 
16 public class RestHeaderRest {
17 
18     //1. Get 请求方法
19     public CloseableHttpResponse get(String url) throws ClientProtocolException, IOException {
20 
21         //创建一个可关闭的HttpClient对象
22         CloseableHttpClient httpclient = HttpClients.createDefault();
23         //创建一个HttpGet的请求对象
24         HttpGet httpget = new HttpGet(url);
25         //执行请求,相当于postman上点击发送按钮,然后赋值给HttpResponse对象接收
26         CloseableHttpResponse httpResponse = httpclient.execute(httpget);
27         return httpResponse;
28     }
29 
30     //2. Get 请求方法(带请求头信息)
31     public CloseableHttpResponse get(String url, HashMap<String,String> headermap) throws  ClientProtocolException,IOException {
32         //创建一个可关闭的HttpClient对象
33         CloseableHttpClient httpClient = HttpClients.createDefault();
34         //创建一个HttpGet的请求对象
35         HttpGet httpGet = new HttpGet(url);
36         //加载请求头到httpget对象
37         for (Map.Entry<String, String> entry : headermap.entrySet()) {
38             httpGet.addHeader(entry.getKey(),entry.getValue());
39         }
40         //执行请求,相当于postman上点击发送按钮,然后赋值给HttpResponse对象接收
41         CloseableHttpResponse httpResponse = httpClient.execute(httpGet);
42 
43         return httpResponse;
44     }
45 
46     //3. POST方法
47     public CloseableHttpResponse post(String url, String entityString, HashMap<String,String> headermap) throws ClientProtocolException, IOException {
48         //创建一个可关闭的HttpClient对象
49         CloseableHttpClient httpclient = HttpClients.createDefault();
50         //创建一个HttpPost的请求对象
51         HttpPost httppost = new HttpPost(url);
52         //设置payload
53         httppost.setEntity(new StringEntity(entityString));
54 
55         //加载请求头到httppost对象
56         for(Map.Entry<String, String> entry : headermap.entrySet()) {
57             httppost.addHeader(entry.getKey(), entry.getValue());
58         }
59         //发送post请求
60         CloseableHttpResponse httpResponse = httpclient.execute(httppost);
61         return httpResponse;
62     }
63 
64 }

  然后,我们需要写一个TestNG测试用例来测试下这个封装的post方法好不好用。由于我们去前面几篇文章介绍了TestNG测试get方法的代码,这里我们就直接拷贝和修改部分代码就行。

(入参),一般来说,在Java中JSON数据都是放在JAVA Bean类中,通过JSON把高级对象序列化成JSON对象。

      在src/main/java中新建包:operator.basecom,然后新建一个Users.java,这个命名就参考接口的url单词就行。在postman或者网站该post方法,我们知道,需要name和job这两个json对象。我们新建一个bean类,同alt+shift+s,然后选择生成构造方法和set和get方法。

Java写接口自动化处理cookie java编写接口自动化_apache_03

1 package operator.basecom;
 2 
 3 public class Users {
 4     private String name;
 5     private String job;
 6 
 7     public Users(){
 8         super();
 9     }
10 
11     public Users(String name, String job) {
12         this.name = name;
13         this.job = job;
14     }
15 
16     public String getName() {
17         return name;
18     }
19 
20     public void setName(String name) {
21         this.name = name;
22     }
23 
24     public String getJob() {
25         return job;
26     }
27 
28     public void setJob(String job) {
29         this.job = job;
30     }
31 }

 好了,在src/test/java下的operator.http.impl我们新建一个POST测试用例,现在我们的PostTest.java测试类代码如下:

Java写接口自动化处理cookie java编写接口自动化_apache_03

1 package operator.http.impl;
 2 
 3 import com.alibaba.fastjson.JSON;
 4 import com.alibaba.fastjson.JSONObject;
 5 import operator.basecom.JsonBase;
 6 import operator.basecom.TestBase;
 7 import operator.basecom.Users;
 8 import operator.http.RestHeaderRest;
 9 import org.apache.http.client.ClientProtocolException;
10 import org.apache.http.client.methods.CloseableHttpResponse;
11 import org.apache.http.util.EntityUtils;
12 import org.testng.Assert;
13 import org.testng.TestNGUtils;
14 import org.testng.annotations.BeforeClass;
15 import org.testng.annotations.BeforeTest;
16 import org.testng.annotations.Test;
17 
18 import java.io.IOException;
19 import java.util.HashMap;
20 
21 public class PostTest extends TestBase {
22     String host;
23     String url;
24 
25     @BeforeClass
26     public void setUp(){
27         TestBase testBase = new TestBase();
28         host = testBase.prop.getProperty("URL");
29         url = host + "/api/users";
30     }
31 
32     @Test
33     public void postapi() throws ClientProtocolException,IOException {
34         RestHeaderRest restHeaderRest = new RestHeaderRest();
35         //准备请求头信息
36         HashMap<String, String> hashMap = new HashMap<>();
37 
38         //这个在postman中可以查询到
39         hashMap.put("Content-Type","application/json; charset=utf-8");
40 
41         //对象转换成Json字符串
42         Users user = new Users("duan","tester");
43         String  userJsonStr = JSON.toJSONString(user);
44         System.out.println(userJsonStr);
45 
46         //post请求
47         CloseableHttpResponse httpResponse = restHeaderRest.post(url, userJsonStr, hashMap);
48         System.out.println(httpResponse);
49 
50         //检查code码
51         int statcode = httpResponse.getStatusLine().getStatusCode();
52         Assert.assertEquals(statcode, RESPNSE_STATUS_CODE_201, "code  false");
53 
54 
55         //接口返回结果json格式化
56         String str = EntityUtils.toString(httpResponse.getEntity());
57         JSONObject strjson = JSON.parseObject(str);
58         System.out.println(strjson);
59 
60         //取出对应key值做比对
61         String name1 = JsonBase.GetJsonValue(strjson, "name");
62         String job1 = JsonBase.GetJsonValue(strjson, "job");
63         Assert.assertEquals(name1,"duan","name is not duan");
64         Assert.assertEquals(job1, "tester", "job is false");
65 
66     }
67 
68 }

main函数调用

Java写接口自动化处理cookie java编写接口自动化_Java写接口自动化处理cookie_06

1 public class TestApp {
 2     public static void main(String[] args) throws IOException {
 3 
 4         PostTest postTest = new PostTest();
 5         postTest.setUp();
 6         postTest.postapi();
 7 
 8 
 9     }
10 
11 }

TestApp

运行结果

Java写接口自动化处理cookie java编写接口自动化_apache_07


 

       建议,在写测试用例过程中,需要和postman上的请求结果参考,特别是Headers这里的键值对。这里留一个作业,上面我写了一个Get带请求头的封装方法,你可以对照postman中的请求头去写一个单元测试用例去测试下这个带headers的Get方法。

       目前,Java接口自动化测试框架的核心部分,http请求方法的封装已经完成。接下里还有测试日志,测试报告,或者其他需要抽取优化的模块去完成。