最近在帮隔壁QA组写一点UI自动化测试的东西,也是折腾了很多之前没有时间搞的东西。比如:
我们有一个NodeJS的包,是内网库里的。QA Manager给组员写了一个带截图的诚意满满的Guide Doc,然而组员们(基本都不怎么会coding)并不买账,说太复杂了。她(QAM)就很头疼。
我拿来一看,确实有点……毕竟要先装node,然后node -v
看版本确认安装,然后set一个registery,装完还要在命令行里用。对于一个Terminal是啥都不知道的人来说,确实…麻烦了点。
于是我就写了一个sh脚本给她。大概是:
nodepath=$(which node)
if [ -n $nodepath ]; then
echo $nodepath
else
echo 'You dont have node installed on your laptop\n'
echo 'Start installing node on your laptop\n'
curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"
fi
node -v
npm config set registry https://npm.someurl.com/
npm i -g @namespace/package
npm config delete registry
写完后,直接打开Terminal,cd到这个目录,sh之即可。
然而这样还是有问题,因为用户是真的不会,于是QA Manager就像,要是能用个APP一键搞定就好了啊!
讲道理,其实可以。
我的思路是:
写一个Automator,利用Run Shell Script这个方法来运行shell 脚本
然而问题来了,Automator的脚本里,不支持node
这个命令,估计是加了安全性保护。随后再试验,Shell脚本也不能用。走不通了。
于是我转而使用Apple Script去实现。先写个测试看看有没有安全限制,蛮简单。
Tell Application "Terminal"
do script("sh ~/test.sh")
end tell
没问题。
但是要生成一个sh,再echo进去,再run太复杂了,还有多重的引号转译。
于是我改为用Automator运行AppleScript脚本,用AS脚本来驱动sh——
成功。
下一步就要看怎么把sh的内容扔到一个文件里了。这倒是也不难,因为写文件这种级别的操作还是没啥问题的。
于是,最终成果如下:
最后只需要导出一个.app即可。
最终的效果就是,QA的同学,双击这个APP,自动生成一个sh文件,写入目标script,使用AS去执行之,然后删掉sh临时文件。
大功告成。
另外,set registry
之后删除是个不好的行为,可以用npm i xxx -registry xxx
来代替。