TestNG中的类的Access实例在groovy

时间:2017-02-24 09:57:54

标签: spring groovy testng

我有一个基于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。

1 个答案:

答案 0 :(得分:0)

ITestListener正是您要找的。检查its documentation

您可以使用以下内容添加侦听器:

testNG.addListener(....);

我们可以想象你的听众会有:

listener.getCurrentMethod();

而且,有可能inject a Method instance into a @BeforeMethod method