TestNG - Parametertest (XML und @DataProvider)
In diesem Tutorial zeigen wir Ihnen, wie Sie Parameter über XML@Parameters
oder@DataProvider
an eine@Test
-Methode übergeben.
1. Übergeben von Parametern mit XML
In diesem Beispiel wird der Dateiname der Eigenschaften vontestng.xml
übergeben und über@Parameters
in die Methode eingefügt.
TestParameterXML.java
package com.example.testng.examples.parameter; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.Properties; import org.testng.annotations.Parameters; import org.testng.annotations.Test; public class TestParameterXML { Connection con; @Test @Parameters({ "dbconfig", "poolsize" }) public void createConnection(String dbconfig, int poolsize) { System.out.println("dbconfig : " + dbconfig); System.out.println("poolsize : " + poolsize); Properties prop = new Properties(); InputStream input = null; try { //get properties file from project classpath input = getClass().getClassLoader().getResourceAsStream(dbconfig); prop.load(input); String drivers = prop.getProperty("jdbc.driver"); String connectionURL = prop.getProperty("jdbc.url"); String username = prop.getProperty("jdbc.username"); String password = prop.getProperty("jdbc.password"); System.out.println("drivers : " + drivers); System.out.println("connectionURL : " + connectionURL); System.out.println("username : " + username); System.out.println("password : " + password); Class.forName(drivers); con = DriverManager.getConnection(connectionURL, username, password); } catch (Exception e) { e.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/exampleserver jdbc.username=example jdbc.password=password
testng.xml
Ausgabe
dbconfig : db.properties poolsize : 10 drivers : com.mysql.jdbc.Driver connectionURL : jdbc:mysql://localhost:3306/exampleserver username : example password : password
2. Übergeben von Parametern mit @DataProvider
2.1 Sehen Sie sich ein einfaches@DataProvider
-Beispiel an und übergeben Sie einenint
-Parameter.
TestParameterDataProvider.java
package com.example.testng.examples.parameter; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class TestParameterDataProvider { @Test(dataProvider = "provideNumbers") public void test(int number, int expected) { Assert.assertEquals(number + 10, expected); } @DataProvider(name = "provideNumbers") public Object[][] provideData() { return new Object[][] { { 10, 20 }, { 100, 110 }, { 200, 210 } }; } }
Ausgabe
PASSED: test(10, 20) PASSED: test(100, 110) PASSED: test(200, 210)
2.2@DataProvider
unterstützt die Übergabe einesobject
-Parameters. Das folgende Beispiel zeigt, wie Sie einMap
-Objekt als Parameter übergeben.
TestParameterDataProvider.java
package com.example.testng.examples.parameter; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Properties; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class TestParameterDataProvider { @Test(dataProvider = "dbconfig") public void testConnection(Mapmap) { for (Map.Entry entry : map.entrySet()) { System.out.println("[Key] : " + entry.getKey() + " [Value] : " + entry.getValue()); } } @DataProvider(name = "dbconfig") public Object[][] provideDbConfig() { Map map = readDbConfig(); return new Object[][] { { map } }; } public Map readDbConfig() { Properties prop = new Properties(); InputStream input = null; Map map = new HashMap (); try { input = getClass().getClassLoader().getResourceAsStream("db.properties"); prop.load(input); map.put("jdbc.driver", prop.getProperty("jdbc.driver")); map.put("jdbc.url", prop.getProperty("jdbc.url")); map.put("jdbc.username", prop.getProperty("jdbc.username")); map.put("jdbc.password", prop.getProperty("jdbc.password")); } catch (Exception e) { e.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } return map; } }
Ausgabe
[Key] : jdbc.url [Value] : jdbc:mysql://localhost:3306/exampleserver [Key] : jdbc.username [Value] : example [Key] : jdbc.driver [Value] : com.mysql.jdbc.Driver [Key] : jdbc.password [Value] : password PASSED: testConnection({jdbc.url=jdbc:mysql://localhost:3306/exampleserver, jdbc.username=example, jdbc.driver=com.mysql.jdbc.Driver, jdbc.password=password})
3. @ DataProvider + Methode
Dieses Beispiel zeigt Ihnen, wie Sie abhängig vom Namen der Testmethode unterschiedliche Parameter übergeben.
TestParameterDataProvider.java
package com.example.testng.examples.parameter; import java.lang.reflect.Method; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class TestParameterDataProvider { @Test(dataProvider = "dataProvider") public void test1(int number, int expected) { Assert.assertEquals(number, expected); } @Test(dataProvider = "dataProvider") public void test2(String email, String expected) { Assert.assertEquals(email, expected); } @DataProvider(name = "dataProvider") public Object[][] provideData(Method method) { Object[][] result = null; if (method.getName().equals("test1")) { result = new Object[][] { { 1, 1 }, { 200, 200 } }; } else if (method.getName().equals("test2")) { result = new Object[][] { { "[email protected]", "[email protected]" }, { "[email protected]", "[email protected]" } }; } return result; } }
Ausgabe
PASSED: test1(1, 1) PASSED: test1(200, 200) PASSED: test2("[email protected]", "[email protected]") PASSED: test2("[email protected]", "[email protected]")
4. @DataProvider + ITestContext
In TestNG können wirorg.testng.ITestContext
verwenden, um zu bestimmen, mit welchen Laufzeitparametern die aktuelle Testmethode aufgerufen wurde. In diesem letzten Beispiel zeigen wir Ihnen, wie Sie Parameter abhängig vom enthaltenen Gruppennamen übergeben.
TestParameterDataProvider.java
package com.example.testng.examples.parameter; import org.testng.Assert; import org.testng.ITestContext; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class TestParameterDataProvider { @Test(dataProvider = "dataProvider", groups = {"groupA"}) public void test1(int number) { Assert.assertEquals(number, 1); } @Test(dataProvider = "dataProvider", groups = "groupB") public void test2(int number) { Assert.assertEquals(number, 2); } @DataProvider(name = "dataProvider") public Object[][] provideData(ITestContext context) { Object[][] result = null; //get test name //System.out.println(context.getName()); for (String group : context.getIncludedGroups()) { System.out.println("group : " + group); if ("groupA".equals(group)) { result = new Object[][] { { 1 } }; break; } } if (result == null) { result = new Object[][] { { 2 } }; } return result; } }
testng.xml
Ausgabe
group : groupA
Erledigt.