Selenium Grid - Как отключить узел после выполнения? - PullRequest
1 голос
/ 13 мая 2019

Я пытаюсь реализовать решение, которое отключало бы узел, работающий внутри контейнера Docker (Swarm) после пробного запуска.

Я смотрел на команду удаления docker, но не могу использовать Docker-контейнер Команда rm , так как контейнеры находятся на уровне задач службы

Я посмотрел на API / Lifecycle-Manager, но не могу получить доступ к узлу с клиента, стек Docker работает через сервер nginx и толькоодин порт (4444) становится доступным

Наконец, я посмотрел расширенный узел сетки (DefaultRemoteProxy).Извините за мой плохой Java-код, это мой первый удар по написанию Java-кода.С этим похоже, что я могу остановить узел, но он регистрируется в хабе

Как я могу остановить этот процесс перерегистрации или запустить узел без него

Моя цель состоит в том, чтобыновый контейнер для каждого теста, и пусть оркестровка докера вызывает новый контейнер, когда узел выключен и контейнер удален (docker api https://docs.docker.com/engine/api/v1.24/)

public class ExtendedProxy extends DefaultRemoteProxy implements TestSessionListener {

    public ExtendedProxy(RegistrationRequest request, GridRegistry registry) {
        super(request, registry);
    }

    @Override
    public void afterCommand(TestSession session, HttpServletRequest request, HttpServletResponse response) {
        RequestType type = SeleniumBasedRequest.createFromRequest(request, getRegistry()).extractRequestType();

        if(type == STOP_SESSION) {
            System.out.println("Going to Shutdown the Node");

           GridRegistry registry = getRegistry();
           registry.stop();
           registry.removeIfPresent(this);

        }
    }
}

Hub

[DefaultGridRegistry.assignRequestToProxy] - Shutting down registry.
[DefaultGridRegistry.removeIfPresent] - Cleaning up stale test sessions on the unregistered node
[DefaultGridRegistry.add] - Registered a node

Узел

[ActiveSessions$1.onStop] - Removing session de04928d-7056-4b39-8137-27e9a0413024 (org.openqa.selenium.firefox.GeckoDriverService)
[SelfRegisteringRemote.registerToHub] - Registering the node to the hub: http://localhost:4444/grid/register
[SelfRegisteringRemote.registerToHub] - The node is registered to the hub and ready to use

1 Ответ

0 голосов
/ 29 мая 2019

Я разобрался с решением.Я отвечаю на свой вопрос, надеясь, что это пойдет на пользу сообществу.

Запустите узел с флагом командной строки.Это останавливает создание потока автоматической регистрации.

registerCycle - 0

И в вашем классе, который расширяет DefaultRemoteProxy, переопределите afterSession

@Override
public void afterSession(TestSession session) {
    totalSessionsCompleted++;

    GridRegistry gridRegistry = getRegistry();
    for(TestSlot slot : getTestSlots()) {
        gridRegistry.forceRelease(slot, SessionTerminationReason.PROXY_REREGISTRATION);
    }
    teardown();
    gridRegistry.removeIfPresent(this);
}

Когда клиент выполнил driver.quit ()метод, узел отменяет регистрацию в хабе.

...