前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小白的极简接口“自动化”

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

作者头像
用户5521279
发布2019-07-30 17:19:27
5490
发布2019-07-30 17:19:27
举报
文章被收录于专栏:搜狗测试搜狗测试

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

接口可以说是大多数测试同学每天都接触的。在客户端、前端上,用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=%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();

目标

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

数据准备

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

代码语言: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掌握自动化的手段、思维。但是,自动化也不是遇到测试问题的唯一解决方案。解决问题最高效的方法永远是-行动和思维。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档