Skip to content

Touch 0.0.8 版本文档

翡青 edited this page Feb 20, 2017 · 3 revisions

Touch

线上后门与接口测试工具


  • 你还在这样测试接口吗? 写一个Servlet/API/Controller?

然后这样:

测试:IRecommendService.getEngineRecFeeds()接口:

  • 你还在这样给线上留后门吗?

然后这样:

手动触发缓存定时加载的LoadBlacklistTask.scheduleTask()方法:

这你就太OUT啦, 有写这些代码的时间还不如去看几集非诚勿扰, 下面我们就让你彻底解放双手!


Touch

是不是总想到线上的接口/方法摸一把?

  • 现在 你只需这样:

留后门.

  • 或者这样:

接口测试.

  • 然后就可以这样:
  • 或者这样

然后你的方法就完美的执行了.


原理

看到了吗? 不是Spring MVC(我擦, 那也太重了)、不是Vap(那也太反人类了, 一个方法只能有两个对象[参数], 我就是想多搞几个, 你打我呀!), 我们的名字叫Touch, 来大家跟我一起喊: "Touch 摸, Touch 摸, Touch 摸 ..."(后面的小朋友你们记住了吗). 我们的目标是在你测试接口和给线上留后门的时候彻底解放右手(😯 噢不, 是双手...). 我们会根据你在浏览器输入的 URI+QueryString 自动映射成类中对应的 方法名+参数 (只要该方法被打上了@Touch注解, 该类就变成了OnTouch类, 你就可以时不时的上去摸一把😍).


使用

我们怎么得到他呢? 不用998, 不用99.8, 只要0.0.8(-SNAPSHOT), 马上带回家. 既能么么哒, 又能啪啪啪.

  • 来, 约个炮先: pom.xml
    <groupId>com.vdian.touch</groupId>
    <artifactId>touch</artifactId>
    <version>0.0.8-SNAPSHOT</version>
  • web.xml

on_touch_class 参数配置你想Touch的类

  • @Touch: 为你想要touch的方法打上标, 然后它就属于你啦

这样, 你就可以愉快的touch一把:


高级

1. 同名函数

@Touch注解内提供了touchPattern参数, 用于区分同名函数, 但要注意touchPattern要和浏览器内的URI对应起来:

  • touchPattern

  • URI


2. 参数映射与Converter

  • 参数映射 在前面可以看到我们是用json与方法参数一一映射的, json内的key为方法的参数名. 如果你不能做到一一映射, 那发生啥我也不知道(服务器会不会炸了??!!).

  • @TouchParam注解 这个注解是为了应付Java的泛型的, 由于Java将字节码加载到JVM后, 泛型就被擦除了, 我试了好多方法都拿不到真实的类型信息, 因此你的方法参数如果是List<Xxx>, Collection<Xxx>的话, 还是加上这个注解吧.

另外, 别听盼爷鬼扯他能拿到泛型信息(我就不信他是到Class他老妈那儿拿的!), 我早上跑了下vbox的测试用例, 凡是要拿调用真实对象的方法的, 全挂了...


未来

  • 方法参数名 由于现在由QueryString映射方法参数时拿到的参数名是由javassist从JVM虚拟机栈内局部变量表中获取的, 性能说实话我也不知道... 将来我们如果需要提升性能, 可以做成类似MyBatis的@Param的这种注解形式:

  • 方法参数映射功能 如果还想提供更强大的功能, 可以参考Spring MVC的@RequestParam 如:

  • 如果 如果将来我们的这个小工具能够做到完善、成熟、高性能, 就可以用作一个通用的Dubbo转HTTP的工具, 我们只需编写Dubbo代码, 把想要开放给HTTP调用(前端?北京?), 就可在方法前加@Touch注解. 不用再按照API的规范书写Servlet代码.