在 UNIX shell 脚本测试中使用 Travis CI

35

背景:

我一直在为我的PHP项目使用Travis CI,非常喜欢他们提供的链接,可以显示当前构建项目的状态图片。

我目前正在使用UNIX shell脚本制作许多工具,并希望使用Travis CI来测试我的UNIX脚本。

我在网上搜索了很多,试图找出如何实现这一目标。我去了主要的网站,搜索了Stackoverflow,也做了一些谷歌搜索。

貌似这是不可能的。

我目前使用shunit2来测试我的shell脚本和函数。

我的问题是:

  1. 是否可以使用Travis CI测试shell脚本?
  2. 如果不行,还有什么替代方案可以插入到GitHub中?
  3. 最好的集成测试shell脚本的方法是什么?
3个回答

44

非常感谢。这正是我在寻找的东西。Travis CI 网站真的很难浏览。我还有一个额外的问题。我主要制作包含文件,并且希望在将该文件作为脚本运行时运行测试,但在它们被源化时避免运行测试。你是如何解决的?我目前使用类似于 scriptName=$(basename $_); if [[ "$scriptName" = "$0" ]] 的方法。很抱歉我此时手头没有实际代码。稍后会更新。 - Dodzi Dzakuma
如果我正确理解了你的问题,我相信你可以简单地检查在shunit运行时定义的常量之一:http://shunit2.googlecode.com/svn/trunk/source/2.1/doc/shunit2.html#some-constants-you-can-use - soulseekah
我想我更希望得到这样的答案:https://dev59.com/GXE85IYBdhLWcg3wpFEa,但正如评论所说,`$_和$0`非常脆弱。我想知道你是否有特殊的处理方式。原因是,我想测试和验证所有我的脚本,但由于它们是包含文件,我不希望在脚本被引用时运行测试。 - Dodzi Dzakuma
但是,这个脚本是否始终退出0呢?如果是这样的话,Travis-CI会一直认为你的测试已经通过,即使有些测试失败了。在阅读了shunit2文档之后,我没有找到一种方法来检测有多少(或者是否有任何)测试失败了。 - Lqueryvg
顺便提一下,我获取全局退出状态的方法是在每个断言后添加“[[ $? == 1 ]] && exitStatus=1”,其中exitStatus是我在脚本顶部设置为0的全局变量,然后我使用“exit $exitStatus”在脚本末尾退出脚本。 - Lqueryvg

12

2

如果你需要最新版本的shUnit2,可能需要从主分支获取。

我是这样让它工作的:

---
language: bash
before_script: "sudo curl -o /usr/local/bin/shunit2 https://raw.githubusercontent.com/kward/shunit2/master/shunit2"
script: "bash shunit2/test_example.sh"

请参考我的示例shunit2存储库这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接