λ©μλ μμ€μμ νΉμ 맀κ°λ³μλ₯Ό μ§μν μ μμ΅λκΉ?
μλ₯Ό λ€μ΄,
<test name="Regression1">
<groups>
<run>
<exclude name="brokenTests" />
<include name="checkinTests" />
</run>
</groups>
<classes>
<class name="test.IndividualMethodsTest">
<methods>
<include name="testMethod" param1="121" param2="1212" />
</methods>
</class>
</classes>
</test>
testng μ½λλ₯Ό μμ νμ¬ μ΄λ₯Ό λ¬μ±νλ €κ³ ν©λλ€. μ΄μ λν μ§μΉ¨/μμμ κ°μ¬λ립λλ€.
μλμ, @DataProvider
λ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
@cbeust , @DataProvider
μ λ¬Έμ λ testng.xmlμμ μ μν μ μλ€λ κ²μ
λλ€. μ΄ λ§€κ°λ³μλ₯Ό μ λ¬νλ μ΄μ λ λ©μλμ λν λ°μ΄ν°κ° λ°μ΄ν°λ² μ΄μ€μμ μ 곡λκ³ μ΄ λ§€κ°λ³μκ° κΈ°λ³Έ ν€μ΄κΈ° λλ¬Έμ
λλ€. μ΄ ν€λ₯Ό μ¬μ©νκ³ , λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ , 리νλ μ
μ μ¬μ©νμ¬ λ°νμμ λ©μλμ λν λ°μ΄ν° κ°μ²΄λ₯Ό λ§λ€κ³ μΆμ΅λλ€. μ¦, DataProviderλ₯Ό μ¬μ©νλλΌλ λ°μ΄ν°λ² μ΄μ€μμ μ νν΄μΌ νλ ν μ§ν©μ λνλ΄κΈ° μν΄ λ°νμμ κ°μ μ λ¬ν΄μΌ ν©λλ€. μ΄κ²μ testngλ₯Ό νλ‘κ·Έλλ° λ°©μμΌλ‘ μ¬μ©νλ μλ리μ€μ λν κ²μ
λλ€.
testng.xml
μμ μ νλ μμ 맀κ°λ³μλ₯Ό μ μν μ μμ΅λλ€.
http://testng.org/doc/documentation-main.html#parameters -testng-xml
μΈλλ¦
2015λ 10μ 12μΌ μμμΌ μ€ν 9:03 JayVem [email protected] μμ λ€μκ³Ό κ°μ΄ μΌμ΅λλ€.
@cbeust https://github.com/cbeust , @DataProvider μ λν λμ μ
testng.xmlμμ μ μν μ μμ΅λκΉ? μ΄κ²μ ν΅κ³Όν μ΄μ
맀κ°λ³μλ λ©μλμ λν λ°μ΄ν°κ° λ°μ΄ν°λ² μ΄μ€μμ μ 곡λλ€λ κ²μ λλ€.
맀κ°λ³μλ κΈ°λ³Έ ν€μ λλ€. μ΄ ν€λ₯Ό μ¬μ©νκ³ , λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ ,
리νλ μ μ μ¬μ©νμ¬ λ°νμμ λ©μλμ λν λ°μ΄ν° κ°μ²΄μ λλ€. κ·Έλμ μ컨λ, μ¬μ§μ΄
DataProviderλ₯Ό μ¬μ©νλ κ²½μ° λ°νμμ κ°μ μ λ¬ν΄μΌ ν©λλ€.
λ°μ΄ν°λ² μ΄μ€μμ μ νν΄μΌ νλ ν μ§ν©μ λνλ λλ€. μ°Έκ³ λ‘ μ΄
testngλ₯Ό νλ‘κ·Έλλ° λ°©μμΌλ‘ μ¬μ©νλ μλ리μ€μ©μ λλ€.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ GitHubμμ νμΈνμΈμ.
https://github.com/cbeust/testng/issues/823#issuecomment -147592710.
@cbeust μ΄ λ§€κ°λ³μλ μ νκ΅° μμ€μ΄ μλλκΉ? λ©μλ μμ€μμ 볡μ‘ν λ°μ΄ν° νμμ λ§λ€κ³ μΆλ€λ©΄ μ΄λ»κ² ν΄μΌ ν κΉμ? μλ₯Ό λ€μ΄, μ΄ μ½λλ₯Ό κ³ λ €νμμμ€...
public class EmployeeBenefitsCalculator {
<strong i="7">@Test</strong>
public void calculateBenefits(Employee employee) {
//do something with employee here.
}
}
computeBenefits λ©μλλ‘ μ μ‘λλ Employee 맀κ°λ³μλ λ°μ΄ν°λ² μ΄μ€μμ μμ±λμ΄μΌ ν©λλ€. μ΄λ»κ² νλ©΄ λ κΉμ? κΈ°λ³Έ ν€λ₯Ό μ λ¬νκ³ CalculateBenefits λ©μλ λ΄μμ μ΄ κΈ°λ³Έ ν€λ₯Ό μ½κ³ dbμμ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ³ ν΄λΉ ν μ€νΈ μ€νμ μν μ§μ κ°μ²΄λ₯Ό λ§λ€κ³ μΆμ΅λλ€. 볡μ‘νκ² λ€λ¦°λ€λ κ²μ μκ³ μμ΅λλ€. μ΄κ²μ΄ λ΄κ° μ°Ύλ κ²μ΄λΌκ³ μκ°ν©λλ€ -
public class EmployeeBenefitsCalculator {
<strong i="11">@Test</strong>
public void calculateBenefits(Employee employee) {
employee = DataStore.fetch("id_from_testng_xml");
}
}
λ°νμμ ν μ€νΈλ₯Ό μν΄ λ°μ΄ν° μ 곡μμκ² λ§€κ°λ³μλ₯Ό μ 곡νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν©λκΉ? testng μμ€λ₯Ό λ³κ²½νμ¬ μ΄ λμμ μμ±νλ κ²μ΄ μΌλ§λ μ¬μ΄κ°μ?
λ°μ΄ν° 곡κΈμ + 맀κ°λ³μλ₯Ό νΌν©ν μ μμ΅λλ€. λ°μ΄ν° 곡κΈμλ 맀κ°λ³μμμ κΈ°λ³Έ ν€λ₯Ό κ°μ Έμ€κ³ μ§μ κ°μ²΄λ₯Ό λ§λ€κ³ λ€λ₯Έ μμ±μ μ λ¬ν©λλ€. κ·Έλ° λ€μ ν
μ€νΈ λ°©λ²μ λ°μ΄ν° 곡κΈμμ ν΄λΉ μμ±μ μ¬μ©ν©λλ€.
μ¬μ΄! ;)
@juherr κ°κ° λ°μ΄ν° μ 곡μ μκ² κ°λ λ©μλ μμ€μμ μ¬λ¬ 맀κ°λ³μλ₯Ό κ°μ§ μ μλ λ°©λ²μ λν μλ₯Ό λ€μ΄ μ£Όμκ² μ΅λκΉ?
@juherr λ΄ μ§λ¬Έμ λ¨μννκΈ° μν΄ νλ‘κ·Έλλ° λ°©μμΌλ‘ testng.xmlμ μμ±νκ³ μμ΅λλ€. μ΄μ modifyEmployee(Employee employee) λ©μλκ° μλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. μ΄ λ©μλκ° 4λ² νΈμΆλμ§λ§ λ§€λ² λ€λ₯Έ Employeeλ₯Ό μ¬μ©νλ λ°©μμΌλ‘ xmlμ λ§λ€μ΄μΌ ν©λλ€. λλ testng.xmlμ μμ±ν λ μ΄ μ§μλ€ κ°κ°μ κΈ°λ³Έ ν€λ₯Ό μκ³ μμ κ²μ λλ€. κ·Έλ λ€λ©΄ λ΄κ° νλ €λ κ²μ μ±μ·¨νλ κ°μ₯ μ’μ λ°©λ²μ 무μμ λκΉ?
@DataProvider κ° @Parameters μ ν¨κ» μλν μ μλ€κ³ κ°μ νμ§λ§ νμ€νμ§ μμ΅λλ€(μΈμ κ°λ ν
μ€νΈν΄μΌ ν¨).
BTW, μνλ κ²μ μ΄ν΄νλ©΄ ν
μ€νΈ μμ€μμ λ§€κ° λ³μλ₯Ό μλ ν μ μμ΅λλ€ (λ©μλ μμ€μ λ§€κ° λ³μλ μ‘΄μ¬νμ§ μμ).
<suite>
<test name="Regression1">
<parameter name="param1" value="121" />
<parameter name="param2" value="1212" />
<groups>
<run>
<exclude name="brokenTests" />
<include name="checkinTests" />
</run>
</groups>
<classes>
<class name="test.IndividualMethodsTest">
<methods>
<include name="testMethod" />
</methods>
</class>
</classes>
</test>
<test name="Regression2">
<parameter name="param1" value="454" />
<parameter name="param2" value="4545" />
<groups>
<run>
<exclude name="brokenTests" />
<include name="checkinTests" />
</run>
</groups>
<classes>
<class name="test.IndividualMethodsTest">
<methods>
<include name="testMethod" />
</methods>
</class>
</classes>
</test>
<suite>
λ λ§μ μμ΄λμ΄λ₯Ό μνμλ©΄ Staskoverflowλ λ©μΌλ§ 리μ€νΈμ μ§λ¬Έμ νμΈμ ;)
μ€μ λ‘ λ©μλ μμ€μ λ§€κ° λ³μκ° μ‘΄μ¬ν©λλ€. λ€μμ μμ λλ€.
<suite name="my-suite" verbose="1">
<test name="my-test">
<classes>
<class name="testng.ex1.TestParams">
<methods>
<include name="m1">
<parameter name="key1" value="val1"/>
<parameter name="key2" value="val2"/>
</include>
<include name="m2">
<parameter name="key1" value="valA"/>
<parameter name="key2" value="valB"/>
</include>
</methods>
</class>
</classes>
</test>
</suite>
package testng.ex1;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class TestParams {
<strong i="8">@Test</strong>
@Parameters({ "key1", "key2" })
public void m1(String key1, String key2) throws Exception {
System.out.println(key1 + ", " + key2);
}
<strong i="9">@Test</strong>
@Parameters({ "key1", "key2" })
public void m2(String key1, String key2) throws Exception {
System.out.println(key1 + ", " + key2);
}
}
:+1: λ€νμ΄λ€! λλ κ·Έκ²μ μ μ λ³Έ μ μ΄ μλ€.
@JayVem μ΄λ―Έ μ‘΄μ¬νλ λ¬Έμ λ₯Ό μ’ λ£ν©λλ€.
λ λ€λ₯Έ μ κ·Ό λ°©μμ testng.xmlμμ ν€λ₯Ό κ°μ Έμ€λ λ°μ΄ν° 곡κΈμλ₯Ό μ¬μ©νλ κ²μ λλ€. μλ₯Ό μ°Έμ‘°νμμμ€.
<suite name="my-suite" verbose="1">
<test name="my-test">
<classes>
<parameter name="keys" value="key1,key2,key3,key4" />
<class name="testng.ex2.TestParams" />
</classes>
</test>
</suite>
package testng.ex2;
import java.util.Arrays;
import java.util.List;
import org.testng.ITestContext;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
public class TestParams {
@Test(dataProvider = "dp")
public void m1(Employee e) throws Exception {
System.out.println("name: " + e.getName() + ", age: " + e.getAge());
}
@DataProvider(name = "dp")
@Parameters("keys")
public Object[][] createData(ITestContext ctx) {
String keysString = ctx.getCurrentXmlTest().getLocalParameters().get("keys");
List<String> keys = Arrays.asList(keysString.split(","));
Object[][] result = new Object[keys.size()][1];
for (int i = 0; i < keys.size(); i++) {
String key = keys.get(i);
result[i] = new Object[] { new Employee(key) };
}
return result;
}
}
package testng.ex2;
public class Employee {
private final String name;
private final int age;
public Employee(String key) {
// use 'key' to lookup employee in database
name = key + "_name"; // dummy value
age = 41; // dummy value
}
String getName() {
return name;
}
int getAge() {
return age;
}
}
@drapostolos μκ² κ°μ¬λ립λλ€.
κ°μ₯ μ μ©ν λκΈ
μ€μ λ‘ λ©μλ μμ€μ λ§€κ° λ³μκ° μ‘΄μ¬ν©λλ€. λ€μμ μμ λλ€.