gpt4 book ai didi

java - 对大量网站运行相同的测试

转载 作者:行者123 更新时间:2023-11-30 02:50:25 25 4
gpt4 key购买 nike

我需要对 70 多个网站运行相同的测试,这些网站功能相同但具有不同的外观。然而,它们都是通过不同的 URL 访问的。

使用 TestNG 和 Java,将 URL 传递给测试的有效方法是什么,以便我可以:a)针对每个站点运行每个测试并报告相同的情况b)并行执行测试以节省时间( future 需要)

我想以某种格式存储 URL,以便向最终用户公开并由他们进行配置。理想情况下,该文件位于 .csv 中,或者位于 testng.xml 文件中。我正在考虑 @DataProvider 或 @Factory,但不确定如何以有效且可维护的方式使用它们来从外部源获取参数,或者在我当前的模型中,此类方法最适合放置在哪里?我遇到的困难是,我不想将数据必然传递到 @Test 中,而是一次传递一个值(一个 url)并针对所有 @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="test@example.co.uk"/>
<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...

我的页面对象:

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...

我的 Selenium 方法基本页面:

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"}
};
}
}

最后,一个当前仅包含 BaseUrl 的 Config:

public interface Config {

String baseUrl = System.getProperty("baseUrl",
String browser = System.getProperty("browser", "chrome");
String host = System.getProperty("host", "localhost");

}

最佳答案

您可以在测试类 EndToEndTest 的构造函数上使用 @Factory 注释并为其提供数据提供程序。

private String url;

@Factory(dataProvider = "urls", dataProviderClass = URLProvider.class)
public EndToEndTest(String url) {
this.url = url;
}

您需要提供 URL 数据提供程序类的实现,以访问 Excel 或任何您想要的文件并返回 Object[][]。

需要修改 HomePage 和 SeleniumBase 的构造函数以传入您从 @BeforeClass 方法调用的 url。

这应该为每个 url 字符串为此测试类创建一个单独的实例,并调用 @Test 方法。

如果您需要传递的数据多于字符串 URL,则可以使用对象。正如我所看到的,您在 testng.xml 中为方法传递了 4 个参数。

并行性应该非常简单,猜测您希望在单个线程中运行给定 url 的所有 @Test 方法。并行选项是“类”。

关于java - 对大量网站运行相同的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38854508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com