httpclient + TestNG 接口自动测试 第二章

请求地址由参数加参数签名形式生成,例如:

http://ip/server?method=getPlans&planDate=2014-08-25&cinemaId=101&uid=remote&enc=d0fe8420c641dd87d4165c09fe1d0c70&time_stamp=1408960607250

1.构建url

  1)首先构建参数对

public static HashMap<String, String> cinemas() {
        HashMap<String, String> params = new HashMap<String, String>();
        params.put("method", "getCinemas");
        params.put("uid", StartTest.USERNAME);
        return params;
    }

   2)生成包含参数签名的参数对

public static List<NameValuePair> getFormparams (HashMap<String, String> params) {
        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
        for (Entry<String, String> e : params.entrySet()) {
            formparams.add(new BasicNameValuePair(e.getKey(), e.getValue()));
        }
        formparams.add(new BasicNameValuePair("time_stamp", String.valueOf(new Date().getTime())));
        formparams.add(new BasicNameValuePair("enc", GetENC.getEnc(formparams, StartTest.PASSWORD)));
        return formparams;
    }

  3)生成请求URL

    public static URI getUrl(List<NameValuePair> formparams, String HOST, String PATH) {
        URI uri = null;
        try {
            uri = new URIBuilder().setScheme("http").setHost(HOST)
                    .setPath(PATH).setParameters(formparams).build();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        return uri;
    }

2.构建完URL后发送请求

public static HttpEntity getEntity(HashMap<String, String> params, String HOST, String PATH) {
        HttpEntity entity = null;
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try {
            // 创建httpget请求.
            HttpGet httpget = new HttpGet(getUrl(getFormparams(params), HOST, PATH));
            // 执行get请求
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                // 将响应放入entity载体
                entity = response.getEntity();
                 if (entity != null) {
                        entity = new BufferedHttpEntity(entity);
                        if(StartTest.log) {
                            ResultsLog.writefile(EntityUtils.toString(entity, "UTF-8"), StartTest.path);
                        }
                    }
            } finally {
                response.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 断开连接
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return entity;
    }

3.解析目标JSON数据,返回目标数组

public static String[] targetArray(String sourcejson, String targetfield) {

    String targetArray[] = null;
    JSONObject js = JSONObject.fromObject(sourcejson);
    if (sourcejson.contains("data")) {
        JSONArray datajsonArray = js.getJSONArray("data");
        targetArray = new String[datajsonArray.size()];
        for(int i=0; i<datajsonArray.size(); i++){
            targetArray[i] = (JSONObject.fromObject(datajsonArray.getString(i))).getString(targetfield);
        }
    }  else {
        targetArray[0] = js.getString("errCode") + "----" + js.getString("errMsg");
    }
    return targetArray;
}

4.执行请求URL并解析返回JSON数据,获取目标值构成数组

    public static String[]  targetValueArray(HashMap<String, String> params, String targetfield) {
        String targetarray[] = null;
        HttpEntity entity = GetPost.getEntity(params, StartTest.ROUND_HOST,
                StartTest.ROUND_PATH);
        try {
            targetarray = JSONParsing.targetArray(
                    EntityUtils.toString(entity, "UTF-8"), targetfield);
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return targetarray;
    }

至此从构建URL-->发送get请求-->解析JSON数据获取目标值已完成

时间: 2024-10-30 16:09:43

httpclient + TestNG 接口自动测试 第二章的相关文章

httpclient + TestNG 接口自动测试 第一章

自动化接口实现选择排期--->选择座位--->创建订单--->取消订单/出票流程: 影讯接口:城市列表.影院列表.影厅列表.座位列表.已售座位列表.排期列表: 订单接口:创建订单.查询订单.出票.取消订单: 逻辑上分四层实现: StartTest.java 开始执行测试 OrderScheme.java 订单流程  CityScheme.java 影讯流程 OrderInterface.java 构造订单接口参数 CityInterface.java 构造影讯接口参数 GetPost.j

httpclient + TestNG 接口自动测试 第三章

此后就是数据准备与逻辑实现,就不在赘述了 此次自动化脚本并未太多用到TestNG,仅仅用于他调试起来方便: 本章记录一些用到的辅助方法: 1.将返回值打印出来的get请求,用于测试或查看接口返回内容 public static void get(HashMap<String, String> params, String HOST, String PATH) { CloseableHttpClient httpclient = HttpClients.createDefault(); try

httpclient + TestNG 接口自动测试 第六章

1.httpclient处理post提交xml格式数据请求 public static void post(String HOST, String PATH, String reqXml) { // 创建httpClient实例 CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httppost HttpPost httppost = new HttpPost(getUrl(HOST, PATH)); // 设置

httpclient + TestNG 接口自动测试 第五章

1.实现对java配置文件properties的读取.写入与更新操作 package com.config; /** * 实现对Java配置文件Properties的读取.写入与更新操作 */ import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.F

httpclient + TestNG 接口自动测试 第四章

1.客户端向服务器传递参数中有的需要传递Json格式数据,现提供个HashMap转json格式数据方法 public static String hashjson(HashMap<String, String> map) { String string = "[{"; for (Iterator<Entry<String, String>> it = map.entrySet().iterator(); it.hasNext();) { Entry&

Kali Linux 无线渗透测试入门指南 第二章 WLAN 和固有的不安全性

第二章 WLAN 和固有的不安全性 作者:Vivek Ramachandran, Cameron Buchanan 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 建筑越高,地基就要打得越深. – 托马斯·坎佩斯 没有什么伟大的东西能在脆弱的基础上构建.在我们的语境中,固有的不安全性之上不能构建出安全. WLAN 在设计上拥有特定的不安全性,它们可被轻易利用,例如,通过封包注入,以及嗅探(能够在很远处进行).我们会在这一章利用这些缺陷. 2.1 回顾 WLAN 帧 由于这本书处理无线方面

JAVA: httpclient 详解——第二章;

相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.http.包下的,所以我一般用后者: httpclient可以处理长连接,保存会话,重连接,以及请求过滤器,连接重用等等... 下面是测试代码(全部总结来自官方文档,以及翻译) 须要下载核心包:httpclient-4.3.4.jar ,也可在官网下载:http://hc.apache

接口自动化:HttpClient + TestNG + Java(二) - 第一个接口测试:get请求

在上一篇中,我们搭建好了HttpClient + TestNG + Java的自动化接口测试环境,这一篇我们就赶紧开始编写我们的第一个接口测试用例. 本篇会对问题解决的思路进行更详尽的阐述. 2.1 确定被测接口 首先一个现实的问题,我们要有一个待测接口来验证我们自动化方案的可行性. 我们可以选择在自己的本地去部署一套待测接口,当然也可以选择公网上的接口去进行测试,这里我们选择后者. 我选定的是apishop这个站点:https://www.apishop.net/ 这个站点提供非常多,种类齐全

Kali Linux Web 渗透测试秘籍 第二章 侦查

第二章 侦查 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 在每个渗透测试中,无论对于网络还是 Web 应用,都有一套流程.其中需要完成一些步骤,来增加我们发现和利用每个影响我们目标的可能的漏洞的机会.例如: 侦查 枚举 利用 维持访问 清理踪迹 在 Web测试场景中,侦查是一个层面,其中测试者必须识别网络.防火墙和入侵检测系统中所有可能组件.它们也会收集关于公司.网络和雇员的最大信息.在我们的例子中,对于 Web 应用渗透测试