我有多个单元测试和组件测试,我想针对几个版本的Java(1.6,1.7,1.8等)进行测试。
我想知道最好的方法是什么?
我是否应该使用Jenkins多次运行测试,每次将JAVA_HOME
变量的路径更改为其他JRE?
我可以使用Maven插件吗?也许不同的个人资料?
此外,有没有办法使用TestNG排除基于JRE版本的测试?我可以在java.version
系统属性上使用if语句来处理它,但是我想知道是否有更优雅的方式。
如果这会影响答案,我想提一下,我希望针对几种操作系统类型和产品的多个版本(针对v1.0,v2.0等的相同测试)进行测试。
答案 0 :(得分:6)
要在不同条件下运行相同的代码,jenkins可以使用不同的JAVA_HOME或其他设置运行相同的脚本。在不同的触发器上或作为一个多级工作的一部分执行此操作是您的决定
至于TestNG,请参阅此答案How to disable testng test based on a condition
答案 1 :(得分:0)
一种可能的方法是使用maven配置文件,并结合maven toolchains plugin。
在此方法中,您将在构建服务器上配置多个JDK,并将pom xml配置为具有与每个JDK一起运行单元测试的不同配置文件。
您可能不仅要考虑测试不同的java运行时,还要考虑不同的目标类版本;这也可以通过使用具有不同编译设置的不同配置文件与配置文件方法相结合。
最后,exclusion of sure fire tests也可以从个人资料中完成,也允许您控制它。
答案 2 :(得分:0)
我知道许多使用TravisCI的开源项目中使用的方法之一。在这些项目中,.travis.yml文件(TravisCI的元数据文件)包含此信息。示例: -
jdk:
- oraclejdk7
- oraclejdk8
- openjdk6
- openjdk7
我也在我的一个开源项目(see here)中使用过它。我不知道在行业中我们是否有其他简化的流程,但它可能是开放的,可能因组织,项目和项目而异。