Java接口自动化测试实践(上)

     众所周知,在现在这个移动互联网越来越发达的时代,瘦客户端和胖服务端的要求下,服务端的测试也变得越来越重要。而服务端的实现通常是通过HTTP请求的API和服务来实现的,而服务由于实现起来比较复杂,所以大多公司使用的还是HTTP请求的API接口来处理底层数据。在前面的博文中我们讲过了如何使用PHPUNIT框架和pythonurllib2reqests模块,来进行接口自动化测试。

     可是很多同学比较善长java,如果想用这个来做接口自动化测试的化,还是有点儿麻烦的。因为没有具体的函数,需要利用HttpClient来模拟HTTP请求,并对接口的返回值进行处理才行。下面我们就讲解,如何用java来封装对HTTP请求的API来做自动化测试:

一,  GET方式的请求

Get类请求分为有参数和无参数两种情况,如果没有参数,则直接通过接口调用地址进行请求,接收返回结果;如果有参数,则把参数添加进来,对请求的结果进行筛选。

   

       public static String GetRequests(String url,String params)

       {

              StringBuffer response = new StringBuffer();

        HttpClient client = new HttpClient();

        HttpMethod method = new GetMethod(url);

        try {

            if (StringUtils.isNotBlank(params))

      //get请求参数做了http请求默认编码,好像没有任何问题,汉字编码后,就成为%式样的字符串

            method.setQueryString(URIUtil.encodeQuery(params));

            client.executeMethod(method);

            BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(),"utf-8"));

            String line;

            while ((line = reader.readLine()) != null) {

                response.append(line);

            }

            reader.close();

    } catch (URIException e) {

           System.out.println("执行HTTP Get请求时,编码查询字符串“" + params + "”发生异常!");

    } catch (IOException e) {

           System.out.println("执行HTTP Get请求" + url + "时,发生异常!");

    } finally {

            method.releaseConnection();

    }

      return response.toString();

}

代码分析:

(1)新建HttpClientGetMethod,通过GetMethod来创建URL请求相关的URL和参数,然后通过HttpClient发起HTTP请求,接收返回结果。

(2)如果接口请求的参数不为空,则通过setQueryString()将参数和URL拼接到一起。

(3)通过HttpClientgetResponseBodyAsStream()来获取请求结果,并将结果添加到StringBuffer里面,最后以字符串的形式来返回。

 二,    Post 类请求接口

   Post请求都是向服务器提求表单的,所以要封装相应的HTTP请求头,并且把相应的参数添加到请求中,具体代码如下:

 

       public static String PostRequests(String url, Map params, Map header) {

        StringBuffer response = new StringBuffer();

        HttpClient client = new HttpClient();

        PostMethod method=new PostMethod(url);

        int i;

         //封装HTTP请求头

        if(header != null && header.size()>0){

            Set key = header.keySet();

            for (Iterator ? it = key.iterator(); it.hasNext();) {

                String s = (String) it.next();

                method.addRequestHeader(s,header.get(s));

            }

        }

        //设置Http Post数据

        if (params != null) {            

               NameValuePair[] postData = new NameValuePair[params.size()]; 

            i=0;

                for (Map.Entry entry : params.entrySet()) {

                          postData[i] = new NameValuePair(entry.getKey(), entry.getValue());

                    i++;

                }

              method.addParameters(postData); 

          }

        try {

                client.executeMethod(method);

                if (method.getStatusCode() == HttpStatus.SC_OK) {

                 BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream()));

                        String line;

                        while ((line = reader.readLine()) != null) {

                                 response.append(line);

                        }

                        reader.close();

                }

        } catch (IOException e) {

               System.out.println("执行HTTP Post请求" + url + "时,发生异常!"+e);

        } finally {

                method.releaseConnection();

        }

        return response.toString();

}

代码分析:

(1)新建HttpClientPostMethod,通过PostMethod来创建URL请求相关的URL和参数,然后通过HttpClient发起HTTP请求,接收返回结果。

(2)通过addRequestHeader()将HTTP请求的头,添加到HttpClient中,从而达到对HTTP请求头的封装。

(3)通过NameValuePair来组织接口数据,通过addParameters()将参数添加到HTTPClient中。

(4)通过HttpClientgetResponseBodyAsStream()来获取请求结果,并将结果添加到StringBuffer里面,最后以字符串的形式来返回。

 

posted @ 2015-11-17 16:04  潜龙9527  阅读(336)  评论(0编辑  收藏  举报