如何获取在 testng 拆卸方法中运行的测试方法的名称?

     2023-02-16     236

关键词:

【中文标题】如何获取在 testng 拆卸方法中运行的测试方法的名称?【英文标题】:How do I get the name of the test method that was run in a testng tear down method? 【发布时间】:2011-02-26 11:43:58 【问题描述】:

基本上,我有一个拆卸方法,我想登录到刚刚运行测试的控制台。我将如何获取该字符串?

我可以得到类名,但我想要刚刚执行的实际方法。

public class TestSomething 

    @AfterMethod
    public void tearDown() 
        System.out.println("The test that just ran was: " + getTestThatJustRanMethodName());
    

    @Test
    public void testCase() 
       assertTrue(1 == 1);
    

...应该输出到屏幕:“刚刚运行的测试是:testCase”

但是,我不知道getTestThatJustRanMethodName 究竟应该有什么魔力。

【问题讨论】:

【参考方案1】:

在@AfterMethod 中声明一个 ITestResult 类型的参数,TestNG 将注入它:

@AfterMethod
public void afterMethod(ITestResult result) 
  System.out.println("method name:" + result.getMethod().getMethodName());

【讨论】:

tks,我使用'Reporter.setCurrentTestResult(result);'将报告流更改为测试方法【参考方案2】:

如果您想在测试执行之前 获取方法名称,您可以使用以下内容:

import java.lang.reflect.Method;

@BeforeMethod
public void nameBefore(Method method)

    System.out.println("Test name: " + method.getName());       

【讨论】:

也适用于@AfterMethod ... OP 要求的内容 ;) 帮助了我 ✓ 对我没用 【参考方案3】:

只需声明一个java.lang.reflect.Method 参数。

 @BeforeMethod
 public void beforeTestMethod(Method testMethod)
    System.out.println("Before Testmethod: " + testMethod.getName());       
 

但 TestNG 允许您inject 更多;)

任何 @Before 方法或 @Test 方法都可以声明 ITestContext 类型的参数。 任何 @AfterMethod 方法都可以声明 ITestResult 类型的参数,这将反映刚刚运行的测试方法的结果。 任何 @Before@After 方法都可以声明 XmlTest 类型的参数,其中包含当前标记。 任何 @BeforeMethod(和 @AfterMethod)都可以声明 java.lang.reflect.Method 类型的参数。此参数将接收此 @BeforeMethod 完成后(或在为 @AfterMethod 运行的方法之后)将调用的测试方法。 任何 @BeforeMethod 都可以声明 Object[] 类型的参数。此参数将接收即将被提供给即将到来的测试方法的参数列表,这些参数可以由 TestNG 注入,例如 java.lang.reflect.Method 或来自 @DataProvider 。 任何 @DataProvider 都可以声明 ITestContextjava.lang.reflect.Method 类型的参数。后一个参数将接收即将被调用的测试方法。

【讨论】:

【参考方案4】:

