java自动化测试-http请求get

  

  首先我10.1过来自己玩通了讨鬼转极,看了电视剧白夜追凶,换了工作小组,这段时间确实比较少的更新博客,确实有点不勤奋,我先自我检讨

  我就不赘述java的安装了,这个是比较简单的,有必要的话以后在讲

  对于测试而言,一般的我们日常所接触到的请求是http请求和https请求,而http请求大部分可以分为get和post两种请求,所以接口的自动化测试也是从这里开始说起

  本次先说的是get请求,至于其两者的区别可以在以后讲解后在进行对比

  get请求是我们较为常见的请求,其本质就是我们在浏览器中输入地址进行请求,下面是java的代码

import java.io.*;
import java.net.*;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
    public Map<String,Object> doGet(String url,Map parameterMap,String Cookie) throws Exception {//传入参数为url,参数map和header中的cookie
String url_parameterMap = url;
if(parameterMap.size()>0){
url_parameterMap = url +"?"+getMapString(parameterMap);//url拼接,将map的参数和url拼接为完整的url
}
URL localURL = new URL(url_parameterMap);
URLConnection connection = openConnection(localURL);
HttpURLConnection httpURLConnection = (HttpURLConnection)connection;
httpURLConnection.setRequestProperty("Accept-Charset", charset);
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpURLConnection.setRequestProperty("Cookie", Cookie);//设置一些header
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
StringBuffer resultBuffer = new StringBuffer();
String tempLine = null;
if (httpURLConnection.getResponseCode() >= 300) {//这里是对http返回码的异常处理
new util.txtwrite().writetxtInt(url+" "+httpURLConnection.getResponseCode(),txtwrite);
throw new Exception("HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
}
try {
inputStream = httpURLConnection.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);
while ((tempLine = reader.readLine()) != null) {
resultBuffer.append(tempLine);
}
} finally {
if (reader != null) {
reader.close();
}
if (inputStreamReader != null) {
inputStreamReader.close();
}
if (inputStream != null) {
inputStream.close();
}
}
String mapStr = resultBuffer.toString();//这个是返回值,是string格式的,可以转化为任意格式,这段代码是转为json-》map
JSONObject jasonObject = JSONObject.parseObject(mapStr);
Map<String,Object> map = (Map<String,Object>)jasonObject;
return map;
}
public String getMapString(Map parameterMap) throws Exception{
StringBuffer mapStr = new StringBuffer();
Set set = parameterMap.keySet();
Iterator it = set.iterator();
int len = set.size();
System.out.println(len);
int n =1;
while(it.hasNext()) {
if(n != len) {
String str = it.next().toString();
String str_value = parameterMap.get(str).toString();
String str_map = str + "=" +URLEncoder.encode(str_value,charset);
mapStr.append(str_map);
mapStr.append("&");
}
if(len == n){
String str = it.next().toString();
String str_value = parameterMap.get(str).toString();
String str_map = str + "=" +URLEncoder.encode(str_value,charset);
mapStr.append(str_map);
}
++n;
}
return mapStr.toString();
}

这段代码就可以做http的get请求了,先简单讲讲再说具体调用
get请求的特点是,如果要传a=1,b=2,则会把所有的参数和参数值的等式用&符号连接起来,在与url进行拼接为新的url,类似于http://+host+url?a=1&b=2这个形式,然后在进行get请求,我们只需要做的是,把结果进行收集,格式的话可以重写代码来实现多个格式的返回,这样一个基类的代码就写完了,需要注意的是,http请求一般是由请求头,请求的体来构成的,专业点就是header和body,一般的可以用httpURLConnection.setRequestProperty("Cookie", Cookie)这种参数直接把需要放的参数放到请求头里,请求体的话就是上文提到的a=1&b=2了,其实质就是在浏览器里输入http://+host+url?a=1&b=2
  我们可以在自己的调用这个方法,利用返回值进行一系列工作,下面是一种调用方式
public static void zhuce(String mobile,String name,String Cookie,int gradeId) throws Exception {
applyParams = new HashMap<String, Object>();
applyParams.put("student.receiveEmailType", "1");
applyParams.put("student.name",name);
applyParams.put("student.sex", "1");
applyParams.put("student.gradeType", "1");
applyParams.put("student.gradeId", ""+gradeId);
util.HttpUtil httpDoGet = new util.HttpUtil();
String url="http://www.baidu.com/admin/serviceCenter/student/studentManage!newStudent.action";
String x=httpDoGet.doPost(url, applyParams, Cookie).toString();
}
当然,我的代码大部分是以map形式组合参数的,这里的话还是比较基础的组合之一,其实质还是map利用getmapstring这个函数,转化为 参数1名=参数1值&参数2名=参数2值的字符串
在实际工作中可以转化,也可以加上Java的一些逻辑来做,比如下面这段代码
public Map<String,Object> doGet(String url,Map parameterMap) throws Exception {
return doGet(url, parameterMap, "");
}
  这就是在自动化工程中的处理方式,我写了传入cookie的get请求,但是有的时候并不需要传参,该怎么办?
我们要做的是,在保留原有逻辑的基础上进行修改,若我已经有一个较为全面的方法,则可以像上面的代码一样,穿一个空值即可,在代码中我可以传2个参数,也可以在需要传cookie的时候把它加在第三个参数中
那么,如果要是,我后面的代码要多传参数又该怎么办呢?只需要当成一个新方法来写啊,,,然后原有方法再来重新我的新方法即可
总的来说就可以了,下一次讲post请求,在进行对比吧