接口测试入门(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.断言封装,校验结果
提取共通部分进行封装是弱点...
接口测试入门(3)--使用httpClient进行登录用例操作/set-cookies验证/ List<NameValuePair>设置post参数/json解析的更多相关文章
- 接口测试入门(2)--get和post初级请求/使用httpclient做一个获取信息list的请求(需要登录才可以)
抛去测试自动化的架构来,直接写单个测试用例的思路如下: 1.获取测试case的接口,对每一个接口的请求方式(get/post/delete/put)进行分析,是否需要参数(不同的用例设置不同的参数,如 ...
- 接口测试(二)—HttpClient
使用HttpClient进行接口测试,所需要使用的相关代码 HttpClient进行接口测试所需jar包:httpclient.jar.httpcore.jar.commons-logging.jar ...
- 接口测试入门(5)----新框架重构,使用轻量级的HTTP开发库 Unirest
之前的第一套框架在使用过程中发现存在以下问题: 一. 框架1缺点: 1.登陆的账号每个人写的不一样,一旦用户在测试环境被修改,则导致用例失败 2.每次读取访问网址,需要在同一个java文件下切换测试 ...
- Easyui入门视频教程 第09集---登录完善 图标自定义
目录 ----------------------- Easyui入门视频教程 第09集---登录完善 图标自定义 Easyui入门视频教程 第08集---登录实现 ajax button的使用 ...
- Easyui入门视频教程 第08集---登录实现 ajax button的使用
目录 ----------------------- Easyui入门视频教程 第09集---登录完善 图标自定义 Easyui入门视频教程 第08集---登录实现 ajax button的使用 ...
- HttpClient+jsoup登录+解析 163邮箱
找了几个,只有这个靠谱,用的是httpclient4,另外还需要commons-lang和jsoup包 http://jsoup.org/ http://www.oschina.net/code/sn ...
- http协议&接口规范&接口测试入门
http协议 请求: 请求行:请求方法.url(协议名://ip;端口/工程名/资源路径).协议版本 请求头 :键值对 请求正文 响应: 响应行:协议版本.响应状态码.响应状态码描述 响应头 :键值对 ...
- 记一次HTTPClient模拟登录获取Cookie的开发历程
记一次HTTPClient模拟登录获取Cookie的开发历程 环境: springboot : 2.7 jdk: 1.8 httpClient : 4.5.13 设计方案 通过新建一个 ...
- httprunner的简介、httprunner做接口测试入门知识,使用httprunner模拟get请求及post请求
一.httprunner的简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种 ...
随机推荐
- noip普及组2007 Hanoi双塔问题
Hanoi双塔问题 描述 给定A,B,C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的.现要将这些圆盘移到C柱上,在移动 ...
- jsp基础与提高(EL、JSTL)
EL表达式 1.1 为什么需要EL表达式和JSP标签 JSP的产生在一定程度上将Servlet中负责表现的功能抽取了出来,但JSP页内嵌入的Java代码也破坏了页面中负责表现的页面结构,特别是当运算逻 ...
- 【JSP 标签】选择判断c:choose
在JSP页面中对 根据一个属性的多个可能的值进行相应的输出 <%@ page language="java" contentType="text/html; cha ...
- 记录一次https证书申请失败的案例
部分站点由于使用了大量的域名,会导致 auto-ssl 配置的内存不够用,导致证书申请失败.需要做以下调整 nginx.conf 中 lua_shared_dict auto_ssl 调整为 128m ...
- Redis在电商中的实际应用-Java
示例代码用Jedis编写. 1. 各种计数,商品维度计数和用户维度计数 说起电商,肯定离不开商品,而附带商品有各种计数(喜欢数,评论数,鉴定数,浏览数,etc),Redis的命令都是原子性的,你可以轻 ...
- UEditor编辑器第一次赋值失败的解决方法
网上查了很多方式都不是很好用,最后想到了这样的处理方式 首先在js中定义一个全局变量 var ue = null; 然后在初始化显示编辑器的时候js这样写 if (ue == null) { ue = ...
- hibernate 基本配置文件及CRDU的操作和基本的HQL查询
以下所有内容保存在 E:\JavaWebSrc\firstHibernate 目录中,项目名称为firstHibernate,使用IDEA打开,项目所需jar包在 F:\常用综合\常用jar包\hi ...
- photoshop软件应用手记
------------------------常用图片格式------------------------ 位图和矢量图 位图也叫点阵图,是由一个个的方形的像素点排列在一起拼接而成的,位图在放大时, ...
- CSS3四个自适应关键字——fill-available、max-content、min-content、fit-content
前面的话 一般地,有两种自适应:撑满空闲空间与收缩到内容尺寸.CSS3将这两种情况分别定义为'fill-availabel'和'fit-content'.除此之外 ,还新增了更细粒度的'min-con ...
- sql执行机制
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp38 sql执行机制 1.对于普通的sql语句只有where条件的执行机制 ...