2016-06-21 2 views
0

여러 장치에서 동시에 Appium을 사용하여 테스트를 실행하기위한 testNG 제품군을 만들려고합니다. 현재 @BeforeSuite를 사용하여 각 장치에 대한 서버/드라이버를 설정 한 다음 @BeforeMethod 및 @AfterMethod 함수를 사용하여 테스트 메소드에 연결을 분배합니다. 필자는 각 테스트 클래스와 관련된 여러 하위 .xml 파일을 호출하는 마스터 suite-suite-xml을 보유하고 있습니다. 테스트 클래스는 @Factory와 각각 연결되어있어 인스턴스를 병렬로 실행할 수 있습니다 (연결된 장치 수에 따라 런타임에 결정됨).TestNG Appium Paralell Run Organization

부모

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="Default Suite"> 
    <parameter name="other" value="@[email protected]"></parameter> 
    <suite-files> 
    <suite-file path="src/first.xml" /> 
    <suite-file path="src/second.xml" /> 
    </suite-files> 
</suite> 

나는 확실히 싶지 않아

public class TestFactory { 

    @Factory 
    public Object[] initial() { 
     int numDevices = DeviceManager.getNumAttachedDevices(); 
     Object[] result = new Object[numDevices]; 
     for (int i = 0; i < numDevices; i++) { 
      result[i] = new StartupTest(); 
     } 

     return result; 
    } 
} 

아이

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="first" parallel="instances"> 
    <test name="android"> 
    <classes> 
     <class name="TestFactory" /> 
    </classes> 
    </test> 
</suite> 

공장 이. 필자가 원하는 각 테스트 클래스에 대해 새 @Factory 클래스를 만들어야한다는 것은 상당히 우스운 것 같습니다. 최근에 비슷한 결과를 얻기 위해 paralell = "methods"및 invocationCount에 대한 주석 변 환기와 함께 사용할 수있는 @DataProvider 내부에 parallel = true를 사용할 수 있다는 것을 알았습니다 (첨부 된 각 메소드에 대해 하나의 메소드가 실행 중임). 장치).

@BeforeMethod 및 @AfterMethod 호출을 사용하여 올바른 장치에서 필수 설정 및 정리를 수행하는 방법을 모르겠습니다 (장치 이름이 누락 됨). 이 작업을 수행하는 다른 권장 방법이 있습니까? 아니면이게 최선의 선택입니까?

답변

0

별도의 클래스를 만드는 대신 테스트 클래스 내에서 @Factory 메서드를 사용할 수 있습니다.

내가 알 수있는 한, TestNG 스레드를 parallel = "methods"에서 제어하는 ​​것이 간단하지 않아 단일 메소드를 실행 한 후에 모두 결합됩니다. 이 기능이 없으면 @DataProvider를 사용하는 것이 훨씬 더 복잡하고 보람이없는 것처럼 보입니다.

내 @Factory 안에 각 인스턴스에 대한 사용자 지정 인수를 계속 전달할 수 있습니다.