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数据获取目标值已完成

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。