TestNG – パラメータテスト(XMLと@DataProvider)
このチュートリアルでは、XMLの
@ Parameters`または
@DataProvider`を使ってパラメータを `@ Test`メソッドに渡す方法を説明します。
1. XMLでパラメータを渡す
この例では、ファイルfilenameは
testng.xml`から渡され、
@ Parameters`を介してメソッドに注入されます。
TestParameterXML.java
package com.mkyong.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/mkyongserver jdbc.username=mkyong jdbc.password=password
testng.xml
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" > <suite name="test-parameter"> <test name="example1"> <parameter name="dbconfig" value="db.properties"/> <parameter name="poolsize" value="10"/> <classes> <class name="com.mkyong.testng.examples.parameter.TestParameterXML"/> </classes> </test> </suite>
出力
dbconfig : db.properties poolsize : 10 drivers : com.mysql.jdbc.Driver connectionURL : jdbc:mysql://localhost:3306/mkyongserver username : mkyong password : password
2. @DataProviderでパラメータを渡す
TestParameterDataProvider.java
package com.mkyong.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 } }; } }
出力
PASSED: test(10, 20) PASSED: test(100, 110) PASSED: test(200, 210)
-
2.2 **
@ DataProvider`は、
object`パラメータを渡すサポートです。
以下の例は `Map`オブジェクトをパラメータとして渡す方法を示しています。
TestParameterDataProvider.java
package com.mkyong.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<String, String> map) { for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("[Key]: " + entry.getKey() + "[Value]: " + entry.getValue()); } } @DataProvider(name = "dbconfig") public Object[][]provideDbConfig() { Map<String, String> map = readDbConfig(); return new Object[][]{ { map } }; } public Map<String, String> readDbConfig() { Properties prop = new Properties(); InputStream input = null; Map<String, String> map = new HashMap<String, String>(); 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; } }
出力
….[Key]: jdbc.url[Value]: jdbc:mysql://localhost:3306/mkyongserver[Key]: jdbc.username[Value]: mkyong[Key]: jdbc.driver[Value]: com.mysql.jdbc.Driver[Key]: jdbc.password[Value]: password
PASSED: testConnection({jdbc.url=jdbc:mysql://localhost:3306/mkyongserver,
jdbc.username=mkyong, jdbc.driver=com.mysql.jdbc.Driver, jdbc.password=password})
=== 3. @DataProviderメソッド この例では、テストメソッド名に応じて異なるパラメータを渡す方法を示します。 TestParameterDataProvider.java
package com.mkyong.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;
}
}
出力
PASSED: test1(1, 1)
PASSED: test1(200, 200)
PASSED: test2(”
[email protected]
“, ”
[email protected]
“)
PASSED: test2(”
[email protected]
“, ”
[email protected]
“)
=== 4. @DataProvider + ITestContext TestNGでは、 `org.testng.ITestContext`を使用して、現在のテストメソッドがどのランタイムパラメータで呼び出されたかを調べることができます。この最後の例では、含まれるグループ名に応じてパラメータを渡す方法を示します。 TestParameterDataProvider.java
package com.mkyong.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
<!DOCTYPE suite SYSTEM “http://beust.com/testng/testng-1.0.dtd” >
<suite name=”test-parameter”>
<test name="example1">
<groups> <run> <include name="groupA"/> </run> </groups>
<classes> <class name="com.mkyong.testng.examples.parameter.TestParameterDataProvider"/> </classes>
</test>
</suite>
出力
group : groupA
完了しました。 === 参考文献 . http://testng.org/doc/documentation-main.html#parameters-dataproviders[TestNG @DataProvider]。 http://testng.org/javadocs/org/testng/ITestContext.html[TestNG ITestContext JavaDoc]。 link://jdbc/how-to-connect-to-mysql-jdbc-driver-java/[接続先 MySQLとJDBCドライバ] link://tag/parameter-test/[パラメータテスト]link://tag/testng/[testng]