java中post请求实战_Java接口自动化测试实战001----get、post方法实现与封装

一、接口测试

1、接口测试流程

根据接口文档编写测试用例

准备测试数据

准备工具(测试工具or接口测试代码)

填写接口信息(接口地址、请求方式等)

准备请求头数据(如果有必要,比如:cookies,Content-Type等)

发起请求,获取接口的相应信息(状态码、响应报文、或者某些特殊的响应头数据)

根据报文判断实际与预期结果是否一致

2、HTTP请求

HTTP请求表示的是从客户端发送到服务器端的请求,HttpGet和HttpPost都是HttpRequest的实现类,属于子类对象,其关系如下图所示:

2722898cd86083aaa6b464b664dceffb.png

3、HTTP响应

HTTP响应表示的是从服务器到客户端的响应,其使用方法有以下几种:

从响应对象中获取返回的数据:getEntity()

从响应对象中获取响应状态码:getStatusLine().getStatusCode()

从响应对象中获取响应头信息:getAllHeaders()

二、接口自动化测试之Get请求

1、get请求的特点

以get方式提交请求到服务器

Get参数不是封装在请求体当中的(由没有setEntity方法可以看出来)

数据长度是有限制的

支持get提交的接口一般都是从服务器上拿下来数据

2、HttpGet请求

HttpGet是模拟实现Http协议下get请求的java类,它关键的api函数有以下几个:

构造函数:HttpGet httpGet=new HttpGet(url);创建一个get对象,以get方式提交接口请求

组合拼接参数:URLEncodedUtils.format(params,”utf-8”);----UrlEncodeFormEntity以表单的形式提交数据.

注意:如果以get提交的接口请求有需要传参数,参数通常直接拼接在url后面的。

3、HttpGet请求代码实现

(1)实现思想

准备测试地址和测试数据,并拼接

创建HttpGet对象,指定接口请求方式: HttpGet httpGet=new HttpGet(url);

设置请求头信息:httpGet.setHeader(String,String);

创建一个可关闭的HttpClient对象:HttpClient httpclient=HttpClients.createDefault();

执行请求获取响应信息:HttpResponse httpresponse=httpclient.execute(get);

获取响应的状态码:int code=httpresponse.getStatusLine().getStatusCode();

获取响应的报文:String result=EntityUtils.toString((httpresponse.getEntity()));

(2)实现代码

根据实现思想,编写测试代码,如下:

1 packagetestInterface.test_V1;2

3 importjava.io.IOException;4

5 importorg.apache.http.HttpResponse;6 importorg.apache.http.client.HttpClient;7 importorg.apache.http.client.methods.HttpGet;8 importorg.apache.http.impl.client.HttpClients;9 importorg.apache.http.util.EntityUtils;10

11 public classdoGet {12

13 public static voidmain(String[] args) {14 //http://127.0.0.1:8080/api/pay/getAllBaseWatercategory?pageNum=1&pageSize=10&name=15 //1、准备URL和测试数据,并拼接成请求的测试地址

16 String url="http://127.0.0.1:8080/api/pay/getAllBaseWatercategory";17 String para="pageNum=1&pageSize=10&name="; //测试数据

18 url=url+"?"+para; //拼接请求地址19

20 //2、创建HttpGet对象,指定接口提交的方式

21 HttpGet get =newHttpGet(url);22

23 //3、设置请求头

24 get.setHeader("Authorization", "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOjMsImxvZ2luVG9rZW4iOiI3YTc3MDYwYy1jMDkzLTRhYzMtYTFlMC04MGJiNGZmYjIyZmMiLCJleHAiOjE1OTM3MDUyNTB9.k2WvdxXOE-XVNdl3zk-Ee8oxDR4Licj5lSC8rhFN2xSPC1lxPDqYkoLnBGfPEB56Aic7_2b100QTmmoByUyfmA");25

26 //4、创建一个可关闭的HttpClient对象

27 HttpClient httpclient=HttpClients.createDefault();28 try{29 //5、执行post请求,获取响应信息(状态码、响应报文、响应头等)。相当于jmeter上点击运行按钮,然后赋值给HttpResponse对象接收

30 HttpResponse httpresponse=httpclient.execute(get);31

32 //6、获取响应状态码和响应报文,并输出

33 int code=httpresponse.getStatusLine().getStatusCode();34 System.out.print(code);35 String result=EntityUtils.toString((httpresponse.getEntity()));36 System.out.print(result);37 } catch(Exception e) {38 e.printStackTrace();39 }40 }41

42 }

