1

, 데이터 프록시로 @Test 메서드가 있는데, 성공하면 testRil의 케이스 상태가 Listener 클래스의 onTestSuccess 메소드에 자동으로 "통과"로 설정됩니다.이 프로세스는 괜찮습니다. 그러나 @Test Method에 대해 dataprovider를 사용하면이 문제가 발생합니다.@Test 메서드에서 각 반복에 대해 TESTNG의 Listener 클래스에있는 onTestSuccess 메서드에 데이터를 전달하는 방법

메소드는 @apest 메서드에서 각 반복에 대해 onTestSuccess 메소드에 데이터 제공자 및 다른 케이스 ID 데이터를 3 회 전송해야합니다. @Test 메소드

My Listener.class

package com.myproject.test.listeners; 
import java.lang.reflect.Method; 
import org.testng.IClass; 
import org.testng.IInvokedMethod; 
import org.testng.IInvokedMethodListener; 
import org.testng.ISuite; 
import org.testng.ISuiteListener; 
import org.testng.ITestContext; 
import org.testng.ITestListener; 
import org.testng.ITestResult; 

public class Listener implements ITestListener, ISuiteListener, IInvokedMethodListener { 
    ... 
    public void onTestStart(ITestResult result) { 
    } 
    public void onTestSuccess(ITestResult result) { 
     try { 
      Program pr = new Program(); 
      System.out.println("onTestSuccess Method for :" + result.getName()); 
      String TestID = null; 
      String TestRunID = null; 
      for (Method testMethod : result.getTestClass().getRealClass().getMethods()) { 
       if (testMethod.getName().equals(result.getName()) && testMethod.isAnnotationPresent(UseAsTestRailId.class)) { 


        UseAsTestRailId useAsTestName = testMethod.getAnnotation(UseAsTestRailId.class); 
        TestID = Integer.toString(useAsTestName.testRailCaseId()); 
        TestRunID = Integer.toString(useAsTestName.testRailRunId()); 
        System.out.println("Case ID---> " + TestID + " Run ID--> " + TestRunID); 
        // 1 = Passed 
        pr.enterTestResult(TestRunID, TestID, 1); 
       } 
      } 
     } catch (Exception ex) { 
      System.out.println(ex.toString()); 
     } 
    } 

... 
} 

내 테스트 클래스 내 @Test 방법 (checkCurrentPasswordFormatIsValidatedTest)

@Listeners(com.test.listeners.Listener.class) 
//listener annotation row is written in BaseTest class 
public class SettingsTests extends BaseTest { 


... 


    /** 
    * Test Case - C5001275 - Check that "Please enter at least 8 characters." 
    * message is displayed when entered value into "Current Password" field in 
    * wrong format This case will run two times! 
    * 
    * @param currentPasswordValue 
    */ 
    @Test(dataProvider = "currentPasswordTestWithWrongValue") 
    @UseAsTestRailId(testRailCaseId = 5001275,testRailRunId = 56662) 
    // aim is that to send different case id for each iteration,now even if method works twice , only one testRailCaseId is sent 
    public void checkCurrentPasswordFormatIsValidatedTest(String currentPasswordValue) { 
     logger.trace("STARTING TEST: checkCurrentPasswordFormatisValidatedTest"); 

     logger.trace("Test Step : Enter current password in wrong format"); 
     settingsPageObject.enterCurrentPassword(currentPasswordValue); 

     logger.trace("Test Step : Click on the button 'UPDATE' "); 
     settingsPageObject.clickOnUpdateButton(); 

     logger.trace("Expected Result: The message 'Please enter at least 8 characters.' is displayed on screen."); 
     Assert.assertEquals(settingsPageObject.getCurrentPasswordWrongText(), "Please enter at least 8 characters."); 
    } 



    @DataProvider(name = "currentPasswordTestWithWrongValue") 
    public static Object[][] validateTestWithCurrentPasswordInWrongFormat() { 

     return new Object[][] { { RandomStringUtils.randomAlphabetic(7) }, { RandomStringUtils.randomAlphabetic(1) } }; 
    } 


... 

} 

내 주석 클래스 (UseAsTestRailId.java)

import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 


@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface UseAsTestRailId 
{ 
    int testRailCaseId() default 0; 
    int testRailRunId() default 0; 
    String[] tags() default ""; 
} 

일부 @Test 방법에 포함 (SettingsTests.java) 2 개의 대소 문자 상태를 설정하고 testRail에서 3 개의 대소 문자 상태를 설정하는 몇 가지 @Test 메서드를 사용하므로 더 많은 대다수 데이터 집합이 필요하면 더 많은 대문자 ID가 필요하므로 더 동적 인 형식이어야합니다.

+0

기본적으로 onTestSuccess에서 testcase id를 동적으로 생성 하시겠습니까? –

+0

실제로 테스트 케이스 ID를 dataprovider에 수동으로 추가하고 onTestSuccess에 전달하려는 경우 (예 : new Object [] [] {{RandomStringUtils.randomAlphabetic (7), testrailcaseid_1}, {RandomStringUtils.randomAlphabetic (1), testrailcaseid_2} }; 어떻게 testapuid를 dataapprovider로 작성하여 onTestSuccess 메소드로 전달할 수 있습니까? @niharika_neo – kykbr

답변

2

testresult 개체의 setattribute 값을 사용하여 사용자 지정 값을 설정할 수 있습니다. Reporter : Reporter.getCurrentTestresult에서 currentresult를 가져온 다음 setAttribute ("TC_id", sasdf)를 사용하고 result 객체에 getAttribute ("TC_id")를 사용하여 ontestsuccess에서이를 사용합니다.

+0

대단히 감사합니다! @niharika_neo, 그것은 일했다! , 다음 코드 블록을 테스트 메소드에 추가했습니다. -> ITestResult ITResult = Reporter.getCurrentTestResult(); \t \t int [] testRailCaseIDs = {5092182}; \t \t ITResult.setAttribute ("testRailCaseIDs", testRailCaseIDs); \t 및 관련 코드 블록을 "onTestSuccess"에 추가 -> int values ​​[] = (int []) result.getAttribute ("testRailCaseIDs"); – kykbr

관련 문제