Azure Selenium Testing - «Потоки STDIO не закрывались в течение 10 секунд после события выхода из процесса» - PullRequest
1 голос
/ 07 мая 2020

У меня есть выпуск Azure DevOps CI, в котором одновременно выполняется огромное количество тестов на селен на одном сервере. Обычно это отлично работает, но иногда из-за этой ошибки время ожидания моей тестовой задачи на селен истекает:

2020-05-07T15: 47: 37.0692681Z Завершенная модель TestExecution ... 2020-05-07T15: 47 : 48.6637501Z Потоки STDIO не закрылись в течение 10 секунд после события выхода из процесса 'C: \ TFSAgent5_work_tasks \ VSTest_ef087383-ee5e-42c7-9a53-ab56c98420f9 \ 2.153. 9 \ Модули \ DTAExecutionHost.exe '. Это может означать, что дочерний процесс унаследовал потоки STDIO и еще не завершился. 2020-05-07T16: 08: 50.9254238Z ## [ошибка] Истекло время ожидания задачи.

Обычно это происходит при повторном запуске теста , я вижу это может быть раз в 100 тестовых запусков. Это серьезная проблема, потому что она заблокирует тестовый агент на максимальное время, на которое установлен тайм-аут (в моем случае 30 минут). Ряд других сообщений указывают на , что это может произойти, если вы не закрываете должным образом свой драйвер селена, однако я считаю, что это так, и в моем случае 99/100 раз он отлично работает , это код, который я использую для закрытия моего драйвера селена:

[AssemblyCleanup]
public static void Cleanup()
{
    try
    {
        driver.Close();
        driver.Quit();
    }
    catch (Exception e)
    {
        Debug.WriteLine(e.Message);
    }
}

Они действительно не выделяют полезных предложений плавающих вокруг. Я думаю, что эта проблема связана с нагрузкой на сервер тестового агента (или тестовый сервер). Когда я запускаю меньшую версию CI (каждую ночь), я никогда не вижу этой проблемы.

Кто-нибудь раньше сталкивался с этой проблемой при высокой нагрузке? Интересно, откуда взялись эти «10 секунд» и можно ли это как-то отрегулировать? Есть ли проблема с кодом, который я использую для закрытия драйвера, есть ли лучший способ закрытия, который гарантирует, что даже когда он заблокирован, я все еще могу его убить, может быть, что-то я мог бы добавить в свой оператор catch?

...