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

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

作者: 木沐__ | 来源:发表于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

相关文章

  • 爬虫的概念

    爬虫是模拟浏览器发送请求,获取响应 爬虫的流程 url--->发送请求,获取响应--->提取数据---》保存数据 ...

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

    接口测试的第一步就是需要发送接口请求,获取到响应数据 因为每个请求内部实现都是一样的,不同的只是请求参数、地址等信...

  • Requests 模块

    作者:Gakki 前言 requests 模块的作用是用来发送 http 请求,获取响应数据 1. 响应内容 r....

  • 基于TestNG的接口框架简介

    目录 一、搭建TestNG+Maven+IDEA接口测试环境二、发送请求,获取响应数据三、创建接口实例,编写测试用...

  • JMeter:后置处理器_初识

    后置处理器是用于发送请求之后,对请求响应做一些处理,或者抓取响应数据,比如提取响应报文中的内容,获取Cookie、...

  • HTTP协议

    一、HTTP协议 二、请求流程 搜集数据 生成http请求报文 发送请求报文 接收响应报文 解析响应报文 展现结果

  • 10.数据提取

    数据提取概述 知识点 了解 响应内容的分类 了解 xml和html的区别 1. 响应内容的分类 在发送请求获取响应...

  • 02-发送请求-request基本使用

    requests作用 发送网络请求,返回响应数据requests中文文档 发送get请求发送带header的请求发...

  • Requests

    Requests库 目录一、Requests基础二、发送请求与接收响应(基本GET请求)三、发送请求与接收响应(基...

  • 解决provisional headers are shown问

    在使用vue+axios的post发送请求时,在响应的回调函数中获取不到响应的数据,代码如下所示 打开chrom中...

网友评论

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

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