如何 运行 特定测试或 class 使用 jenkins 管道
How to run a specific test or class using jenkins pipeline
我正在使用此命令 运行 我的测试:
sh "${mvnHome}/bin/mvn clean test -e -Dgroups=categories.dbd"
但有时我想运行进行特定测试。我该怎么做?
我读到我可以使用“此项目已参数化”,但不明白如何使用它。
我也看到了这个 - https://plugins.jenkins.io/selected-tests-executor/ 但它不够好,因为它需要一个外部文件。
Jenkins 并不是真正的工具。这是我们 运行ning all 测试的典型用例。如果您真的只想运行进行一次测试,您应该在您的开发环境中进行
但最简单的做法是,如果您想要其中一项测试的结果,我们让 Jenkins 运行 您的所有测试,而忽略其他测试的结果。
一般来说,您应该在您的开发环境中运行(快速、廉价)单元测试,并且只有在代码通过单元测试后才提交代码以供 Jenkins 进行(昂贵、缓慢)集成测试(和 Jenkins应该 运行 单元再次测试,以防万一)。
我怀疑您真正的问题是“如何调试 Jenkins 的集成测试失败 运行”。 Jenkins 是一个构建和测试工具,而不是调试工具。它本身并不是调试测试失败的合适工具。但是你使用 Jenkins 的方式可以帮助调试。
- 不要使用集成测试代替单元测试。
- 如果您的软件未通过集成测试,但没有单元测试,就像调试测试失败一样,您应该假设软件中可能导致失败的缺陷类型。然后检查是否可以添加一个单元测试来检测那种缺陷。如果是这样,请添加该单元测试。
- 确保您的测试在失败时产生有用的诊断消息。测试断言应该有帮助信息。测试 a 应具有描述性名称。
- 如果集成测试检查一系列操作,请确保您也对单个操作进行测试。
如果你使用 maven-surefire-plugin 你可以简单地 运行
sh "${mvnHome}/bin/mvn clean test -e -Dgroups=categories.dbd -Dtest=com.example.MyJavaTestClass"
或
sh "${mvnHome}/bin/mvn clean test -e -Dgroups=categories.dbd -Dtest=com.example.MyJavaTestClass#myTestMethod"
我建议在您的管道定义中添加一个测试参数 class/method。
pipeline {
agent any
parameters {
string defaultValue: '', description: 'Test Name', name: 'TEST_NAME', trim: false
}
stages {
stage('run tests') {
steps {
script {
def optionalParameters = ""
if (params.TEST_NAME != null) {
optionalParameters += " -Dtest=" + params.TEST_NAME
}
sh "${mvnHome}/bin/mvn clean test -e -Dgroups=categories.dbd" + optionalParameters
}
}
}
...
}
...
}
我正在使用此命令 运行 我的测试:
sh "${mvnHome}/bin/mvn clean test -e -Dgroups=categories.dbd"
但有时我想运行进行特定测试。我该怎么做?
我读到我可以使用“此项目已参数化”,但不明白如何使用它。
我也看到了这个 - https://plugins.jenkins.io/selected-tests-executor/ 但它不够好,因为它需要一个外部文件。
Jenkins 并不是真正的工具。这是我们 运行ning all 测试的典型用例。如果您真的只想运行进行一次测试,您应该在您的开发环境中进行
但最简单的做法是,如果您想要其中一项测试的结果,我们让 Jenkins 运行 您的所有测试,而忽略其他测试的结果。
一般来说,您应该在您的开发环境中运行(快速、廉价)单元测试,并且只有在代码通过单元测试后才提交代码以供 Jenkins 进行(昂贵、缓慢)集成测试(和 Jenkins应该 运行 单元再次测试,以防万一)。
我怀疑您真正的问题是“如何调试 Jenkins 的集成测试失败 运行”。 Jenkins 是一个构建和测试工具,而不是调试工具。它本身并不是调试测试失败的合适工具。但是你使用 Jenkins 的方式可以帮助调试。
- 不要使用集成测试代替单元测试。
- 如果您的软件未通过集成测试,但没有单元测试,就像调试测试失败一样,您应该假设软件中可能导致失败的缺陷类型。然后检查是否可以添加一个单元测试来检测那种缺陷。如果是这样,请添加该单元测试。
- 确保您的测试在失败时产生有用的诊断消息。测试断言应该有帮助信息。测试 a 应具有描述性名称。
- 如果集成测试检查一系列操作,请确保您也对单个操作进行测试。
如果你使用 maven-surefire-plugin 你可以简单地 运行
sh "${mvnHome}/bin/mvn clean test -e -Dgroups=categories.dbd -Dtest=com.example.MyJavaTestClass"
或
sh "${mvnHome}/bin/mvn clean test -e -Dgroups=categories.dbd -Dtest=com.example.MyJavaTestClass#myTestMethod"
我建议在您的管道定义中添加一个测试参数 class/method。
pipeline {
agent any
parameters {
string defaultValue: '', description: 'Test Name', name: 'TEST_NAME', trim: false
}
stages {
stage('run tests') {
steps {
script {
def optionalParameters = ""
if (params.TEST_NAME != null) {
optionalParameters += " -Dtest=" + params.TEST_NAME
}
sh "${mvnHome}/bin/mvn clean test -e -Dgroups=categories.dbd" + optionalParameters
}
}
}
...
}
...
}