Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

CromeDriver не убивается как процесс


(kerrigan) #1

Такая проблема:

Если тест падает сам либо проходит полностью то хромдрайвер убивается нормально и в процессах не висит.

Если же руками стопаю тест - то хромдрайвер висит в процессах и его приходится убивать вручную

Это конечно не критикал проблема - но возникла такая ситуация что на билд агентах при запуске remote run'ом скопились очень много висящих процессов.

Как это можно обойти и сталкивался ли с этим кто-нибудь?

Спасибо!

 


(Mykhailo Poliarush) #2

ну понятно что он будет висеть, так как вы убили процесс, который отвечает за его открыие и закрытие

ну тут надо думать, я бы сделал внешнюю программу, которая убивает chrome процессы

или же стартовал chromedriverserver до выполенния тестов и закрывал после выполнения, а само выполнение запускал бы как отдельный процесс

а как вы запускаете chromedriver server на CI?


(rpwheeler) #3

Сталкивался.  

Я так понимаю, что речь идет о Windows. Что скажу: проводил эксперименты (Windows 7 / 64), и, насколько я помню, то убить ненужные процессы (и даже по маске) получалось с помощью бесплатного командного процессора NirCmd от NirSoft . Из альтернатив ему припоминаю тоже бесплатный Comandiux. 

Гарантий не даю (я остановился на экспериментах), но можете попробовать.


(vmaximv) #4

а чем "родные" taskkill/pstools не устраивали?


(qaleader) #5

На каком языке вы автоматизируете? В C# можно убить процесс сразу из теста без использования каких-то вспомогательных и не нужных действий.


(rpwheeler) #6

Так оно в жизни получилось, что NirCmd дошел до меня раньше, чем информация о taskkill , "ну и вот так и живем".


(Андрей Труш) #7

А можно более конкретно, как это сделать!


(Mykhailo Poliarush) #8

Я скажу за python, тут или можно использовать os модуль

import os
os.system("taskkill /im chromedriver.exe")

или сторонний, например psutil https://code.google.com/p/psutil/

import psutil

PROCNAME = "chromedriver.exe"

for proc in psutil.process_iter():
    if proc.name == PROCNAME:
        proc.kill()

(Александр) #9

А если срабатывает Exception, разве не срабатывает после него tearDown() в котором можно сделать например driver.quit()?


(Mykhailo Poliarush) #10

Ну тут смотря как завершается процесс прогона тестов. Просто если java процесс убивают напрямую руками, то никакие методы не вызовутся.

@kerrigan Конечно я бы уточнил, как именно руками стопается тест? Я так понимаю, вы просто не дожидаетесь завершения выполнения тестов на CI останавливаете прогон тестов. Верно?