首页 技术 正文
技术 2022年11月13日
0 收藏 711 点赞 3,344 浏览 4464 个字

(最近学的都是很基础的接口测试,都是基于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.断言封装,校验结果

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,086
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,561
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,410
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,183
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,820
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,903