我有一个基于Spring的groovy应用程序,用作"框架"用于运行TestNG测试。
以下是我的申请
的一部分@RestController
class Framework{
def instance
@RequestMapping("/test/{name}")
@ResponseBody
String home(@PathVariable String name) {
def sourceFile = new File("./tests/${name}/test.groovy")
groovyClass = new GroovyClassLoader(getClass().getClassLoader()).parseClass(sourceFile)
instance = groovyClass.newInstance()
def testNG = new TestNG()
testNG.setOutputDirectory("./results/${name}")
XmlSuite suite = new XmlSuite()
suite.setName(name)
XmlTest test = new XmlTest(suite)
test.setXmlClasses([new XmlClass(groovyClass)])
testNG.setXmlSuites([suite])
testNG.run()
def resultFile = new File("./results/${name}/emailable-report.html")
return resultFile.text
}
@RequestMapping("/status")
public String getStatus(){
return instance.currentMethod
}
}
我的示例测试文件看起来像
class T1{
public String currentMethod
@Test
public void test() {
//execution
}
@Test
public void test2(){
//execution
throw new Exception()
}
}
它工作正常,但我想实现一些额外的信息,以便能够通过添加更多代码来检查当前正在运行的方法
@BeforeMethod
void setMethodName(){
String className = this.class.getName()
def classData = Thread.currentThread().getStackTrace().toList().reverse().find{ it =~ /${className}/}
currentMethod = classData.getMethodName()
}
但是我无法以
的形式访问该实例 instance = groovyClass.newInstance()
创建一个实例和
testNG.run()
创建另一个可以通过在construcor中打印一些消息来确认。
ctor
ctor
[TestNG] Running:
Command line suite
===============================================
Total tests run: 2, Failures: 1, Skips: 0
===============================================
任何想法如何访问TestNG创建的istance或如何将现有实例传递给TestNG runner? 每次我尝试访问localhost:8080 / status时它返回null。
答案 0 :(得分:0)
ITestListener
正是您要找的。检查its documentation。
您可以使用以下内容添加侦听器:
testNG.addListener(....);
我们可以想象你的听众会有:
listener.getCurrentMethod();