接口测试入门(3)--使用httpClient进行登录用例操作/set-cookies验证/ List<NameValuePair>设置post参数/json解析

(最近学的都是很基础的接口测试,都是基于UI界面可见的接口,就是发请求,接收响应,分析返回的结果,校验,对共通模块进行封装,仅此而已,其实做自动化的思路基本都是如此,UI也是。)

现在开始用httpClient比较规范的开始一个获取公司list的案例(必须要先登录)。先导入httpclient的包就不说了,网上很多。

注意:必须要设置 User-Agent  和   Referer  ,否则会报错。

 * 思路: * 可能需要处理的问题: * (1)登录状态如何保持 * (2)登录后页面重定向问题 * (3)post参数如何传递 * (4)获取的响应是json字符串,如何解析成需要的格式,并提取出公司列表名称(name)

(1)(2)httclient会自动处理,(4)可见第一节介绍(3):用post.setEntity传入参数,用List<NameValuePair> 设置参数
post.setHeader("User-Agent", "Chrome");
post.setHeader("Referer", "passport.**.com");
List<NameValuePair> data = new ArrayList<NameValuePair>();
data.add(new BasicNameValuePair("username", "17710192***"));
data.add(new BasicNameValuePair("password", "123***"));
data.add(new BasicNameValuePair("type", "login"));
data.add(new BasicNameValuePair("bind", "false"));
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(data);post.setEntity(formEntity);

完整的代码如下:

package com.wyy.demo;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.http.*;

import org.apache.http.Header;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.List;
public class CompanyList {

    public static void main(String[] args) throws Exception {

     /*  1.设置登录和登录后要进入的接口网址*/

        String loginUrl = "http://passport.36kr.com/***/sign_in";    //设置登录页面的接口URL
        String companyUrl = "http://rongtest06.36kr.com/*********"; //设置获取公司列表的URL
        String loginVerify = "http://rongtest06.36kr.com/*****";

     /*2.进行登录*/
        HttpClient httpClient = HttpClients.createDefault();  //定义一个连接器
        HttpPost post = new HttpPost(loginUrl);  //设置请求发送方式
        post.setHeader("User-Agent", "Chrome");
        post.setHeader("Referer", "passport.36kr.com");
        List<NameValuePair> data = new ArrayList<NameValuePair>();
        data.add(new BasicNameValuePair("username", "17710192039"));
        data.add(new BasicNameValuePair("password", "123123123"));
        data.add(new BasicNameValuePair("type", "login"));

        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(data);
        post.setEntity(formEntity);   //UrlEncodedFormEntity类创建的对象可以模拟传统的HTML表单传送POST请求中的参数

     /* 通过响应头中的cookie来检验cookie是否形成*/
        HttpResponse response = httpClient.execute(post);//执行post请求
        HttpEntity entity = response.getEntity();   //打印出响应的内容
        System.out.println("登录后返回的内容" + EntityUtils.toString(entity, "utf-8"));
        System.out.println("第一条cookies是" + response.getFirstHeader("set-cookie"));
        System.out.println("最后一条cookies是" + response.getLastHeader("set-cookie"));
        Header[] hs = response.getHeaders("Set-Cookie");
        System.out.println("cookies的数量是" + hs.length);

      /* 3.get请求登录后身份认证的接口,判断是否登录成功*/

            HttpGet get1 = new HttpGet(loginVerify);
            HttpResponse response2 = httpClient.execute(get1);
            HttpEntity entity2 = response2.getEntity();
            System.out.println("登录成功后的返回信息:" + EntityUtils.toString(entity2, "utf-8"));

        /*4.获取公司列表*/
            HttpGet get = new HttpGet(companyUrl);
            HttpResponse response1 = httpClient.execute(get);
            HttpEntity entity1 = response1.getEntity();
            String e = EntityUtils.toString(entity1, "utf-8");
            System.out.println("获取公司列表返回的json信息为:" + e);

      /* 5.对返回的信息进行json解析*/

        Result result = com.alibaba.fastjson.JSONObject.parseObject(e, Result.class);//将bean和json中的key一一对应
        JSONObject jsonObject = JSONObject.fromObject(e);//一层层剥离,首先是将jsonstring转化为json对象
        String a = jsonObject.getString("data");//提取出json对象的key:data的值,为json字符串
        JSONObject jsonObject1 = JSONObject.fromObject(a);//将data的值,json字符串转化为json对象
        JSONArray array = jsonObject1.getJSONObject("page").getJSONArray("data");//获取company对象个数
            for (int i = 0; i < array.size(); i++) {
                System.out.println("公司列表为:"+result.data.page.data.get(i).company.name);//for循环输出company的name值,ok!!!!!
            }

        }
    }
Result.class内容如下:
package com.wyy.demo;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by wyy on 2016/4/7.
 */
public class Result {
    public int code;
    public Data1 data;

    public static class Data1{
       public Page page;

   }

   public  static class  Page{
        public List<Data2> data = new ArrayList<>();

   }

