기능이 동일하지만 스킨이 다른 70 개 이상의 웹 사이트에 대해 동일한 테스트를 수행해야합니다. 그러나 서로 다른 URL을 통해 모두 액세스 할 수 있습니다. 가) 각 사이트에 대한 각 테스트를 실행하고 같은 나보고) 시간을 절약하기 위해 병렬로 테스트를 실행 : 나는 할 수 있도록 시험에 URL을 통과 할 수있는 효율적인 방법이 될 것입니다 무엇 TestNG를 자바를 사용수많은 웹 사이트에 대해 동일한 테스트를 실행합니다.
, (향후 필요)
URL을 최종 사용자에게 공개되고 사용자가 구성 할 수있는 형식으로 저장하려고합니다. 이상적으로는 .csv 또는 testng.xml 파일과 유사합니다. @DataProvider 또는 @Factory 중 하나를 생각하고 있지만 외부 소스에서 매개 변수를 가져 오는 데 효율적이고 유지 관리가 쉬운 방법으로 이러한 메서드를 사용하는 방법이 확실하지 않거나 현재 모델에서 이러한 메서드를 가장 잘 배치 할 수 있습니까? 내가 가지고있는 어려움은 데이터를 필연적으로 한 번에 하나의 값 (URL)으로 전달하고 모든 @Test 주석이있는 메서드에 대해 실행하여 @ Test로 반드시 데이터를 전달하고 싶지 않다는 것입니다.
testngxml:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite1" verbose="1">
<test name="FindARouteTest">
<parameter name="number" value="1"/>
<parameter name="from" value="LONDON"/>
<parameter name="to" value="GLASGOW"/>
<parameter name="emailAddress" value="[email protected]"/>
<classes>
<class name="acceptancetests.EndToEndTest">
</class>
</classes>
</test>
내 수용 테스트 :
public class EndToEndTest extends DriverBase{
private HomePage home;
private String url;
@Factory(dataProvider = "urls", dataProviderClass = URLProvider.class)
public EndToEndTest(String url) {
this.url = url;
}
@BeforeSuite
public void stuff(){
newDriver();
}
@BeforeClass
public void setup(){
home = new HomePage(driver, url);
}
@Test (priority = 1)
@Parameters({"from","to"})
public void searchForARoute(String from, String to) throws InterruptedException {
home.selectWhereFrom(from);
home.selectWhereTo(to);
//some assertions...
내 PageObject :
public class HomePage extends SeleniumBase {
public HomePage(WebDriver driver, String url) {
super(driver, url);
try {
visit(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
driver.manage().window().maximize();
}
public void someMethodOrOther(){
//some methods...
내 셀레늄 방법베이스 페이지를 다음과 같이
나의 현재 간단한 설치는
public class SeleniumBase implements Config {
public WebDriver driver;
public String url;
public SeleniumBase(WebDriver driver) {
this.driver = driver;
this.url = url;
}
public void visit() throws MalformedURLException {
driver.get(url);
} //more methods...
내 드라이버 자료 페이지 :
public class DriverBase implements Config {
public static WebDriver driver;
public static String url;
protected void newDriver() {
if (host.equals("localhost")) {
if (browser.equals("firefox")) {
System.setProperty("webdriver.gecko.driver",
System.getProperty("user.dir") + "\\drivers\\geckodriver.exe");
FirefoxProfile fp = new FirefoxProfile();
//more stuff
URL 제공자 클래스 : 마지막으로
public class URLProvider {
@DataProvider(name = "urls")
public static Object[][] dataProviderMethod()
{
return new Object[][] {{"http://siteone.com"},
{"http://sitetwo.com"},
{"http://sitethree.com"}
};
}
}
, 현재 만 base을 보유하고 구성 :
public interface Config {
String baseUrl = System.getProperty("baseUrl",
String browser = System.getProperty("browser", "chrome");
String host = System.getProperty("host", "localhost");
}
답장을 보내 주셔서 감사합니다. 귀하의 제안을 시도해보고 – Steerpike
이 어떻게 작동하는지 알려 드리지만 URLProvider.class에서 x3 URL로 디버깅하면 '@Factory'주석이 달린 생성자를 볼 수 있습니다. '@BeforeClass'앞에 3 번 (각 매개 변수 당 한 번) 호출되며 이것은 3 개의 스레드를 의미합니까? 나는 믿고, 3 개의 브라우저 윈도우는 테스트가 병렬로 실행된다. 시작하려면 각 URL을 전달하고 '@Tests'를 하나의 URL에 대해 실행 한 다음 다음 URL을 가져 오십시오. 따라서 EndtoEnd 생성자에 하나의 URL을 전달하고 테스트를 실행 한 후 다음을 가져옵니다. – Steerpike
나는 당신이 그것이 연속적으로 실행되기를 원한다는 것을 이해함에 따라, 한 URL은 다른 URL 다음에오고있다. 평행하지 않습니다. 그 맞습니까? testng.xml 또는 테스트에서 병렬 옵션을 제거하면 테스트가 차례대로 실행됩니다. – Grasshopper