zoukankan      html  css  js  c++  java
  • 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里面,最后以字符串的形式来返回。

     

  • 相关阅读:
    李超线段树板子
    蒟蒻的平衡树学习笔记(=.=
    P2254 [NOI2005] 瑰丽华尔兹
    表达式求值学习笔记
    二分和一些其它算法的奇妙组合
    《wwx》的学习总结(题解)
    set的学习笔记
    题解 P4913 【深基16.例3】二叉树深度
    AGC002F Leftmost Ball
    CSP&&NOIP2020 游记
  • 原文地址:https://www.cnblogs.com/eagleking0318/p/6520754.html
Copyright © 2011-2022 走看看