美文网首页
二、发送请求,获取响应数据

二、发送请求,获取响应数据

作者: 木沐__ | 来源:发表于2018-01-30 14:01 被阅读0次

    接口测试的第一步就是需要发送接口请求,获取到响应数据

    因为每个请求内部实现都是一样的,不同的只是请求参数、地址等信息,所以为了可复用,需要先封装请求方式,即HTTP的常用请求GET、POST,然后不同的接口通过调用该方法获取到响应数据

    分析请求内容如下:

    • 一个请求包括头部,请求URL,请求参数等
    • 固定的头部可写在配置文件中(如ContentType等),可变的头部通过参数传递(如token等)
    • 请求URL包括域名和地址,每个请求的地址是不确定的,所以会通过参数传递
      但是域名只有几个,包括开发环境,测试环境,预发环境和生产环境,所以可写在配置文件中

    前提条件:
    先在pom文件中添加依赖包httpclient、json-lib

            <dependency>
                <groupId>org.apache.httpcomponents</groupId>
                <artifactId>httpclient</artifactId>
                <version>4.5.2</version>
            </dependency>
    
            <dependency>
                <groupId>net.sf.json-lib</groupId>
                <artifactId>json-lib</artifactId>
                <version>2.1</version>
                <classifier>jdk15</classifier>
            </dependency>
    
    

    如何通过HttpClient发送请求呢?

    1. 创建HttpClient对象
    2. 创建请求方法的实例,并指定请求URL
      如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象
    3. 发送请求参数,可调用HttpGet、HttpPost共同的setParams方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity方法来设置请求参数
      添加请求头,可通过addHeader()方法
    4. 调用HttpClient对象的execute()发送请求
    5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头
      调用HttpResponse的getEntity()方法可获取服务器的响应内容
    6. 释放连接。无论执行方法是否成功,都必须释放连接
    public JSONObject post(String url, List<NameValuePair> params, List<NameValuePair> headers, String encoding){
    
            JSONObject response = null;
            try{
                CloseableHttpClient httpClient = HttpClients.createDefault();
                HttpPost httpPost = new HttpPost(url);
    
                JSONObject json = new JSONObject();
                for(int i=0;i<params.size();i++){
                    json.put(params.get(i).getName(),params.get(i).getValue());
                }
                StringEntity entity = new StringEntity(json.toString(),encoding);
                httpPost.setEntity(entity);
    
                if(headers != null){
                    for(int i=0;i<headers.size();i++){
                        httpPost.addHeader(headers.get(i).getName(),headers.get(i).getValue());
                    }
                }
    
                HttpResponse httpResponse = httpClient.execute(httpPost);
                if(httpResponse.getStatusLine().getStatusCode() == 200){
                    String result = EntityUtils.toString(httpResponse.getEntity());
                    response = JSONObject.fromObject(result);
                }
                
                httpPost.abort();
                httpClient.close();
    
            }catch (Exception e){
                e.printStackTrace();
    
            }
            return response;
    
        }
    

    将域名放在配置文件中

    上面说过URL的域名会变,所以为了避免每次都修改很多文件,我们需要将它们写入配置文件中,通过配置文件读写
    注:地址替换方法封装详见地址替换方法封装
    代码修改如下:

    地址替换.png
    get请求如下:
    public JSONObject get(String projName,String url, List<NameValuePair> params, List<NameValuePair> headers, String encoding){
    
            JSONObject response = null;
            try{
                String uri = DNSReplacement.replacedURL(url,projName)+"?"+ EntityUtils.toString(new UrlEncodedFormEntity(params,encoding));//拼接域名和地址和?后参数
    
                CloseableHttpClient httpClient = HttpClients.createDefault();
                HttpGet httpGet = new HttpGet(uri);
    
                if(headers != null){
                    for(int i=0;i<headers.size();i++){
                        httpGet.addHeader(headers.get(i).getName(),headers.get(i).getValue());
                    }
                }
    
                HttpResponse httpResponse = httpClient.execute(httpGet);
                if(httpResponse.getStatusLine().getStatusCode() == 200){
                    String result = EntityUtils.toString(httpResponse.getEntity());
                    response = JSONObject.fromObject(result);
                }
    
                httpGet.abort();
                httpClient.close();
    
            }catch (Exception e){
                e.printStackTrace();
    
            }
            return response;
    
        }
    

    如此,我们就基本完成了请求的封装,得到一个公用类(Request),当然我们还可以再封装一层,将get、post方法变成private,然后增加一个方法,通过传入的参数中增加请求类型(GET or POST),根据请求类型调用不同方法实现
    其他可根据自己项目情况做不同修改以适应项目需求

    参考文章:
    https://www.cnblogs.com/boris-et/p/7922267.html
    http://blog.csdn.net/zknxx/article/details/51598852

    相关文章

      网友评论

          本文标题:二、发送请求,获取响应数据

          本文链接:https://www.haomeiwen.com/subject/iucfzxtx.html