我想为控制机械臂和其他硬件的 JavaFX 应用程序设置一个像样的构建链:
- 我们将 BitBucket 与 Git Flow 模型一起使用。
- 我们在使用 Maven 构建的 IntelliJ 中有 2 个开发模块和 1 个系统测试模块。
- 我们有单元测试、集成测试和系统测试。单元和集成测试使用 JUnit,可以在 Jenkins 主机上运行,对于系统测试,我们使用 TestNG,它们可以在 Jenkins 代理上运行 TestFX 测试。(我认为 TestNG 比 JUnit 更适合系统测试)
开发构建项目(构建、单元+集成测试)已经到位。最近通过复制开发项目、添加系统测试并忽略单元/集成测试来建立测试链。(所以构建应用程序完成了两次)
我们有两种类型的系统测试:
- 相当简单并在应用程序本身上运行的测试
- 更复杂的测试,在与机器人手臂的多个模拟器交互的应用程序上运行
现在我需要设置第二种类型的测试。我的问题是:在 Jenkins 中进行设置的最佳方法是什么?
我在这里阅读有关 Jenkins Pipelines 和 Blue Ocean 插件的信息,有关矩阵配置项目的信息。对我来说,什么是实现目标的理想方式有点令人困惑。
我不知道如何从 SystemTest 模块中的 testng.xml 文件扩展到灵活的测试。我可以在测试中放置一种功能标签,以便设置正确的先决条件吗?例如,对于类别 1 中的测试,只需要为 TestFX 启动主应用程序。但是,对于类别 2 中的测试,需要启动和配置多个模拟器。我认为使用一种功能标签将使这更易于维护。
我的目标:
- 易于维护 Jenkins 流程
- 高效的构建,因此更喜欢复制工件而不是第二次构建
- 可以将系统测试拆分到多个代理上,最好不用我担心在哪里运行(类似于 Selenium Grid)
- 如果测试需要它们,则启动正确的依赖项(模拟器等)
- 由于应用程序中使用了画布,我们正在考虑在具有 OpenGL 3D 加速的 VM 上运行测试。如果测试能够按需分配、启动、停止虚拟机,那就太棒了(但只会节省一些电力)
- 从所有代理收集所有测试结果的轻松报告。请注意,我更喜欢 JUnit 报告,该报告突出显示哪些测试被@Ignored。TestNg 报告格式,没有提及@Ignored 测试。