最近在幫隔壁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</a>.*|\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去執(zhí)行之,然后刪掉sh臨時文件。
大功告成。
另外,set registry之后刪除是個不好的行為,可以用npm i xxx -registry xxx來代替。