• vars.put("data", new String(data));

  • base64 把 byte 转成 string,然后再转回去

  • 技术路线的测开会发现,纯测试开发技术大部分都服务于 QA 或者小部分人群,这些系统都未经标准化的开发管理,也没有外网的海量验证,技术的深度和广度在上游开发看来,不值一提
    喜欢做技术,或者转做更上游的开发岗位或者具备领域门槛的研发岗位,专一纯粹去做技术思考和规划,把核心技术深入理解并向架构等方向纵深。


    个人觉得这个理解有点片面了,与运维开发不同的是,貌似因为测试的缘故导致多数人总会把测试开发当做自动化的业务测试去理解。当运维开发搞出来 devops,在从架构层面上去改变开发模式,甚至已经开始用云原生去革开发的命。测试开发不要再想着用一个 ssh+vue,写一个所谓的自动化测试框架就是测开的阶段了。
    想想公司里测试基建真的有做起来吗?压测是不是还在用 jmeter,能不能做到全球多节点的分布式压测,能不能做到结合监控数据、结合代码分析,做到自动分析代码问题?
    静态代码扫描是不是就还在用 sonar,就找人配了几个规则,搞个 ide 插件就完事了?程序分析作为 PL 领域比较火热的一个大领域,能不能做到工业界的落地?
    集成测试是不是还停留在接口测试的阶段?复杂业务的全链路自动化测试,在链路上任何一个节点中断、切入这些都能做到吗?
    还有混沌工程、流量录制回放、单测生成、用例生成、精准、程序修复……可以做的东西太多了,总结来说就是测试领域的基建还是太落后了。

  • 思路本质就是做 aop,看在哪里做 aop 去改掉原本业务要请求的地址。

    比如代码级别的动态配置下发
    编译层面的拦截 c/c++ 插桩 java 的 agent,字节码&源码级别的切面 aspectj ASM 等等
    机器级别的 libc 拦截、防火墙拦截
    中间件级别的 网关统一拦截,配置中心拦截
    路由器级别的拦截,这个类似防火墙

    当然每一层做都各有优劣势,可以根据自身情况分析分析再做决定

  • 结构化 diff 一般都是将文本解析到语法树,然后通过一些 tree node diff 算法来实现
    然后你可以将语法节点本身作为树节点映射,也可以抽象一套通用的树节点,里面包含语法节点名称与值这两个属性,这样获得的结果就通用了

  • 最适合用来做 java 应用单元测试语言的就是 groovy,里面很多特性感觉都是量身定制。
    包括元编程,也能应用到很多场景

  • 可以结合,而且结合点很多,主要看你是否有这方面的需求
    简单举几个在工作中用到 antlr 的一些地方:

    • 文本结构化 Diff,通过 antlr 实现多语言通用支持
    • RPC 的 IDL 文件解析,用于实现一些类似 grpCurl 类型的工具
    • 程序(代码)分析(一般看情况,如果语言本身支持很好就不用自己写了)
      • 语法检查
      • 数据流分析
      • 抽象解释&符号执行
    • 测试领域的 DSL(目前来看这方面容易做,难推广)
    • 云测平台,云 IDE 相关都会有需要
  • 议题的问卷和 ppt 要一起提交吗

  • start end 用来定位某个节点在原始字符串中的 index 位置,前端就可以根据 index 对差异节点进行染色,最后会有这样的一套展示效果

    晚点单独开个帖子说一说

  • 和我的解法基本一致,握手。

    最后展示标记这里,由于我是做纯粹的格式化 diff 工具,最后放在 monaco 编辑器上进行染色标记,大体思路是:

    zjsonpatch 是支持例如 jackson 里面的 jsonnode 进行对比,但是 jackson 在解析的过程中没有携带每一个 node 的坐标信息,所以这里首先通过继承,给所有的 jsonNode 带上 start end 的坐标字段,然后直接用 antlr 重写了一个 json parser,自动造一套 jackson 的 jsonnode(相当于重写了 jackson 的 parser),在解析过程中带上每一个节点在字符串上的 [start,end] 坐标,这样最后拿到 diff 之后给的 jsonPointer 就可以获取到每一个节点的坐标信息

    而且这样还有一个好处,就是支持 jsonpath 语法,如果要做例如去噪对比,可以通过 jsonpath 进行过滤掉一些节点