当前sonic的抓包工具其实是可以扩展一下接口修改或者直接增加接口mock服务的,但是由于基于go语言编写,所以每次更改都要重新编译下,将脚本语言嵌入到服务中能够实现无编译下直接生效代码(可以理解成fiddler的接口修改功能),在这里简单调研下国内测试对于动态脚本的需求方向:
热更常用的lua语言:go实现的lua,嵌入很方便,速度也很快,缺点也很明显,生态太差
js/ts语言:直接使用quickjs,优点很明显,支持es2019,能使用大部分的js生态,而且ts语言对项目管理等帮助很大,GitHub上有fork分支能实现debug,体积和速度都很快,唯一缺点是需要cgo,但是对用户使用来说无感
python:go中实现python的是gpython,支持3.4的语法,但是对于一些python的内置库支持不好(因为都是C编写的),我试过使用str的一些常用方法都提示不支持(当然也可以自己扩展),而速度方面,大概是cpython的6-10倍,至于生态使用,如果不是引入到这些缺失的内置模块、方法等,应该能直接使用,预计只有10%-30%左右的生态能使用