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(Map map) {
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.