gpt4 book ai didi

docker - Selenium Grid-如何在执行后关闭节点?

转载 作者:行者123 更新时间:2023-12-02 18:36:06 27 4
gpt4 key购买 nike

我正在尝试实现一种解决方案,该解决方案将在测试运行后关闭在Docker(Swarm)容器内运行的节点。

我查看了docker remove命令,但由于容器处于服务任务级别,因此无法使用 docker container rm 命令

我查看了/ lifecycle-manager api,但无法从客户端访问节点,docker堆栈通过nginx服务器运行,只有一个端口(4444)暴露

最后我看了看扩展网格节点(DefaultRemoteProxy)。对不起,我的Java代码不好,这是我编写Java代码的第一步。这样,看来我可以停止该节点,但它已注册到集线器

我如何停止此重新注册过程或在没有它的情况下启动节点

我的目标是为每个测试创建一个新容器,并在节点关闭并删除容器时让docker业务流程调出新容器(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);

}
}
}

集线器
[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

最佳答案

我想出了解决方案。我在回答自己的问题,希望对社区有益。

使用命令行标志启动节点。这将阻止创建自动注册线程。

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()方法时,节点将向集线器注销。

关于docker - Selenium Grid-如何在执行后关闭节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56117033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com