TestNG 支持的另一种(虽然不像Cedric's answer 那样简单)方法是register a listener:

@Listeners(MethodListener.class)
public class ListenerTest 

  @Test
  public void someTest() 
  


侦听器可能如下所示:

public class MethodListener implements IInvokedMethodListener 

  @Override
  public void beforeInvocation(IInvokedMethod method, ITestResult testResult) 

  

  @Override
  public void afterInvocation(IInvokedMethod method, ITestResult testResult) 
    System.out.println(method.getTestMethod().getMethodName());
  

这个特定的侦听器会将方法名称(即someTest)打印到控制台。它会在每个执行的测试之后执行。

如果您以编程方式生成 testSuite,则可以按如下方式添加侦听器,而不是在每个测试类上添加 @Listeners(MethodListener.class)

    List<String> listeners = new ArrayList<String>();
    listeners.add(MethodListener.class.getName());
    testSuite.setListeners(listeners);

【讨论】:

你可以只使用 testResult.getMethod().getMethodName()。无需获取 IInvokedMethod。【参考方案5】:

在我自己的项目中,我通过 JUnit @Rule 访问这些数据。

String testName;
String className;

@Rule
public TestWatcher watcher = new TestWatcher() 
    public void starting(Description description) 
        testName = description.getMethodName();
        className = description.getClassName();
        logger.info("Starting test " + testName + " in class " + className);
    
;

【讨论】:

这个问题是关于 TestNG 而不是 JUnit

在 testNG ITestListener 中获取测试方法的注释

】在testNGITestListener中获取测试方法的注释【英文标题】:getAnnotationoftestmethodintestNGITestListener【发布时间】:2013-04-2410:42:23【问题描述】:我正在尝试将TestLink与TestNG集成方法如下1>使用onTestFailure和onTestSuccess编写ITestListner2>... 查看详情

testng学习(代码片段)

一、TestNg入门1、JUnit缺点:最初的设计,使用于单元测试,现在只用于各种测试。不能依赖测试配置控制欠佳(安装/拆卸)侵入性(强制扩展类,并以某种方式命名方法)静态编程模型(不必要的重新编译)不适合管理复杂项目应用,JU... 查看详情

testng注解使用(代码片段)

1.TestNG常用注解@Test 标记一个类或方法作为测试的一部分@BeforeMethod 注解的方法将在每个测试方法运行之前运行@AfterMethod 注解的方法将在每个测试方法运行之后运行@BeforeClass 注解的方法将只运行一次,在当前类中所... 查看详情

testng基本注解

 注解描述@BeforeSuite注解的方法将只运行一次,运行所有测试前此套件中。@AfterSuite注解的方法将只运行一次此套件中的所有测试都运行之后。@BeforeClass注解的方法将只运行一次先行先试在当前类中的方法调用。@AfterClass注解... 查看详情

java--testng

 TestNG类的配置信息:   @BeforeSuite:在此套件中的所有测试运行之前,将运行带注释的方法。   @AfterSuite:在此套件中的所有测试运行后,将运行带注释的方法。   @BeforeTest:在运行属于<test>标记内的... 查看详情

testng配置注解

以下是TestNG支持的注释列表:注解描述@BeforeSuite在该套件的所有测试都运行在注释的方法之前,仅运行一次。@AfterSuite在该套件的所有测试都运行在注释方法之后,仅运行一次。@BeforeClass在调用当前类的第一个测试方法之前运行... 查看详情

如何从 @AfterMethod 中的 TestNG/Selenium 获取测试结果状态?

】如何从@AfterMethod中的TestNG/Selenium获取测试结果状态?【英文标题】:HowtogetthetestresultstatusfromTestNG/Seleniumin@AfterMethod?【发布时间】:2016-07-0714:51:16【问题描述】:对于我正在进行的一项研究,我需要在运行测试方法(@Test)后从@Aft... 查看详情

如果类方法不存在,无论如何让 TestNG 不运行套件?

】如果类方法不存在,无论如何让TestNG不运行套件?【英文标题】:AnywaytogetTestNGtonotrunasuiteifaclassmethoddoesnotexist?【发布时间】:2021-08-2214:24:48【问题描述】:TestNG(6.14.3)如果某个类方法不存在,出于某种原因将继续运行。它似乎... 查看详情

testng测试框架入门到实战

...a环境设置1-5Eclipse下载和安装第2章TestNG环境搭建TestNG环境如何搭建?装什么以及如何装插?,导什么jar包?2-1如何添加TestNGJavaDoc2-2TestNG环境搭建第3章TestNG注解和断言用代码来详细讲解testNG各种注解的用法,注解包括@Test,@BeforeM... 查看详情

testng单元测试与使用详解(代码片段)

TestNG的基本注解与执行顺序在类里编辑程序时,在@Test后面,摁alt+回车,选择对应的插件,可以把目前用到的插件自动添加到pom.xml文件中,如下面的testng,每摁一次,就多添加一次当使用的类里,用到的方法没有导入类包时,... 查看详情

如何在可执行 jar 中从 main() 运行 TestNG 测试?

】如何在可执行jar中从main()运行TestNG测试?【英文标题】:HowtorunTestNGtestsfrommain()inanexecutablejar?【发布时间】:2013-05-0403:50:52【问题描述】:我有一个包含所有依赖项和测试类的可执行JAR。我已经确认在执行jar时调用了main()方法... 查看详情

如何在并行 JVM 进程(不是线程)中运行 TestNG 测试

】如何在并行JVM进程(不是线程)中运行TestNG测试【英文标题】:HowtorunTestNGtestsinparallelJVMprocess(notthreads)【发布时间】:2022-01-2313:31:50【问题描述】:是否可以在两个不同的Java进程(JVM)中使用TestNG框架运行测试?默认情况下,Tes... 查看详情

如何在 TestNG 中并行运行测试用例?

】如何在TestNG中并行运行测试用例?【英文标题】:HowtoruntestcasesinparallelinTestNG?【发布时间】:2018-09-2912:59:11【问题描述】:我有一组要并行运行的TestNG测试用例。我没有使用TestNG套件XML文件。根据http://maven.apache.org/surefire/maven-... 查看详情

TestNG @Test 方法在功能级别运行,如何在场景级别运行

】TestNG@Test方法在功能级别运行,如何在场景级别运行【英文标题】:TestNG@Testmethodrunningatfeaturelevel,howtorunatscenariolevel【发布时间】:2022-01-1711:24:15【问题描述】:我想在功能文件的场景级别(就在每个场景之后)执行@AfterMethod... 查看详情

如果运行模式为 parallel="methods",如何强制 TestNG 为每个方法创建新的测试类实例

】如果运行模式为parallel="methods",如何强制TestNG为每个方法创建新的测试类实例【英文标题】:HowtoforceTestNGcreatenewinstanceoftestclassforeachmethodifrunmodeisparallel="methods"【发布时间】:2013-03-1523:59:23【问题描述】:如果... 查看详情

TestNG 报告中的自定义测试方法名称

】TestNG报告中的自定义测试方法名称【英文标题】:CustomtestmethodnameinTestNGreports【发布时间】:2013-02-1915:29:04【问题描述】:我正在开发一个需要以编程方式调用TestNG(使用数据提供程序)的项目。一切都很好,只是在报告中,... 查看详情

springboottest和testng组成测试套件

...行到SpringRunner中,但默认使用的junit,如果测试框架使用testng则该注解无法正常使用(Spring管理的对象无法被加载),需要测试类继承AbstractTestNGSpringContextTests,该类继承了SpringTestContext框架在TestNg环境。继承该类的子类的测试方法... 查看详情

有啥方法可以分块而不是完整地划分和运行 testng 测试

】有啥方法可以分块而不是完整地划分和运行testng测试【英文标题】:Isthereanywaytodivideandruntestngtestsinchunksinsteadoffullsuite有什么方法可以分块而不是完整地划分和运行testng测试【发布时间】:2019-09-0221:40:31【问题描述】:我的testn... 查看详情