4

我们有一个由许多程序和脚本组成的数据采集系统,这些程序和脚本在不同的机器上一起运行,一些是顺序的,大多数是并行的。

我们使用 Jenkins 来构建和运行单元测试。

我们现在想通过使用数据生成器作为系统的输入并检查数据采集链的输出来测试整个系统。

测试系统步骤的简化视图:

  1. 还原系统(数据库、存储库中的包、重新启动虚拟机)
  2. 根据需要配置系统(编写要使用的配置文件,更新数据库)
  3. 启动所需的几个父进程并等待它们准备好
  4. 开始数据输入
  5. 完成后,收集指标和结果,与预期结果进行比较,检查日志中的错误消息,...

理想情况下,我们将使用不同的配置和输入来运行它。

你会用什么工具来做呢?还是您会尝试直接在 jenkins 中进行操作?

4

4 回答 4

4

您没有告诉我们足够的设置来给您具体的答案。这在很大程度上取决于您使用的语言/环境。您可能需要以下一项或多项的组合:

  • Vagrant/Chef 或 Puppet/Veewee/VirtualBox 自动构建虚拟机并配置和运行它们。这是假设一个Linux平台。Chef + Linux 容器要快得多,特别是如果您在 ram 磁盘上运行它(它应该是一个可重复的过程,所以只需要存储工件)
  • 具有版本控制的包缓存,适用于您需要在 VM 上安装的所有系统包
  • 一些运行验收测试的框架,Cucumber,Robot 等等。如果你的单元测试是好的,你也许可以摆脱冒烟测试。
  • 系统的模拟,您可以从日志中提供运行时结果,以便了解如何以及何时进行扩展。

您很可能会遇到测试缓慢的问题,因为您必须填充数据库,并且可能必须拆分测试作业。一般来说,让这个工作的反馈循环太慢了,你可能需要非常有创意才能获得可接受的周期时间。

在不同的环境中,有不同的工具可以做到这一点,拥有多个堆栈并没有多大乐趣。Jenkins 在 Java 堆栈上运行,Puppet 和 Chef 在 Ruby 堆栈上运行,Python、c 和 perl 堆栈也有类似的工具。您必须自己决定是否要在集成问题方面拥有一流的水平,还是要自己编写一个堆栈并自己编码。两者都可以工作,而且都不是微不足道的。团队经验很可能是那里的决定因素。

DevOps 中的反馈循环比现代 CI 开发环境差很多,因此您必须预先进行更多的规划和研究。你一天可以运行的实验数量要少得多,至少是 20 倍左右,所以第一次让事情成功是很困难的。确保您有经验丰富的人这样做。

于 2013-05-12T20:48:19.910 回答
2

根据系统的复杂性,您可以使用大量工具。通常,您需要某种工作流程,并在最后显示结果。让我向您指出一些工具/插件,而不是给出一个明确的答案。

詹金斯:

  • MultiJob 插件可让您将工作流指定为多个阶段,其中包含并行作业阶段
  • BuildFlow 插件让您可以使用简单的 DSL 中的并行和相关作业创建自己的构建流程。
  • Plot 插件用于收集指标并随时间绘制这些指标
  • xUnit 插件,用于从测试中捕获 JUnit 样式 xml 或 JSON,例如由一个小脚本或 xUnit 框架(如 Python 的 py.test 或更花哨的东西)生成。
  • 与 OFrandeDiEnne 的回答相关的RobotFramework 插件。

Vagrant:Vagrant 基本上是 VirtualBox VM 之上的命令行界面。您可以使用它同时启动多个虚拟机(甚至可以从 Jenkins 完成)。使用 Puppet、Chef、SaltStack 等供应商来设置数据库、配置等。

构建流程工具,例如运行时设计自动化 (RTDA) 提供的工具。商业的。这很可能是矫枉过正。

于 2013-05-07T10:14:28.917 回答
2

答案是:Robot Framework(见12)。

  • 支持数据驱动测试和行为测试
  • 测试是使用用户定义的关键字以类似人类的语言编写的。易于开发、易于阅读、易于维护。
  • 许多库可以访问不同的功能(ssh 连接、数据库......)
  • 可以使用用 python、java 或其他语言编写的自定义库进行扩展。
  • 每次测试都会生成详细的日志

我不认识 Jenkins,但我很确定你可以将 Robot Framework 与它集成。它就像运行 Python 脚本一样简单。

于 2013-04-29T21:21:20.030 回答
1

如果您的测试服务器有OpenSSH或其他一些 SSH 服务器服务,您可以通过 SSH Chanel 开始测试。

例如,在 Java 语言中:

  1. 您可以使用TestNG或 JUnit 来组织测试用例,两者都可以轻松地与 Jenkins 集成。
  2. 在测试代​​码中,导入JSCH并创建您自己的 ssh 客户端以在远程服务器上执行您的命令行。或者将命令行推送到 plink.exe(Putty 的一部分)或其他一些也可用于执行命令行的 3rd 方 ssh 客户端。对于并行执行,只需使用多线程推送命令即可。
  3. 检查返回的代码和消息。

同样,您也可以使用 Robot Framework 来执行此操作,它也很容易与 Jenkins 集成(有一个 3rd 方插件)。它还有 ootb ssh 库。

更重要的是,如果您的应用程序没有命令行入口,您还可以使用 AutoIT 库通过 GUI 操作应用程序。

于 2013-05-10T04:45:55.680 回答