2014-06-05 3 views
0

는이 전 다음과 같은 데이터읽기 데이터

username=testuser 
password=testpassword 
[email protected] 
address=testaddress 
zipcode=12345 

텍스트 파일이 아니면 다음과 같은 데이터로 XML을

<TestData> 
    <UserInfo> 
     <username>testuser</username> 
     <password>testpassword</password> 
     <email>[email protected]</email> 
     <address>testaddress</address> 
    </UserInfo> 
</TestData> 

내가 테스트로 있다고 가정 해 봅시다

public class DPTest { 

    @Test(dataprovider="testdp") 
    public void userTest_01(String username, String Password) { 

    //Test goes here 

    } 
} 

또 다른 클래스 아래

public class DPTest2 { 

    @Test(dataprovider="testdp") 
    public void userTest_02(String email, String address, String password) { 

    //Test goes here 

    } 
} 

내 dataprovider는 위에서 언급 한 텍스트 파일 또는 XML에서 값을 읽고 테스트 메소드에 제공 할 수 있습니까?

데이터 제공 업체는 텍스트 파일의 모든 행을 읽고이를 테스트 메소드에 제공하고 "데이터 제공 업체가 6 개의 매개 변수를 제공하려고 시도하지만 테스트는 2 개의 매개 변수 만 허용 할 수 있습니다 "?

도와주세요.

답변

3

네, 가능의 '객체 [] []'로 돌아갑니다. 주석을 만들어이 DataProvider가 XML에서로드해야하는 매개 변수를 지정할 수 있습니다.

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface XmlParameters { 
    String[] value();  
} 

@Test(dataProvider = "XMLFileLoader") 
@XmlParameters({"username", "password"}) 
public void testSomething(String username, String password) { 
    // implementation omitted for brevity 
} 

@DataProvider(name = "XMLFileLoader") 
public static Object[][] getDataFromXmlFile(final Method testMethod) { 
    XmlParameters parameters = testMethod.getAnnotation(XmlParameters.class); 
    String[] fields = parameters.value(); 
    //load just the fields you want 
    return new Object[][] { { "user1", "pass1" } }; 
} 

이 코드는 주석이 값을 읽기 전에 null가 아닌 경우, 당신은 확인해야한다 "제작 준비"아니, 당신 때문에, 다른 클래스로 XML을로드하는 인터페이스와 논리를 이동 아마도 더 다른 테스트에서 재사용 할 수 있습니다.

0

버디, 당신은 잘못된 방식으로 데이터 제공 업체를 찾고 있습니다. testNG 문서를 참조하십시오. http://testng.org/doc/documentation-main.html

당신은 아래 코드와 같은 것을 통해 목표를 달성 할 수 있습니다. Test 클래스에는 테스트 메소드가 포함되어 있습니다. 다른 클래스 TestData에 지정된 dataprovider에서 데이터를 가져옵니다. TestData 클래스에서 우리는 파일/XML 데이터에 액세스하는 방법을 정의하고 '@DataProvider'방법

public class Test { 
    @Test(dataProvider="testData" dataProviderclass = TestData.class) 
    public void userTest(TestData testData) { 
     //Test code goes here 
    } 
} 

public class TestData { 

    private String username; 
    private String password; 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getUsername() { 
     return username;   
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public String getPassword() { 
     return password; 
    } 

    @DataProvider(name="testData") 
    public static Object[][] userTestData (TestData testData) {   
     //Code to read from file/xml 
     TestData testData = new TestData(); 
     testData.setUsername("Get from file/xml"); 
     testData.setPassword("Get from file/xml") 

     return new Object{{testData}} 
    } 
} 
+0

두 필드에 대해 getter 및 setter를 사용하여 수행 할 수 있음을 알고 있습니다. 하지만 수천 개의 테스트 데이터가 있고이를 모두 하나의 파일로 가지고 있다고 가정 해 봅시다. 따라서 동적으로 내 테스트 사례가 데이터 제공 업체의 테스트 데이터를 사용할 수 있어야합니다. "tiagohngl"의 답변을 사용하면 가능합니다. –