三、接口自动化测试之Post请求

1、Post提交的特点

以post方式提交请求到服务器

参数一般是封装到请求体中提交的

参数长度没有长度限制

支持post方式提交的接口往往是把数据提交到服务器上去

2、HttpPost请求

HttpGet是模拟实现Http协议下post请求的java类,它关键的api函数有以下几个:

构造函数:HttpPost httpPost=new HttpPost(url);创建一个post对象,以post方式提交接口请求

设置参数到请求体:post.setEntity(entity,charset);通过此方法将接口参数设置到请求体中。

3、HttpPost请求具体实现

(1)实现思想

准备测试地址和测试数据

使用BasicNameValuePair封装post请求中的参数名称和值:

List parameters=new ArrayList();

parameters.add(new BasicNameValuePair("mobile",mobile));

把请求参数放到请求体中--------定义请求的实体,并把参数传进来,定义编码格式为utf-8:post.setEntity(new UrlEncodedFormEntity(parameters,"utf-8"));

创建HttpPost对象,指定接口请求方式: HttpPost httpPost=new HttpPost(url);

设置请求头信息:httpGet.setHeader(String,String);

创建一个可关闭的HttpClient对象:HttpClient httpclient=HttpClients.createDefault();

执行请求获取响应信息:HttpResponse httpresponse=httpclient.execute(post);

获取响应的状态码:int code=httpresponse.getStatusLine().getStatusCode();

获取响应的报文:String result=EntityUtils.toString((httpresponse.getEntity()));

(2)实现代码

根据实现思想,编写测试代码,如下:

1 packagetestInterface.test_V1;2

3

4 importjava.io.IOException;5 importjava.util.ArrayList;6 importjava.util.List;7

8 importorg.apache.http.HttpResponse;9 importorg.apache.http.client.ClientProtocolException;10 importorg.apache.http.client.HttpClient;11 importorg.apache.http.client.entity.UrlEncodedFormEntity;12 importorg.apache.http.client.methods.HttpPost;13 importorg.apache.http.impl.client.HttpClients;14 importorg.apache.http.message.BasicNameValuePair;15 importorg.apache.http.util.EntityUtils;16

17 public classdoPost {18 public static void main(String[] args) throwsClientProtocolException, IOException {19 //1、准备测试请求的地址和参数(测试数据)

20 String url="http://127.0.0.1:8080/api/user/smsCodeLogin";21 String mobile="18800000000";22 String smsCode="9999";23

24 //2、使用BasicNameValuePair封装post请求中的参数名称和值

25 List parameters=new ArrayList();26 parameters.add(new BasicNameValuePair("mobile",mobile));27 parameters.add(new BasicNameValuePair("smsCode",smsCode));28

29 //3、创建HttpPost对象,指定接口提交的方式

30 HttpPost post=newHttpPost(url);31

32 //4、把请求参数放到请求体中--------定义请求的实体,并把参数传进来,定义编码格式为utf-8

33 post.setEntity(new UrlEncodedFormEntity(parameters,"utf-8"));34

35 //5、创建一个可关闭的HttpClient对象

36 HttpClient httpclient=HttpClients.createDefault();37

38 //6、执行post请求,获取响应信息(状态码、响应报文、响应头等)。相当于jmeter上点击运行按钮,然后赋值给HttpResponse对象接收

39 HttpResponse httpresponse=httpclient.execute(post);40

41 //7、获取响应状态码和响应报文,并输出

42 int code=httpresponse.getStatusLine().getStatusCode();43 System.out.print(code);44 String result=EntityUtils.toString((httpresponse.getEntity()));45 System.out.print(result);

48 }49 }

四、封装之拆分get、 post请求

1、拆分getDemo类

(1)实现步骤

主函数中处理url和参数,将参数封装到map集合中,调用doGet方法传入url和参数;

新建doGet方法,处理map中的参数拼接到地址中,之后执行请求,步骤与之前一样。

