Под приемочным веб-тестированием я имею в виду тест, который открывает веб-страницу в одном из браузеров (Chrome/Firefox/Edge/...) с использованием драйвера (например, chromedriver / geckodriver и т. д.), манипулирует веб-страницей так, как хочет тест, а затем «собирает» некоторый вывод (например, есть ли на веб-странице элемент этот или тот ИЛИ это перейти к этой или той ожидаемой странице). Фактические детали не имеют значения.
Учитывая, что такие тесты, естественно, большую часть времени проводят в ожидании (чтобы быть уверенным, что однажды они захотят манипулировать какой-либо веб-страницей [элемент], то он наверняка загружен) тогда кажется разумным предположить, что если у меня есть N логических ядер на машине, то я смогу создать как минимум N< /strong> таких приемочных веб-тестов.
Типичный код C# для этого можно резюмировать следующим образом:
Код: Выделить всё
namespace WebAcceptanceTests
{
public static class Chrome
{
public static async Task Run(
Uri uri,
Func manipulate,
Action validate)
{
var chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = true;
var options = new ChromeOptions();
// To make Chrome window invisible.
options.AddArgument("--headless");
using var driver = new ChromeDriver(chromeDriverService, options);
try
{
driver.Manage().Window.Maximize();
driver.Navigate().GoToUrl(uri);
await manipulate(driver);
validate(driver);
}
finally
{
driver.Quit();
}
}
}
}
Код: Выделить всё
public static async Task Manipulate(ChromeDriver driver)
{
// Do some useful stuff here instead of just waiting.
await Task.Delay(60_000);
}
OpenQA.Selenium.WebDriverException: время ожидания HTTP-запроса к удаленному серверу WebDriver для URL-адреса http://localhost:52382/session истекло через 60 секунд.
Тестовый сервер, на котором я получаю эти ошибки, имеет 16 ядер и достаточно оперативной памяти, чтобы без проблем открывать сотни вкладок Chrome, но при этом имеет небольшое количество драйверов Chrome (менее 10 ) похоже, не работает параллельно.
Как заставить несколько драйверов Chrome работать параллельно? В идеале я бы хотел открыть драйверы (в 3-4 раза больше ядер), потому что они в основном будут ждать и ничего не делать.
Подробнее здесь: https://stackoverflow.com/questions/659 ... le-machine