2016-06-03 6 views
0

Ich mache Tests mit TesnNG. Ich habe Klasse von Konstanten Constant.java:Testng: Werte von XML nach Java-Klasse übergeben

public class Constants { 
    public static final String ID = "myID"; 
    public static final String PASSWORD = "support1"; 
    public static final String ENV = "stage"; 
    public static final String ACCOUNT = "000458"; 

Diese Parameter werden unterschiedlich und hängen von Konten und Umgebungen. Ist es eine Art und Weise zum Beispiel die Verwendung Test.xml:

<suite name="Regression"> 
<parameter name="asset" value="0"/> 
<test name="Test3"> 
    <classes> 
     <class name="UnTrusted.Login"/> 
     <class name="NegativeLogin"/> 
    </classes> 
</test> 

und übergeben Sie Parameter von XML zu Constant.java, die Werte haben: id, password, env, account#.

Ich weiß, dass Sie Parameter von XML zu @Test mit @Parameters übergeben können, aber ich bin nicht in @Test Annotation übergeben. Jede Hilfe wird geschätzt.

+0

Es klingt wie Ihre Konstanten Eigenschaften sind keine Konstanten. Dies bedeutet, dass die Werte zur Laufzeit gefüllt werden sollten. –

+0

Ich habe zuerst sie konstant. Jetzt haben sich die Anforderungen geändert, ich möchte sie jederzeit füllen. –

Antwort

0

Teilen Sie einfach meine Gedanken .. 1) Sie können stattdessen eine einfache setter/getter Klasse erstellen. 2) Verwenden Sie Unmarshalling, um XML in JAVA zu konvertieren 3) Sobald Sie das Objekt generiert haben, können Sie Ihre setter/getter Klasse mit diesem generierten Objekt festlegen.

Hoffnung, das hilft ..

0

Möglicherweise, wenn Sie es als Voraussetzung Änderung bezeichnen. Sie können Ihren Ansatz mit der Verwendung von DataProviders ändern.

// In Ihrer Datenklasse XYZ:

@DataProvider(name = "LoginData") 
public static Object[][] dataProviderLogin(ITestContext context) throws Exception { 
    String testData = context.getCurrentXmlTest().getLocalParameter(); //to get the params for *test* 
    String suiteData = context.getCurrentXmlTest().getXmlSuite().getParameters(); //to get the params for *suite* 
.... other data to be added to the test 
} 

in Ihrer Testklasse:

@Test(priority = 1, dataProvider = "LoginData",dataProviderClass=XYZ.class) 
public static void testLogin(String param) // arguments vary based on what data providers return 
{