(2)实现代码如下:

拆分getDemo类为主函数调用doGet方法的形式,如下所示:

1 public classgetDemo {2

3 public static voidmain(String[] args) {4 //http://114.135.61.188:58088/api/pay/getAllBaseWatercategory?pageNum=1&pageSize=10&name=5 //1、准备URL和测试数据,并拼接成请求的测试地址

6 String url="http://114.135.61.188:58088/api/pay/getAllBaseWatercategory";7 String para="pageNum=1&pageSize=10&name="; //测试数据

8 String pageNum="1";9 String pageSize="10";10 String name="";11 Map parameter=new HashMap();12 parameter.put("pageNum",pageNum);13 parameter.put("pageSize",pageSize);14 parameter.put("name",name);15

16 doGet(url,parameter);17 }18

19 public static void doGet(String url,Mapparameter) {20 //拼接URL

21 Set keys=parameter.keySet();22 int mark=1; //定义一个标志位

23 for(String para : keys) {24 if(mark==1) {25 url=url+"?"+para+"="+parameter.get(para);26 }else{27 url=url+"&"+para+"="+parameter.get(para);28 }29 mark++;30 }31 System.out.print(url);32 //2、创建HttpGet对象,指定接口提交的方式

33 HttpGet get =newHttpGet(url);34

35 //3、设置请求头

36 get.setHeader("Authorization", "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOjMsImxvZ2luVG9rZW4iOiI3YTc3MDYwYy1jMDkzLTRhYzMtYTFlMC04MGJiNGZmYjIyZmMiLCJleHAiOjE1OTM3MDUyNTB9.k2WvdxXOE-XVNdl3zk-Ee8oxDR4Licj5lSC8rhFN2xSPC1lxPDqYkoLnBGfPEB56Aic7_2b100QTmmoByUyfmA");37

38 //4、创建一个可关闭的HttpClient对象

39 HttpClient httpclient=HttpClients.createDefault();40 try{41 //5、执行post请求,获取响应信息(状态码、响应报文、响应头等)。相当于jmeter上点击运行按钮,然后赋值给HttpResponse对象接收

42 HttpResponse httpresponse=httpclient.execute(get);43

44 //6、获取响应状态码和响应报文,并输出

45 int code=httpresponse.getStatusLine().getStatusCode();46 System.out.print(code);47 String result=EntityUtils.toString((httpresponse.getEntity()));48 System.out.print(result);49 } catch(Exception e) {50 e.printStackTrace();51 }52 }53

54 }

2、拆分postDemo类

(1)实现步骤

主函数中处理url和参数,将参数封装到map集合中,调用doGet方法传入url和参数;

新建doPost方法,处理map中的参数并封装到请求中,之后执行请求,步骤与之前一样。

(2)实现代码如下

拆分postDemo类为主函数调用doPost方法的形式,如下所示:

1 public classpostDemo {2 public static void main(String[] args) throwsClientProtocolException, IOException {3 //1、准备测试请求的地址和参数(测试数据)

4 String url="http://114.135.61.188:58088/api/user/smsCodeLogin";5 String mobile="18800000000";6 String smsCode="9999";7 Map parameter=new HashMap();8 parameter.put("mobile",mobile);9 parameter.put("smsCode",smsCode);10 doPost(url,parameter);11

12 }13 public static void doPost(String url, Map parameter) throwsClientProtocolException, IOException {14

15 //2、使用BasicNameValuePair封装post请求中的参数名称和值

16 List parameters=new ArrayList();17 Set keys=parameter.keySet();18 for(String para : keys) {19 parameters.add(newBasicNameValuePair(para,parameter.get(para)));20 }21

22 //3、创建HttpPost对象,指定接口提交的方式

23 HttpPost post=newHttpPost(url);24

25 //4、把请求参数放到请求体中--------定义请求的实体,并把参数传进来,定义编码格式为utf-8

26 post.setEntity(new UrlEncodedFormEntity(parameters,"utf-8"));27

28 //5、创建一个可关闭的HttpClient对象

29 HttpClient httpclient=HttpClients.createDefault();30

31 //6、执行post请求,获取响应信息(状态码、响应报文、响应头等)。相当于jmeter上点击运行按钮,然后赋值给HttpResponse对象接收

32 HttpResponse httpresponse=httpclient.execute(post);33

34 //7、获取响应状态码和响应报文,并输出

35 int code=httpresponse.getStatusLine().getStatusCode();36 System.out.print(code);37 String result=EntityUtils.toString((httpresponse.getEntity()));38 System.out.print(result);

41 }42 }

