【问题标题】:Using Travis CI for testing on UNIX shell scripts使用 Travis CI 测试 UNIX shell 脚本
【发布时间】:2013-12-08 03:54:56
【问题描述】:

背景:

我一直在我的 PHP 项目中使用 Travis CI,我真的很喜欢他们如何为您提供指向图片的链接,该图片显示了您的项目当前构建的状态。

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

我已经搜索了互联网,试图找出如何实现这一点。我去了主网站,搜索了 Stackoverflow 以及一些 Google 搜索。

这似乎是不可能的。

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

我的问题是:

  1. 是否可以使用 Travis CI 测试 shell 脚本?
  2. 如果没有,我可以在 GitHub 中使用该插件吗?
  3. 对 shell 脚本执行集成测试的最佳方法是什么?

【问题讨论】:

    标签: shell unix travis-ci shunit2


    【解决方案1】:

    绝对的。

    我在这里做了一个简单的测试:https://travis-ci.org/soulseekah/test-shunit2-travis

    我的.travis.yml 文件是:

    language: bash
    
    before_script:
        - curl -L "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/shunit2/shunit2-2.1.6.tgz" | tar zx
    
    script:
        - bash equality_test.sh
    

    存储库:https://github.com/soulseekah/test-shunit2-travis

    【讨论】:

    • 非常感谢。这正是我想要的。 Travis CI 网站真的很难导航。我有一个额外的问题。我主要制作包含文件,并且我希望文件在包含作为脚本运行时运行测试,但要避免在获取它们时运行测试。你这样做的方法是什么?我目前使用scriptName=$(basename $_); if [[ "$scriptName" = "$0" ]] 之类的东西。我很抱歉目前没有实际的代码。稍后会更新。
    • 如果我正确理解了您的问题,我相信您可以简单地检查 shunit 运行时定义的常量之一:shunit2.googlecode.com/svn/trunk/source/2.1/doc/…
    • 我想我正在寻找一个更像 stackoverflow.com/questions/2683279/… 的答案,但正如 cmets 所说 $_ and $0 非常脆弱。我想知道你是否有特殊的处理方法。原因是,我想测试和验证我的所有脚本,但由于它们包含在内,我不希望在获取脚本时运行测试。
    • 但是,这个脚本总是退出 0 吗?如果是这样,即使有些测试失败,Travis-CI 也会始终认为您的测试已经通过。浏览了 shunit2 文档后,我看不出有一种方法可以检测有多少(或者如果有的话)测试失败了。
    • 仅供参考,我获得全局退出状态的方式是在每个断言之后在每个函数中添加“[[ $? == 1 ]] && exitStatus=1”,其中 exitStatus 是我设置的全局变量到脚本顶部的 0,然后我在结尾处以“exit $exitStatus”退出脚本。
    【解决方案2】:

    我将所有内容都打包到一个 Makefile 中,然后调用 make test...

    language: bash
    script: make test
    

    我使用的是assert.sh,所以不需要before_script。您可以通过https://github.com/wmluke/dokku-domains-plugin查看。

    【讨论】:

      【解决方案3】:

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

      我是这样工作的:

      ---
      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 repo here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-15
        • 2020-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-31
        相关资源
        最近更新 更多