接口测试前必需知识了解:
1.接口测试的原理:
无论用那种测试方法,接口测试的原理是通过测试程序模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做出处理然后再把应答报文发送给客户端,客户端接收应答报文这一个过程。
2.前期知识储备
2.1 http知识了解(详见 http://www.blogjava.net/zjusuyong/articles/304788.html 写的很棒!)
http端口号 80,不输入默认就是, https端口号 443,基于SSL
https加密原理:
需要基本了解的:
(1)请求头
编程中需要来设置的:
post.setHeader("User-Agent", "Chrome");
post.setHeader("Referer", "passport.36kr.com");
String XSRFTOKEN = responseCookie.getXSRFTOKEN(response);
相关介绍:
Referer:来访者的地址,即上一个页面的地址,程序中一般设置为host,防止跨域
User-Agent:是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。
XSRFTOKEN:为了防范CSRF,需要做的是不要将http(s)请求的参数放在get中,而应该放在post/put/delete中。然后在页面上加上再一个变化的token(每次刷新页面后都会改变,不同于之前的token),请求服务器时都验证该token,正常的client端,在发送request的时候会包含这一项,和服务器端对上号,就起到了验证的作用。对于特定的页面需要进行此处的验证。
(2)响应头
response.getFirstHeader("set-cookie"));//输出cookie的头部
response.getLastHeader("set-cookie"));//输出cookie的尾部
Header[] head=response.getAllHeaders("set-cookie"); //获取全部的cookies
2.2 post和get
使用版本4.3的话,设置请求方法用:
HttpGet/HttpPost ,老版本是用 MethodGet/MethodPost
使用httpclient导入的包:
通过get和post方式调用http接口,总结如下:
* get方式调用http接口的步骤:
* 1.构造HttpClient实例
* 2.构造GetMethod实例
* 3.执行getMethod,调用http接口
* 4.读取内容
* 5.处理返回的内容
* 6.释放连接
*
post:提交表单,收藏或取消收藏,自己看接口请求的header显示,但是注意:可能分为有参数的,和无参数的(参数的具体设置如下)
* post方式调用http接口的步骤:
* 1.构造HttpClient实例
* 2.构造PostMethod实例
* 3.把参数值放入到PostMethod对象中
* 方式1:利用NameValuePair类
List<NameValuePair> data = new ArrayList<NameValuePair>();
data.add(new BasicNameValuePair("username", "1771019*****"));
data.add(new BasicNameValuePair("password", "1111111"));
* 方式2:直接用PostMethod实例对象的addParameter方法
* 4.执行postMethod,调用http接口
* 5.读取内容
* 6.处理返回的内容
* 7.释放连接
2.3 接口相关知识了解(如何获取接口)
对于移动端的,可参照我的博客上篇描述获取HTTPS请求,使用fiddler抓取,手机绑定本地的IP,端口8888,可抓取一般的请求,抓取期间不能断开fiddler
在PC端可以通过浏览器直接获取,如下:
根据返回的response可以判断出到底是哪个接口,或者问开发
2.4 json解析
返回的结果都是json格式的,一般需要先转化为 String类型,然后根据阿里的json解析获取我们想要的值,具体下节进行说明。
初次练手的小用例:(先使用最原始的方法 java.net.URL 进行练习,注意输出流的处理)
实例1:(get请求)
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 yikai on 2016/3/30. */ public class Get { public static String doGet() throws Exception{ URL url=new URL("http://blog.csdn.net/geekstart/svc/GetCategoryArticleList?id=1715873&type=foot");//通过统一资源定位器(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; InputStreamReader inputStreamReader = null; BufferedReader reader = null; 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); 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(); } }
实例2:(post请求)
package com.wyy.demo; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; /** * Created by yikai on 2016/3/30. */ public class Post { public static String doPost() throws Exception { String parameterData = "readauth?url=/alwayswyy/p/5235280.html"; URL url = new URL("http://***); 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())); 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); 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(); } }