手记

小白的极简接口“自动化”

接口可以说是大多数测试同学每天都接触的。在客户端、前端上,用Fiddler/Charles等工具查看接口、修改接口;在服务端,通过终端等工具查看接口触发的后端逻辑,通过连接数据库查看数据库存储……


在面对接口的时候,经常遇到需频繁修改请求数据查看响应。这个时候,就特别“渴望”有一个自动化脚本,能够遍历所有的请求参数~

生成“自动化”代码 

这里有个测试天气的接口:
http://notify.mse.sogou.com/weather?city=天津



如果验证这个接口时可能要频繁修改city字段,很多同学都通过Fiddler/Chales等工具拦截请求,但是实在太慢了;另外可能有些同学会用一些测试工具,比如Postman,这样就直接修改Postman中对应Key的value值可以了。


其实Postman还有一个隐藏的小功能,十分实用,点一下按键就可以生成请求的代码。这个隐蔽的按键在`Send`按钮下方,只需要点击一下Code就能拿到这个请求对应的一段代码(图中生成的代码是基于Java OK HTTP的代码)。

目前Postman可生成的请求代码已经覆盖了十几种语言,并且几乎覆盖了全部的主流方式(例如:Python的Request、http.client,Java的OK HTTP等),下图为现在Postman支持的主流语言/方法的情况

只要是有任意一门语言基础的小伙伴,选择自己擅长的语言并且选择一种请求方法,就可以获取到需要验证的接口代码啦~



做接口“自动化”

通过Postman我们已经拿到了针对上面天气接口的请求代码

OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("http://notify.mse.sogou.com/weather?city=%E5%A4%A9%E6%B4%A5")  .get()  .addHeader("User-Agent", "PostmanRuntime/7.15.0")  .addHeader("Accept", "*/*")  .addHeader("Cache-Control", "no-cache")  .addHeader("Postman-Token", "96b83a66-7ea4-49aa-a471-373f63cdd89e,a43cfc9d-b927-45b7-8ecf-63a6d593d097")  .addHeader("Host", "notify.mse.sogou.com")  .addHeader("cookie", "IPLOC=CN1100")  .addHeader("accept-encoding", "gzip, deflate")  .addHeader("Connection", "keep-alive")  .addHeader("cache-control", "no-cache")  .build();
Response response = client.newCall(request).execute();

我们想要达到的目标是,遍历全国主要省市的天气。在这之前我们应该是已经拿到了主要/重要省市的“数据字典”,比如:北京、上海、天津、重庆、广州、成都、杭州、南京、深圳。

最简单的方式就是把这些城市做成一个数组:

String[] citys = {"北京","上海","天津","重庆","广州","成都","杭州","南京","深圳"};

然后结合上面Postman给我们生成的请求代码,就可以实现一个简单的随机测试目标城市天气接口返回的自动化啦~

import java.io.IOException;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import okhttp3.ResponseBody;
public class TestOkhttp {  public static void main(String[] args) {     String[] citys = {"北京","上海","天津","重庆","广州","成都","杭州","南京","深圳"};    int cityLenth = citys.length;     OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()      .url("http://notify.mse.sogou.com/weather?city=" + citys[(int)(Math.random()*(cityLenth))])      .get()      .addHeader("User-Agent", "PostmanRuntime/7.15.0")      .addHeader("Accept", "*/*")      .addHeader("Cache-Control", "no-cache")      .addHeader("Postman-Token", "96b83a66-7ea4-49aa-a471-373f63cdd89e,eb14884c-8b97-463e-b1f8-157419041ba8")      .addHeader("Host", "notify.mse.sogou.com")      .addHeader("cookie", "IPLOC=CN1100")      .addHeader("accept-encoding", "gzip, deflate")      .addHeader("Connection", "keep-alive")      .addHeader("cache-control", "no-cache")      .build();     try {      Response response = client.newCall(request).execute();      ResponseBody responseBody = response.body();       // 输出response      System.out.println("Response: " + responseBody.string());      // 输出相应状态码      System.out.println("Status: " + response.code());    } catch (IOException e) {      e.printStackTrace();    }  }}

执行上面的程序,我们就通过随机城市,请求到了这个接口的相应状态和结果。


Response: {"iploc":"CN1100","area":"杭州","statuscode":"02","url":"http:\/\/m.tianqi.sogou.com\/?fr=0005-003q","status":"阴","pmstatus":"优","temperature":"30","pm":"43"}Status: 200

是不是很简单就实现了一个接口的“自动化”测试小脚本呢。这里只是做了单次的接口测试,当然也可以通过循环等方式遍历所有的城市case;另外也可以用okhttp的更多方法对请求和响应做更多的验证……

如果你觉得对你的工作有帮助,可以行动起来,尝试一下。


2人推荐
随时随地看视频
慕课网APP