一、准备工作
需要做接口测试,肯定得需要一个已调通的接口或服务,在这里我们暂时就只考虑HTTP的接口吧。由于是练习,大家可以在自己的应用系统中通过Fiddler抓取请求url,其实这个url就可以近似看作是一个接口的地址;或者在网上找一个公开的API,基于这个API来做试验。
1、F12抓取请求url
对于Web系统,我们可以通过浏览器的调试工具直接获取到请求url,比如chrome和IE的F12,Firefox的firebug等等,对于移动端应用,可以通过Fiddler等抓包工具获取请求url。
如下图,获取简书个人主页的关注接口URL,可以通过Chrome的F12来获取(按键盘F12,打开调试工具,操作页面,查看newwork页签的请求地址):
这样我们就可以将url拷贝出来:
url:http://www.jianshu.com/notifications?type=follows&page=1
说明:?后面部分是参数
响应结果返回的是json格式的数据:
挖个坑:这个url在未登录简书时,是请求不到预期结果的,那么接口测试如何跳过登录验证?先挖个坑在这里,后面章节专门来讲。
2、Fiddler抓取请求url
Fiddler等抓包工具不仅可以抓Web应用的请求,还可以抓移动端应用的请求(用法:打开Fiddler后,在浏览器的操作,对应的请求记录都会在Fiddler中显示,移动端需要额外设置下Fiddler和手机代理),Fiddler会比较直观的列出请求的域名、url、状态、请求信息、响应结果等信息,如下图:
(对于Fiddler的基础用法还不熟悉? 可以百度找教程看,基础的用法很简单的,相信要进入到接口自动化测试的童鞋,这个基础肯定都有了吧)
3、找一个公开的API
考虑到有些童鞋可能之前没基础,一下子搞一个要登录的接口,有点懵,另外也可能没有注册简书,用简书的API也不太方便,所以还是要找一个不用登录的公开API。随便google了一下,找到了一个比较稳定的查询人民币近期汇率的接口:http://api.fixer.io/latest?base=CNY,在浏览器中请求下,看下效果:
二、进入正题
首先对于接口自动化测试,我们要和利用接口工具请求接口测试区分开来,既然是自动化测试,那么肯定是要用代码的方式去实现接口请求与响应结果验证这整个过程,不然找个接口工具就可以去验证了。
1. 新建Maven项目
使用eclipse还是IDEA?无所谓,习惯哪个用哪个,两者大同小异。
2. 配置Maven pom.xml,添加依赖
这一步这一章节可以省略,因为用的是java.net相关工具类来实现http请求,所以暂时无需导入其他依赖包。
3. 新建package及测试类
项目结构如下图:
4. 代码实现
具体的代码实现步骤我在代码中都加了很详细的注释,大家直接看代码就行了。
package com.alany.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
/**
* @date: 2017年12月4日
* @author: alany
*
*/
public class ApiRequestTest {
public static void main(String[] args){
String url = "http://api.fixer.io/latest?base=CNY";
try {
//1、创建URL
URL reqUrl = new URL(url);
//2、打开和URL之间的连接
URLConnection connection = reqUrl.openConnection();
//3、设置通用的请求属性,可选
connection.setRequestProperty("accept", "*/*");
connection.setRequestProperty("connection", "Keep-Alive");
connection.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.155 Safari/537.36");
//4、建立连接
connection.connect();
//5、获取响应结果
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = in.readLine()) != null) {
response.append(line);
}
System.out.println(response.toString());
//6、用完了记得关闭输入流
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 测试运行
运行一下看下结果:
{"base":"CNY","date":"2017-12-01","rates":{"AUD":0.19978,"BGN":0.24898,"BRL":0.49425,"CAD":0.19479,"CHF":0.14883,"CZK":3.2494,"DKK":0.94741,"GBP":0.11218,"HKD":1.1821,"HRK":0.96183,"HUF":39.949,"IDR":2047.5,"ILS":0.52828,"INR":9.7586,"JPY":17.021,"KRW":163.91,"MXN":2.8254,"MYR":0.61896,"NOK":1.2572,"NZD":0.22086,"PHP":7.6222,"PLN":0.53633,"RON":0.58949,"RUB":8.8728,"SEK":1.2665,"SGD":0.20387,"THB":4.937,"TRY":0.59475,"USD":0.1513,"ZAR":2.0739,"EUR":0.12731}}
ok,普通的get接口请求就这样实现了,上面实现的get请求方式,要是是post呢,那该怎么实现?上面只是拿到响应结果,怎么跟预期结果对比校验呢?是不是还有很多问题……别急!学习要循序渐进,这些疑问在后面会陆续解答。
【下章节预告】:接口自动化测试(五):Http框架搭建
原文来自下方公众号,转载请联系作者,并务必保留出处。
想第一时间看到更多原创技术好文和资料,请关注公众号:测试开发栈