我正在设计一些针对网络过滤器运行的测试,并提出了大量流量同时到达过滤器的边缘情况。我知道在Selenium中我可以在页面上找到一个随机链接(链接选择器+一个随机数)并使用它来转到另一个页面。但是,有没有办法可以同时为50个标签执行此操作?测试的要点是打开50个标签并随机浏览每个页面上的链接以模拟比平时更重的负载(数量可能会有所不同,仅举例)。
到目前为止,我所能提出的是一个短循环,它将通过JavaScript打开50个标签,然后单独浏览标签并导航到其他地方。
@Test(timeout=1000000)
public void testHeavyUsageTraffic() throws Exception {
driver.get("http://**********.com");
Random rand = new Random();
WebElement randomLinkGenerator = driver.findElement(By.tagName("a"));
//Open several tabs to simulate increased load
((JavascriptExecutor)driver).executeScript("for (i = 0; i< 50;i++) { document.getElementsByTagName('a')[0].click(); }");
for (int i = 0; i < 5; i++) {
System.out.print("\nIteration " + (i + 1));
for (String window : driver.getWindowHandles()) {
//Switch to the next window and click the link to generate a random url request
driver.switchTo().window(window);
System.out.print("\n" + driver.getTitle());
List<WebElement> links = driver.findElements(By.tagName("a"));
System.out.print(" - # of Links: " + links.size());
//If no links are found on the page, skip to the next window
if (links.size() <= 0) {
driver.close();
continue;
}
//Randomly choose a link from the page and open it
int randomInt = rand.nextInt(links.size());
System.out.print(" - #" + randomInt + " was randomly chosen");
try {
links.get(randomInt).click();
}
catch (Exception e) {
System.out.print(" - Link was not clickable");
continue;
}
}
}
//TODO: REMOVE THIS
Thread.sleep(10000);
//Check for filtered traffic here...
//assert(checkFilteredTraffic("http://filtered-site.com"));
}
但是,这非常慢。 50个标签的原始开放非常快(JavaScript),但用于在标签之间切换和选择链接的Java非常慢。我假设这与Chrome驱动程序有关,或者只是Selenium如何处理多个窗口。
有谁知道如何更好地处理这个问题?重申一下,我希望能够模拟繁重的网络负载,然后在最后检查过滤后的站点,以确保在系统负载超过正常情况时它不会漏过。
编辑:我知道负载测试机制,但这个测试应该包含在Selenium测试用例中。
如果我应该包含其他内容,请告诉我。谢谢!