五、封装get、 post请求到HttpUtil类

1、封装思想

提取GetDemo和PostDemo类中的doGet和doPost方法,封装到HttpUtil类中,方便之后调用,降低耦合性。

2、封装实现

(1)项目环境搭建:创建maven项目----在pom.xml中配置httpclient,配置如下:

1

2 4.0.0

3 com.interface.test

4 testInterface

5 0.0.1-SNAPSHOT

6

7

8

9 org.apache.httpcomponents

10 httpclient

11 4.5.2

12

13

14

(2)封装HttpUtil类,并将GetDemo和PostDemo类中的doGet和doPost方法复制粘贴至HttpUtil类中,并将方法修改为静态方法,方便之后调用,如下所示:

1 public classHttpUtil {2 public static void doGet(String url,Mapparameter) {3 //拼接URL

4 Set keys=parameter.keySet();5 int mark=1; //定义一个标志位

6 for(String para : keys) {7 if(mark==1) {8 url=url+"?"+para+"="+parameter.get(para);9 }else{10 url=url+"&"+para+"="+parameter.get(para);11 }12 mark++;13 }14 System.out.print(url+"\n");15 //2、创建HttpGet对象,指定接口提交的方式

16 HttpGet get =newHttpGet(url);17

18 //3、设置请求头

19 get.setHeader("Authorization", "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOjMsImxvZ2luVG9rZW4iOiI3YTc3MDYwYy1jMDkzLTRhYzMtYTFlMC04MGJiNGZmYjIyZmMiLCJleHAiOjE1OTM3MDUyNTB9.k2WvdxXOE-XVNdl3zk-Ee8oxDR4Licj5lSC8rhFN2xSPC1lxPDqYkoLnBGfPEB56Aic7_2b100QTmmoByUyfmA");20

21 //4、创建一个可关闭的HttpClient对象

22 HttpClient httpclient=HttpClients.createDefault();23 try{24 //5、执行post请求,获取响应信息(状态码、响应报文、响应头等)。相当于jmeter上点击运行按钮,然后赋值给HttpResponse对象接收

25 HttpResponse httpresponse=httpclient.execute(get);26

27 //6、获取响应状态码和响应报文,并输出

28 int code=httpresponse.getStatusLine().getStatusCode();29 System.out.print(code);30 String result=EntityUtils.toString((httpresponse.getEntity()));31 System.out.print(result);32 } catch(Exception e) {33 e.printStackTrace();34 }35 }36 public static void doPost(String url, Map parameter) throwsClientProtocolException, IOException {37

38 //2、使用BasicNameValuePair封装post请求中的参数名称和值

39 List parameters=new ArrayList();40 Set keys=parameter.keySet();41 for(String para : keys) {42 parameters.add(newBasicNameValuePair(para,parameter.get(para)));43 }44

45 //3、创建HttpPost对象,指定接口提交的方式

46 HttpPost post=newHttpPost(url);47

48 //4、把请求参数放到请求体中--------定义请求的实体,并把参数传进来,定义编码格式为utf-8

49 post.setEntity(new UrlEncodedFormEntity(parameters,"utf-8"));50

51 //5、创建一个可关闭的HttpClient对象

52 HttpClient httpclient=HttpClients.createDefault();53

54 //6、执行post请求,获取响应信息(状态码、响应报文、响应头等)。相当于jmeter上点击运行按钮,然后赋值给HttpResponse对象接收

55 HttpResponse httpresponse=httpclient.execute(post);56

57 //7、获取响应状态码和响应报文,并输出

58 int code=httpresponse.getStatusLine().getStatusCode();59 System.out.print(code);60 String result=EntityUtils.toString((httpresponse.getEntity()));61 System.out.print(result);62

63

64 }65 }

六、总结

1、概述

2、实现post、get请求

3、拆分post、get请求

4、将doGet和doPost方法封装到HttpUtil类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值