当前位置: 首页 > 面试题库 >

如何在多模块Maven构建中列出最慢的JUnit测试

庾远航
2023-03-14
问题内容

如何在多模块Maven构建中列出最慢的JUnit测试?

这应该遍及所有模块。

哈德森/詹金斯解决方案也可以。


问题答案:

免责声明:我确实为我的bash解决方案表示歉意,尽管它可以正常工作并且适合:-)。如果您不耐烦,请移至底部。

首先,我们需要找到TEST-*.xml由产生的所有文件maven-surefire-pluginmvn test在项目的根目录中运行此命令,以发现所有子模块中的测试结果:

$ find . -iname "TEST-*.xml"

幸运的是,这些文件的格式非常简单,简单grep,我们可以满足以下要求:

$ grep -h "<testcase" `find . -iname "TEST-*.xml"`

现在,一些sed魔术可以提取调用时间,测试用例类和方法名称:

$ sed 's/<testcase time="\(.*\)" classname="\(.*\)" name="\(.*\)".*/\1\t\2.\3/'

只剩下对结果进行排序并显示运行时间最长的测试了:

$ sort -rn | head
$ grep -h "<testcase" `find . -iname "TEST-*.xml"` | sed 's/<testcase time="\(.*\)" classname="\(.*\)" name="\(.*\)".*/\1\t\2.\3/' | sort -rn | head

令人惊讶的是,结果看起来很合理(以Activiti 5.1多模块代码库为例):

3.029   org.activiti.examples.variables.jpa.JPAVariableTest.testStoreJPAEntityAsVariable
2.904   org.activiti.engine.test.forms.FormsTest.testTaskFormPropertyDefaultsAndFormRendering
1.594   org.activiti.engine.test.api.mgmt.ManagementServiceTest.testGetJobExceptionStacktrace
1.114   org.activiti.examples.variables.jpa.JPAVariableTest.testUpdateJPAEntityValues
1.006   org.activiti.engine.test.db.EngineRebootProcessDefinitionCacheTest.testStartProcessInstanceByIdAfterReboot
0       org.activiti.engine.test.pvm.PvmVariablesTest.testVariables
0       org.activiti.engine.test.pvm.PvmScopeWaitStateTest.testWaitStateScope
0       org.activiti.engine.test.pvm.PvmScopesAndConcurrencyTest.testConcurrentPathsGoingIntoScope
0       org.activiti.engine.test.pvm.PvmEventTest.testNestedActivitiesEventsOnTransitionEvents
0       org.activiti.engine.test.pvm.PvmEventTest.testEmbeddedSubProcessEvents


 类似资料:
  • 我们的项目结构如下: 相关的JUnit测试位于A-A中。在使用Maven之前,我们必须调整Eclipse中的运行配置(将arguments选项卡中的工作目录设置为A-B,启动应用程序),以便在没有错误的情况下启动所有测试。 现在,当我们尝试运行测试时,无论我们是否在Eclipse中运行测试,我们都会从a-a中的类中得到一个 我的猜测是我们有一个错误的配置的POM和Surefire不能找到所有的类文

  • 我的项目结构如下: 是内的依赖项。 > 我应该在Jenkins中创建单独的作业来单独构建每个模块吗? 我为创建了一个作业,但出现以下错误(已将目标和操作设置为“清洁安装”: [INFO]扫描项目...[INFO] [INFO] ------------------------------------------------------------------------ [INFO]构建mypro

  • 问题内容: 我在Jenkins中建立了一个大型Maven多模块构建。它是为增量构建而设置的。 触发后,它将解析所有POM并弄清楚需要构建什么。 当前已将其设置为触发SCM更改。 我想进行此构建,以便可以执行以下操作: 仍然手动启动它。当我这样做时,它的增量构建行为将像今天一样起作用。 从Subversion提交钩子触发构建 。我想知道,如果我通过出色的指令来设置提交挂钩的麻烦,那将不会导致构建过程

  • 我有根项目,然后是子模块。这些模块是相互依赖的,当我为一个模块运行maven测试时,它会抛出类未找到异常。 ProjectA --ProjectSubA --ProjectSubB --ProjectSubC(依赖项ProjectA和ProjectB) ProjectSubC有Maven测试,所以当它运行时,类在ProjectSubB和ProjectSubA中。现在如何解决这个问题。

  • 考虑一个maven实用工具模块(模块1),它定义了一个抽象类:AbstractFoo.java。在测试资源下,编写了所述类的模型:foomockup.java。还编写了一个测试类:AbstractFootest.java。 现在考虑第二个模块(模块2),它包含一个使用AbstractFoo的类,并声明测试用例:bar.java和bartest.java。java在创建Bar实例的同时创建FooMo

  • 但我在模块2中添加了依赖项。模块2是最后一个项目。 项目结构如下。 父项目的pom.xml