接口测试入门(2)--get和post初级请求/使用httpclient做一个获取信息list的请求(需要登录才可以)
抛去测试自动化的架构来,直接写单个测试用例的思路如下:
1.获取测试case的接口,对每一个接口的请求方式(get/post/delete/put)进行分析,是否需要参数(不同的用例设置不同的参数,如登录时的用户名密码设置)
2.获取响应内容,进行json解析,获取状态或内容,或列表,与实际结果进行对比,特别需要根据功能的逻辑进行处理
用例设计和小贴士:
1.和UI自动化类似,自动化一般只使用于正向用例,覆盖常见的情景
2.接口的请求和UI自动化不一样,只要获得相应的接口就可以,不用像UI自动化一样一步步按照操作步骤来,可以直接请求接口,这点要比UI自动化方便的多。
3.如果接口返回的数据有问题,可以直接把接口输入浏览器中,查看返回的结果是否正确
4.在真正做接口测试时回发现,UI界面变动总是很频繁,但是后台接口是很少有改变的,这样看来接口测试的性价比还是很高的,接口变化后及时和开发进行沟通,进行维护!!
------------------------------------------------------------华丽丽的分割线----------------------------------------------------------------------------
第一次写用例时的过程 (~ o ~)~ 遇到的各种坑
初次练手的小用例:(先使用最原始的方法 java.net.URL 进行练习,注意输出流的处理)
输出流的处理,用读取一个文档的内容为例:(因为在测试自动化过程中对于需要读取多个测试数据时经常用到,所以需要掌握哦~~)

File f = new File("a.txt"); //定义一个文档
//InputStream是一个标准的输入接口
//对应读取数据的类有:FileInputStream ObjectInputStream等
InputStream in = new BufferedInputStream(new FileInputStream(f));
byte[] b = new byte[1024];
while(in.read()!=-1){
try {
in.read(b);
System.out.println("读入buffer的信息:"+new String(b));
} catch (IOException e) {
e.printStackTrace();
}
}
// InputSteream和OutpurStream是针对基于字节(byte)输入输出设计的,实际应用中常常需要读
// 写的是基于字符(char ,Unicode 2 个字节)的,java.io.Reader和java.io.Writer就是所有读
// 写字符数据流的父类。
//FileReader作为Reader对象的数据源
BufferedReader brin = new BufferedReader(new FileReader("a.txt"));
//Stream与Reader之间的转换
InputStreamReader inreader = new InputStreamReader(in);//<--Stream输入
BufferedReader reader = new BufferedReader(inreader);//使用Reader进行读取
System.out.println(reader.readLine());

输出流和输入流处理可见 http://www.tuicool.com/articles/U7VFFr
实例1:(get请求)
思路为:
1.设置url并获取连接器
2.打开连接
3.使用连接器设置传送的参数
4.通过输出流对输出的信息按行读取,over

package com.wyy.demo; import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection; /**
* Created by wyy on 2016/3/30.
*/
public class Get { public static String doGet() throws Exception{
URL url=new URL("http://36kr.com/asynces/comments/hot.json");//通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)
URLConnection con=url.openConnection(); //打开连接
HttpURLConnection urlConnection=(HttpURLConnection)con; // HttpURLConnection继承自URLConnection urlConnection.setRequestProperty("Accept-Charset", "utf-8");
urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//设置传送的内容类型 // 以输入流的形式获取返回内容
InputStream inputStream = null; //InputSteream和OutpurStream是针对基于字节(byte)输入输出设计的
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
//BufferedReader 流能够读取文本行 , 通过向 BufferedReader 传递一个 Reader 对象 , 来创建一个 BufferedReader 对象
StringBuffer resultBuffer = new StringBuffer();
String tempLine = null; if (urlConnection.getResponseCode() >= 300) {
throw new Exception("请求不成功,响应码是 " + urlConnection.getResponseCode());
} try {
inputStream = urlConnection.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);//使用Reader进行读取
System.out.print(reader.readLine());//按行进行读取 while ((tempLine = reader.readLine()) != null) {
resultBuffer.append(tempLine);
} } finally { if (reader != null) {
reader.close();
} if (inputStreamReader != null) {
inputStreamReader.close();
} if (inputStream != null) {
inputStream.close();
} } return resultBuffer.toString();
} }

