【问题标题】:Is there a standard way to test scripts/executables in Jenkins?是否有标准方法来测试 Jenkins 中的脚本/可执行文件?
【发布时间】:2020-11-10 11:43:08
【问题描述】:

我们有一个项目,其中包含 Python 和 Scala 包库,以及 Bourne、Python 和 Perl 可执行脚本。尽管该库具有良好的测试覆盖率,但我们没有对脚本进行任何测试。

当前测试环境使用 Jenkins、Python、virtualenv、nose、Scala 和 sbt。

是否有一种标准/通用的方法可以在 Jenkins 中合并脚本测试?


编辑:我希望有一些简单的东西,比如 Python 的 shell 脚本单元测试,像这样:

assertEquals expected.txt commandline
assertError commandline --bogus
assertStatus 11 commandline baddata.in

【问题讨论】:

  • 关于这些脚本的任何上下文?它们对环境敏感吗? (即,向服务器发出 HTTP 请求,需要某些位置的文件等)。
  • @sethcall 好问题。有许多脚本以不同的方式依赖于测试数据、几个数据库、http 请求和另一个内部项目(当前由环境变量引用)。我们可以为这些测试创建一个足够的环境。

标签: unit-testing testing continuous-integration jenkins jenkins-plugins


【解决方案1】:

你看过 shunit2:https://github.com/kward/shunit2

它允许您在 Bourne、bash 或 ksh 脚本中编写可测试的 shell 脚本。

不确定如何将其集成到您所描述的内容中,但它会生成类似于其他单元测试套件的输出。

【讨论】:

  • 谢谢凯文。在我问的时候我并不知道,但我通过 malenkiy_scot 提供的链接 Wikipedia 链接找到了它。 shunit2 正是我正在寻找的那种东西。
  • 感谢@Reece 更新此答案!
【解决方案2】:

我不知道这有多“标准”,但如果您真正练习 TDD,您的脚本也应该使用 TDD 开发。如何将 TDD 测试与 Jenkins 连接取决于您使用的 TDD 框架:您可以生成 JUnit 报告,例如,Jenkins 可以读取,或者您的测试可以简单地返回失败状态等。

【讨论】:

  • 这正是问题所在。我想使用 Jenkins 为脚本启用 TDD。对于语言,有框架。有命令行框架吗?
  • 我使用的命令行脚本很少(主要依赖于 ANT ant Python),但值得here's what Wikipedia says about it
  • 谢谢@malenkiy_scot...维基百科页面提供了很好的总结。很难相信这个页面没有出现在我的多次搜索中。
【解决方案3】:

如果您的脚本需要另一个项目,那么我倾向于创建一个新的 jenkins 项目,例如“system-qa”。

这将是python项目的下游项目,并且依赖于python项目和内部项目。

如果您使用依赖解析/发布技术,例如apache ivy http://ant.apache.org/ivy/,并且如果这些现有项目要发布其代码的打包版本(就像 . tar.gz,也许),然后 system-qa 项目可以为 python 包和内部项目包声明依赖项(再次使用 ivy),使用 ivy 下载它,提取/安装它,运行测试,然后退出.

总而言之,system-qa 项目的构建脚本负责检索依赖项,针对这些依赖项运行测试,然后可能发布标准化的输出测试格式,如 junit xml(但至少返回 0 或非 0提示 Jenkins 了解构建的进展情况)。

我认为这是一个技术上正确的解决方案,但也需要大量工作。如果值得,则需要进行判断。

【讨论】:

  • 关于使用 apache ivy 在项目之间移动项目工件的说明。如果您只有一架构建无人机和这些项目的一个活动版本,那么您可以进行简化假设;就像只是将您提到的环境变量设置为 /home/jenkinsbuild/workspace/inhouse-project,而不是使用 ivy。
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 2010-09-27
  • 2011-09-08
  • 2015-11-07
  • 1970-01-01
相关资源
最近更新 更多