Как запустить множество приемочных веб-тестов на одном компьютереC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как запустить множество приемочных веб-тестов на одном компьютере

Сообщение Anonymous »

Предположим, я хочу запустить так называемые приемочные веб-тесты на современной (на момент вопроса) машине, которая, скажем так, обычно имеет где-то между 16 и 128 логическими ядрами. В каждом конкретном случае это число может быть разным, но давайте пока придерживаться этого диапазона.
Под приемочным веб-тестированием я имею в виду тест, который открывает веб-страницу в одном из браузеров (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);
}
Однако, если я начну создавать такие драйверы, то очень быстро (при создании менее 10 драйверов) некоторые из созданных драйверов начнут выдавать странные ошибки, такие как:

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»