xml - 从 Gradle 中的 FileTree 运行 Junit 测试
问题描述
我有一个 Gradle 文件(test.gradle),它当前正在从包含类名的 XML 文件中读取以确定要运行的测试。要测试的类从 XML 中过滤(到文件树中),然后使用 groovy 的 ant.junit() 运行。这主要是因为有单独的 Bamboo 代理需要运行特定的测试,这取决于提供的属性。我想在每个代理中并行运行任务。ant.junit 没有类似 maxParallelForks 选项来指定要并行启动的 JVM 的确切数量。
当前发生的事情: - 在竹子中,test.gradle 被重命名为 build.gradle。它解压缩一个包含所有类的 jar 并将它们放在目标构建目录中。- 有一项任务可以根据 Bamboo 配置中提供的属性从目标构建目录中过滤要测试的类(基于提供的 XML)到文件树中。- 然后 ant.junit 使用以下命令运行测试:
batchtest(todir: "${testDir}") {
ant.filelist(dir: "${targetDir}/build", files:
filteredTests.join(","))
}
- Ant 似乎无法选择一次运行的并行 JVM 分支数量。我正在尝试将这些测试移至 java,希望能够设置一个 jvm 参数,该参数可以设置类似于 maxParallelFork 选项的内容。或者只是在依赖于执行过滤的任务的 gradle 测试任务中运行文件树。我最好的选择是什么?
尝试过的事情: - 我试图将任务(将测试过滤到文件树并使用 ant 运行它们的任务)类型更改为测试。但这似乎不起作用。我的假设是因为没有项目结构并且从解压缩的 jar 中挑选东西,所以测试任务不知道如何运行它们。- 我尝试创建一个单独的 gradle 测试任务(这将取决于过滤任务),其中包括 fileTree。但是运行似乎没有从包含的测试中找到类。我需要提及他们需要从中挑选的目录吗?
解决方案
假设您的 xml 类似于
<tests>
<test>foo.bar.Test1</test>
<test>foo.bar.Test2</test>
</tests>
你可以做类似的事情
task unzipTestClasses(type:Copy) {
from zipTree('path/to/testClasses.zip')
into "$buildDir/testClasses"
}
task runTestClasses(type:Test) {
dependsOn 'unzipTestClasses'
testClassesDirs = "$buildDir/testClasses"
def root = new XmlSlurper().parse(file('path/to.xml'))
include root.tests.test.collect { "${it.text().replace('.', '/')}.class" }
}
推荐阅读
- python - 代码工作正常,但有问题
- python - 如何使用 python 自动从外部连接的设备传输文件?
- python - 枢轴/转置数据帧
- excel - 如何在 excel 中删除列中的重复信号,请参见图片
- azure - ADLS gen2 兼容文件系统
- python - 如何防止玩家在pygame的迷宫中穿过墙壁?
- python - 如何从此 python 代码创建的 PATH 中删除批处理文件?
- python-3.x - 有没有办法让窗口在 tkinter 中不断发送其状态(打开或关闭)?
- html - 使用 BeautifulSoup 根据标签覆盖的文本查找特定标签?
- html - 为什么第二类没有分配给输入元素