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 ...
随机推荐
- 转: 【Java并发编程】之十四:图文讲述同步的另一个重要功能:内存可见性
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17288243 加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另 ...
- MySQL (六)--外键、联合查询、子查询
1 外键 外键:foreign key,外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称为外键. 1.1 增加外键 外键可以在创建表的时候或创建表之后增 ...
- 201521123067 《Java程序设计》第7周学习总结
201521123067 <Java程序设计>第7周学习总结 1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 Q1.ArrayList代码分析 ...
- 201521123112《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- jsp+servlet对于单选按钮和复选框取值并且存放到数据库中
index.jsp <form action="index.gj?method=toradio" method="post"> <div al ...
- 三级菜单的实现(python程序)
这是刚开始写程序,三级菜单的程序基本是用字典实现,很low,以后学习了其他更好的东西,我会继续上传,然后争取在我水平高深之后,把这个简单的东西实现的狠高大上. _author_ = "zha ...
- JDBC操作数据库之连接数据库
通过JDBC向数据库中添加数据的时候,使用insert语句实现数据的插入,再SQL语句中的参数可以用占位符"?"来替代,然后通过PreparedStatement对象或者State ...
- Maven搭建SpringMVC+MyBatis+Json项目(多模块项目)
一.开发环境 Eclipse:eclipse-jee-luna-SR1a-win32; JDK:jdk-8u121-windows-i586.exe; MySql:MySQL Server 5.5; ...
- [PHP源码阅读]number_format函数
上次讲到PHP是如何解析大整数的,一笔带过了number_format的处理,再详细阅读该函数的源码,以下是小分析. 函数原型 string number_format ( float $number ...
- 基于c编写的关于随机生成四则运算的小程序
基于http://www.cnblogs.com/HAOZHE/p/5276763.html改编写的关于随机生成四则运算的小程序 github源码和工程文件地址:https://github.com/ ...