    public static class Data2{
       public Comp company;

   }

   public static class Comp{
       public String operationStatus;
       public Date updateDate;
       public String name;
    }
}
cookies知识小普及:
Cookie相关的Http头:有 两个Http头部和Cookie有关:Set-Cookie和Cookie。响应请求头中: Set-Cookie由服务器发送,它包含在响应请求的头部中。它用于在客户端创建一个Cookie请求头中:Cookie头由客户端发送,包含在HTTP请求的头部中。注意,只有cookie的domain和path与请求的URL匹配才会发送这个cookie。

注意:以上所有的操作都用的同一个连接,保持同一个实例用户。

以上都是很不规范的接口测试用例,有很多问题:1.如何将不同身份的用户的登录进行封装,在beforeClass中操作即可2.方法和用例混合,哪些应该封装成方法,用例类又该如何组织3.如何将域名和接口封装成访问的url4.如何将不同类的请求如 get,不带参数的post,带参数的post,put,delete封装起来5.配置文件如何设置(主要为账号和域名)6.如何将返回response进行封装7.对常见的json格式解析封装8.断言封装,校验结果

提取共通部分进行封装是弱点...

时间: 2024-11-10 16:21:16

接口测试入门(3)--使用httpClient进行登录用例操作/set-cookies验证/ List<NameValuePair>设置post参数/json解析的相关文章

接口测试(二)—HttpClient

使用HttpClient进行接口测试,所需要使用的相关代码 HttpClient进行接口测试所需jar包:httpclient.jar.httpcore.jar.commons-logging.jarGet请求://创建httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();//如果发送的是GET请求,创建HttpGet对象HttpGet httpget = new HttpGet("http://www.

C# 中使用System.Net.Http.HttpClient 模拟登录博客园 (GET/POST)

一. System.Net.Http.HttpClient简介 System.Net.Http 是微软.net4.5中推出的HTTP 应用程序的编程接口, 微软称之为“现代化的 HTTP 编程接口”, 主要提供如下内容: 1. 用户通过 HTTP 使用现代化的 Web Service 的客户端组件: 2. 能够同时在客户端与服务端同时使用的 HTTP 组件(比如处理 HTTP 标头和消息), 为客户端和服务端提供一致的编程模型. 个人看来是抄袭apache http client ,目前网上用的

07_android入门_采用HttpClient的POST方式、GET方式分别实现登陆案例

1.简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议. 2.功能介绍 以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页. (1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等) (2)支持自动转向 (3)支持 HTTPS 协议 (4)支持代理服务器等 3

HttpClient+jsoup登录+解析 163邮箱

找了几个,只有这个靠谱,用的是httpclient4,另外还需要commons-lang和jsoup包 http://jsoup.org/ http://www.oschina.net/code/snippet_128625_12592?p=2 ------------------------------------------------------------ 如题: 支用用jsoup解析页面非常方便,当时jsoup做登录就比较麻烦,反正我不知道怎么做. HttpClient做登录比较方便因

httpclient 模拟登录 及线程安全

//登录csdn//        String uri = "https://passport.csdn.net/account/login";//        String html = HttpUtil.DownHtml(uri);        //        <input type="hidden" name="lt" value="LT-207426-moK0sGnfCa9aqijJKeLYhFDYiEe2id&

Android入门笔记 - 网络通信 - HttpClient

今天我们来学习怎么使用 Apache 为android提供的网络通信接口,如果要使用http协议,就需要使用 HttpClient. 使用HttpClient要比使用 HttpURLConnection更简单一些,我们来看看代码: 1. 使用get方法获取网络图片: 调用: mBtnGet.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bitmap picture =

使用HttpClient模拟登录人人网+发状态+日志+分享+留言

事先使用HttpAnalyzer对人人网抓包观察,得到相关事件的数据.然后使用HttpClient模拟http请求相关操作.以下代码是今天刚测试过.欢迎新手拿去玩玩.注意:首先要在工程里导入httpclient的包,在apache官网上应该有的下载: http://hc.apache.org/downloads.cgi,目前是4.0+版本:其次记得将主函数里的账号和密码改为自己的,即可完成. import java.io.IOException; import java.io.Unsupport

MongoDB快速入门学习笔记7 MongoDB的用户管理操作

1.修改启动MongoDB时要求用户验证加参数 --auth 即可.现在我们把MongoDB服务删除,再重新添加服务 mongod --dbpath "D:\work\MongoDB\data" --logpath "D:\work\MongoDB\log\mongodb.log" --install --serviceName "MongoDB" --auth 2.创建用户,并使用创建的用户登录打开shell操作界面,默认test数据,再查看所

Unix/Linux环境C编程入门教程(41) C语言库函数的文件操作详解

?? 上一篇博客我们讲解了如何使用Linux提供的文件操作函数,本文主要讲解使用C语言提供的文件操作的库函数. 1.函数介绍 fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const char * mode); 函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态. mode有下列几种形态字符串: r 打开只读文件,该文件必须存