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

2019-07-30 17:19:27 浏览数 (1)

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

接口可以说是大多数测试同学每天都接触的。在客户端、前端上,用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我们已经拿到了针对上面天气接口的请求代码

代码语言:javascript复制
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("http://notify.mse.sogou.com/weather?city=天津")
  .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();

目标

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

数据准备

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

代码语言:javascript复制
String[] citys = {"北京","上海","天津","重庆","广州","成都","杭州","南京","深圳"};

编码

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

代码语言:javascript复制
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();
    }
  }
}

结果

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

代码语言:javascript复制
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的更多方法对请求和响应做更多的验证……

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

写在最后

解决问题最高效的方法永远是 — 行动和思维

小编作为一个刚工作一年多的新手,其实经验也没有很丰富,只是喜欢研究,喜欢尝试,喜欢去用技术解决问题。所以这一年在项目之余写了PC端的工具、Android的工具,也做过接口的监控和自动化、客户端的自动化……

作为测试,有很多工具能提升我们的效率,像文中提到的Postman。还有更多小工具、小软件都能在客户端、服务端起到“自动”的作用,帮助我们减少工作中重复的工作。当然前提你要发现它们,并且真正想要解决它们。

自动化是能够极大的提升我们的效率,就像是机器人,但是很多影视作品已经告诉我们: 机器人的高度智能也会成为灾难小编很提倡测试er掌握自动化的手段、思维。但是,自动化也不是遇到测试问题的唯一解决方案。解决问题最高效的方法永远是-行动和思维。

0 人点赞