产业气象站|这里有个Bash脚本测试框架,危险代码一测便知,防止删库悲剧发生
想要清理文件夹内部分冗余文件 , 结果误删了同事刚合的代码?
(例如 , 在rm-rf/usr/bin/test的/usr后面加了个空格 , 结果删掉了整个/usr文件)
相比于其他语言 , Bash自带许多令人摸不着头脑的设计 , 其中之一就是变量中间不能加空格 。 这就导致Bash在调试时 , 某些命令具有危险性 , 例如rm-rf是删除文件夹下所有文件 , 一旦执行错误 , 可能会产生爆炸的效果 。现在 , 手残党的福音来了:GitHub上有一位朋友推出了一款Bash命令的测试框架Bach , 助你检测脚本里有没有危险的成分 。
文章图片
△据开发者介绍 , 这款框架能让你心情平静
只要在测试脚本中导入这款Bach框架 , 就相当于服下了一剂后悔药 , 能让你赶紧改掉手残写错的代码 , 提前测试Bash脚本的行为 。
这样 , 便能防止Bash的危险命令执行了错误的参数 , 从而带来的灾难性后果 。
下图是Bach框架中提供的一个名为@do-not-panic的API , 将它直接放进含有危险命令的测试方法后 , 可以避免出现不小心调用的情况 。
文章图片
△有用户指出 , 这个API的名字非常友好
看起来再也不用删库跑路了 。
使用方法也很简单 , 只需要掌握几个测试实例 , 就能轻松上手使用这款测试框架 。 (文末附框架代码)
Bach测试方法
这款测试框架的优势在于 , 它真的非常小(50kB左右) , 下载后只要在编写脚本测试前 , 用source命令导入一下Bach框架中的bach.sh , 就能直接使用 。
下图是测试含rm-rf这样的危险命令的样例 。
图中可见 , 我们将需要执行的代码部分写在以test-开头的方法中 , Bach则会自动寻找与这个测试方法对应的-assert结尾的验证 。
文章图片
△图中是手残的范例 , 变量抄都抄错了
【产业气象站|这里有个Bash脚本测试框架,危险代码一测便知,防止删库悲剧发生】也就是说 , Bach运行两个方法时 , 会验证两个方法中执行的命令及其参数是否一致(图中显然不一致) , 如果不一致 , 测试结果便会失败 。
了解了测试脚本的方法 , 来看看怎么写模拟命令 。
用Bach模拟/直接调用命令
在Bach测试框架中 , 所提供的API都是以@开头的 。
其中 , 有一部分命令可以被模拟(MockAPI) , 另外 , 如果不得不在测试时直接调用部分命令 , Bach中也提供了直接执行这些命令的API 。
鉴于command和xargs命令的特殊性 , Bach很特别地为这两个命令做了模拟 。
在网页的测试说明中 , 会对这些API进行统一说明 。
文章图片
△API调用说明范例
简单了解后 , 也许有用户会问 , 就Unix遗留的某些值得吐槽的设计Bash本身特性而言 , 已经有不少测试的框架了 , Bach到底特殊在哪里?
Bach测试原理
事实上 , Bach最特别的地方 , 在于这是一个真正的Bash单元测试框架 。
也就是说 , Bach可以用于测试Bash中一些非常危险的命令 , 且不用担心会产生任何后果 。
毕竟在Bach中 , 没有任何在PATH中的命令会被执行 , 除非明确地指定了路径 。
Bach验证的是命令的调用 , 而非命令的结果 , 毕竟对于Shell脚本来说 , 最重要的是验证命令的调用是否传入了期望的参数或选项 。
这款Bach测试框架与目前其他部分测试框架(如Bats、Shunit2等)的区别在于 , 后者实际上都会调用系统PATH中的命令 , 然而Bach是绝对安全的 。
- 产业气象站|5G基站太耗电!三大运营商正式官宣:将智能化关闭5G基站节约电费
- 产业气象站|他从不打无准备之仗,华为联手哈工大究竟想干啥?依任总性格
- 产业气象站|G是否影响健康?,张朝阳用手机保持30厘米
- 云阳微发布|从云阳这里开始!,上课啦!打造重庆本土直播网红
- 爱集微APP|“芯”势力助推游戏产业发展,芯片成为ChinaJoy的关键词之一
- 产业气象站|电力机器人“小白”上岗巡检
- 产业气象站|苏宁智能宣布五项Biu+共享政策,从生态赋能到生态共享
- 产业气象站|点赞“中国芯里的南大智慧”!华为公司CEO任正非一行访问南京大学
- 产业气象站|花多少钱收购,微软正在谈判收购TikTok美国业务
- 产业气象站|包括王兴,马云创办支付宝的本质不是为了支付,很多人没理解