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请求,在进行对比吧
java自动化测试-http请求get的更多相关文章
- java自动化测试-http请求结合抓包工具实际应用
继上文我编写了java的get请求与post请求之后,我现在开始写一下实际操作 很多人有疑问,接口测试的代码是哪里来的,怎么来的呢?看得见吗?我来做一个简单的演示 我们这里简单介绍一下抓包工具,对于一 ...
- java自动化测试-http请求post
继上文的get请求http://www.cnblogs.com/xuezhezlr/p/7667995.html的简单讲解后,这篇文章大概说一下我所遇到的主要的post请求以及他的测试代码 上文介绍到 ...
- Java自动化测试框架-03 - TestNG之Test Group篇 - 我们一起组团打怪升级(详细教程)
简介 其实这篇文章的group宏哥在上一篇中就提到过,但是就是举例一笔带过的,因此今天专门有一篇文章来讲解Group的相关知识.希望大家茅塞顿开 ,有着更进一步认识和了解测试组. 一.Test Gro ...
- Java发送Http请求并获取状态码
通过Java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断. try { URL u = new URL("http://10.1.2.8:8080/fqz/page ...
- selenium2 Webdriver + Java 自动化测试实战和完全教程
selenium2 Webdriver + Java 自动化测试实战和完全教程一.快速开始 博客分类: Selenium-webdriverselenium webdriver 学习selenium ...
- java 实现https请求
java 实现https请求 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问.但是,如果该站点的证书未经权威机构的验证,JSSE将拒绝信任该证书从 ...
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
- 通过java发送http请求
通常的http请求都是由用户点击某个连接或者按钮来发起的,但是在一些后台的Java程序中需要发送一些get或这post请求,因为不涉及前台页面,该怎么办呢? 下面为大家提供一个Java发送http请求 ...
- 深入浅出Java 重定向和请求转发的区别
深入浅出Java 重定向和请求转发的区别 <span style="font-family:FangSong_GB2312;font-size:18px;">impor ...
随机推荐
- my new day in CNblog
感谢大家 今天正式在博客园平台开启我的第三个技术面博客 之前一直坚持在csdn平台撰文(http://blog.csdn.net/github_38885296)欢迎参观:) 因为觉得博客园知名度虽不 ...
- 转: 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)
转载请注明出处: volatile用处说明 在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的.而随着JVM的成熟和优化,现在在多线程 ...
- 【1414软工助教】团队作业2——需求分析&原型设计 得分榜
题目 团队作业2--需求分析&原型设计 作业提交情况情况 本次作业所有团队都按时提交作业. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目2:单元测试 ...
- 【Alpha阶段】第二次scrum meeting
每日任务: ·1.本次会议为第二次Meeting会议: ·2.本次会议于今日上午08:30第五社区五号楼下召开,会议时长15min. 一.今日站立式会议照片: 二.每个人的工作: 三.工作中遇到的困难 ...
- Swing-setAlignmentX()用法-入门
先看下API: public void setAlignmentX(float alignmentX) 设置垂直对齐方式. 参数: alignmentX - 新的垂直对齐方式 网上关于这个函数的详细情 ...
- 201521123065《Java程序设计》第六周学习总结
1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 1.2 可选:使用常规方法总结其他上课内容. 1.publ ...
- 201521123076《java程序设计》第三周学习总结
1. 本周学习总结 2.书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...
- 201521123029《Java程序设计》第十三周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1.网络基础 1.1 比较ping www.baidu.com与ping cec.jmu. ...
- 如何使用Flexbox和CSS Grid,实现高效布局
CSS 浮动属性一直是网站上排列元素的主要方法之一,但是当实现复杂布局时,这种方法不总是那么理想.幸运的是,在现代网页设计时代,使用 Flexbox 和 CSS Grid 来对齐元素,变得相对容易起来 ...
- mongoose api 图表整理
一.背景 今天看 mongoose 的基础 API,参考了下面的链接做了图表以供查阅. 参考资料: http://www.cnblogs.com/xiaohuochai/p/7215067.html ...