【问题标题】:How to display/log which node ran Selenium test session?如何显示/记录哪个节点运行了 Selenium 测试会话?
【发布时间】:2013-05-22 19:59:58
【问题描述】:

我正在使用 Windows 机器的网格配置构建测试自动化框架。在不涉及太多不必要的细节的情况下,我在运行带有 Selenium2Library 的 Robot Framework 的服务器上运行测试,该服务器通过一个集线器运行测试会话,该集线器根据我选择的浏览器和操作系统选择一个节点。标准的东西,一切正常;但是有时测试挂起或发生无法解释的事情,我想 RDP 到运行测试的节点,看看是什么。

如果我可以在测试日志中或通过 Python 以编程方式嵌入集线器选择用于测试执行的 Webdriver 节点的机器名称或 IP,那就太好了。我知道这个 Python 代码会返回 Windows 的机器名称:

import socket
nodeName=socket.gethostname()

当然,当您在测试脚本中执行它时,它会返回运行脚本的服务器的名称,而不是运行测试会话的节点的名称。

有人知道我该怎么做吗? 谢谢。

【问题讨论】:

  • 一种真正简单/俗气的方法,就是将节点浏览器指向谷歌,然后在搜索框中输入“我的 ip 是什么”,然后捕获结果。
  • 我只是够俗气的。谢谢 TehTris!

标签: python selenium-webdriver robotframework


【解决方案1】:

您可以使用 API 从集线器获取节点的 URL。然后你只需要解析 URL 并提取主机部分。虽然 WebDriver 确实存储中心 URL,但它是在私有属性中存储的。我会尊重这一点,所以这个关键字需要你传入中心 URL:

import urllib2, json
from robot.libraries.BuiltIn import BuiltIn
from robot.api import logger
from urlparse import urlparse, urljoin


class Selenium2LibraryExt(object):    

    def get_node_hostname(self, hub_url):
        '''Returns the hostname/IP of the node associated with the current browser.

        `hub_url` should be the URL of the Grid hub.
        '''
        session_id = BuiltIn().get_library_instance('Selenium2Library')._current_browser().session_id
        fragment = '/grid/api/testsession?session=%s' % session_id
        query_url = urljoin(hub_url, fragment)
        req = urllib2.Request(url=query_url)
        resp = urllib2.urlopen(req).read()
        logger.debug('GET of %s returned:\n%s' % (query_url, resp))
        json_blob = json.loads(resp)
        if 'proxyId' in json_blob:
            proxy_id = json_blob['proxyId']
            logger.info('Selenium session is executing on %s' % proxy_id)
            parse_result = urlparse(proxy_id)
            return parse_result.hostname
        else:
            raise Exception('Failed to get hostname. Is Selenium running locally? hub response: %s' % resp)

在我使用的这个关键字的版本中,我从全局变量中检索 URL,而不是像上面那样使用参数。

hub_url = BuiltIn().replace_variables('${SELENIUM GRID URL}')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多