结果为json显示如下:

{
"status": {
"code": "200",
"message": "返回成功"
},
"data": {
"hot_commnets": [
{
"id": 367685,
"content": "谈什么配置 没有神秘海域4 没有黑魂3 没有古墓丽影10 少哪个都不买",
"created_at": "2016-05-11T09:04:12.159+08:00",
"user": {
"id": 323192,
"display_name": "邮票君",
"avatar": "https://krplus-pic.b0.upaiyun.com/201512/18/c1c9848caa4a417ca027e8ebb07c3678.jpg!480"
},

实例2:(post请求) 注意参数的设置可以用: String parameters="name=***& passport=***"; 这个是最初级的,不是很好用

package com.wyy.demo; import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection; /**
* Created by wyy on 2016/3/30.
*/
public class Post {
public static String doPost() throws Exception {
String parameterData = "username=1771019****&password=12312******&" +
"ok_url=****"; URL url = new URL("http://passport.36kr.com/******/sign_in");
URLConnection con= url.openConnection();
HttpURLConnection httpURLConnection = (HttpURLConnection)con; httpURLConnection.setDoOutput(true);
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Accept-Charset", "utf-8");
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpURLConnection.setRequestProperty("Content-Length", String.valueOf(parameterData.length()));
httpURLConnection.setRequestProperty("User-Agent", "Chrome");
httpURLConnection.setRequestProperty("Referer", "passport.36kr.com"); OutputStream outputStream = null;
OutputStreamWriter outputStreamWriter = null;
InputStream inputStream = null;
InputStreamReader inputStreamReader = null;
BufferedReader reader = null;
StringBuffer resultBuffer = new StringBuffer();
String tempLine = null; try {
outputStream = httpURLConnection.getOutputStream();
outputStreamWriter = new OutputStreamWriter(outputStream); outputStreamWriter.write(parameterData.toString());
outputStreamWriter.flush(); if (httpURLConnection.getResponseCode() >= 300) {
throw new Exception("请求不成功,响应码是 " + httpURLConnection.getResponseCode());
} inputStream = httpURLConnection.getInputStream();
inputStreamReader = new InputStreamReader(inputStream);
reader = new BufferedReader(inputStreamReader);
System.out.print(reader.readLine()); while ((tempLine = reader.readLine()) != null) {
resultBuffer.append(tempLine);
} } finally { if (outputStreamWriter != null) {
outputStreamWriter.close();
} if (outputStream != null) {
outputStream.close();
} if (reader != null) {
reader.close();
} if (inputStreamReader != null) {
inputStreamReader.close();
} if (inputStream != null) {
inputStream.close();
} } return resultBuffer.toString();
} }

此时,由于使用的urlConnection属于比较老的版本,并没有对登录后的重定向进行处理,所以会报错如下:
{"redirect_to":"/oauth/authorize?client_id=d80f4c1aaba936ced6e346d8232ccf6b9c573f9bb7&redirect_uri=https%3A%2F%2Frong*****..com%2Foauth%2Fcallback&response_type=code&state=http%3A%2F%2Fz****%2Fprojects%3Fpage%3D1%26per_page%3D20"}
Process finished with exit code 0
而且注意,如果url中带有https,那么会报错SSL相关信息,需要额外处理,此处使用http请求就足够了。。
接口测试入门(2)--get和post初级请求/使用httpclient做一个获取信息list的请求(需要登录才可以)的更多相关文章
- 对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束。
这段时间折腾了哈java web应用的压力测试,部署容器是tomcat 7.期间学到了蛮多散碎的知识点,及时梳理总结,构建良好且易理解的知识架构把它们组织起来,以备忘.对web应用开发者来说,我们很关 ...
- httprunner的简介、httprunner做接口测试入门知识,使用httprunner模拟get请求及post请求
一.httprunner的简介 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试.性能测试.线上监控.持续集成等多种 ...
- http协议&接口规范&接口测试入门
http协议 请求: 请求行:请求方法.url(协议名://ip;端口/工程名/资源路径).协议版本 请求头 :键值对 请求正文 响应: 响应行:协议版本.响应状态码.响应状态码描述 响应头 :键值对 ...
- 接口测试入门(3)--使用httpClient进行登录用例操作/set-cookies验证/ List<NameValuePair>设置post参数/json解析
(最近学的都是很基础的接口测试,都是基于UI界面可见的接口,就是发请求,接收响应,分析返回的结果,校验,对共通模块进行封装,仅此而已,其实做自动化的思路基本都是如此,UI也是.) 现在开始用httpC ...
- python入门-分类和回归各种初级算法
引自:http://www.cnblogs.com/taichu/p/5251332.html ########################### #说明: # 撰写本文的原因是,笔者在研究博文“ ...
- 每次收到的 HTTP 请求,就可以打开一个 SqlSession,返回一个响应,就关闭它
mybatis – MyBatis 3 | 入门 http://www.mybatis.org/mybatis-3/zh/getting-started.html 作用域(Scope)和生命周期 理解 ...
- httpclient接口测试完整用例以及获取信息的方法
原文地址https://blog.csdn.net/fhaohaizi/article/details/78088075 原文地址https://blog.csdn.net/fhaohaizi/art ...
- Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
- ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求
我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...
随机推荐
- noip普及组2007 守望者的逃离
守望者的逃离 描述 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大岛上.为了杀死守望者,尤迪安开始对这个荒岛施咒,这座 ...
- .NET入行之工作后
成长这条路上,有一些事已经渐渐的消失模糊的脑海里,而有一些事,则历历在目,终生铭记. 一切都是从大二下学期快结束的那段培训课程开始的,从此也算是入门了,这也是一条不归路. 在.NET入行之工作前一文中 ...
- flannel 的连通与隔离 - 每天5分钟玩转 Docker 容器技术(61)
上一节我们在 flannel 网络中部署了容器,本节讨论 flannel 的连通和隔离特性. flannel 网络连通性 测试 bbox1 和 bbxo2 的连通性: bbox1 能够 ping 到位 ...
- QQ推广神器:批量加群、好友、群发。支持批量搜索关键词加群分享下载
V2.1版本更新说明: 1.新增邮箱导出功能 2.新增一键添加关键词查询结果所有群 3.新增好友验证数学自动计算 4.新增好友验证答案判断 ------------------------------ ...
- linux shell 之终端读写文件数据流和重定向>,<,<<,>>
终端实现文件中数据流的读写: 重定向命令列表如下: 命令 说明 command > file 将输出重定向到 file.将终端数据写到文件file中 command < file 将输入重 ...
- Java中面向字符的输入流
Java中面向字符的输入流 2016-12-04 Java程序员联盟 Java程序员联盟 Java程序员联盟 微信号 javalm 功能介绍 莫道君行早,更有早行人 全心敲代码,天道自酬勤 字符流是针 ...
- Java虚拟机说明书
JVM运行原理: Class的加载 过程:加载-验证-准备-解析-初始化-执行-卸载 加载:class文件(二进制字节流)被类加载器加载到内存中,将这个字节流所代表的静态存储结构转化为方法区的运行时数 ...
- sizeof(void)有什么用
偶然发现在C中sizeof(void)是合法的,于是,对它的作用产生了疑问.查阅资料在GNU文档中发现如下解释: In GNU C, addition and subtraction operatio ...
- grep Pocket Reference读记
1 简介 grep的基本命令格式如下: grep [options] [regexp] [filename] 如果regexp中含有空格,应该使用单引号或双引号括起来.单引号和 ...
- vue项目引入bootstrap、jquery
在进行vue的学习,项目中需要引入bootstrap.jquery的步骤. 一.引入jQuery 在当前项目的目录下(就是package.json),运行命令 cnpm install jquery ...