20

在使用 selenium 进行 GUI 测试时,我想使用 browsermob 来监视网络连接。我在这里、这里和这里找到了一些信息和文档绝对不清楚如何真正使用它。

在文档中它写道:

server = Server("path/to/browsermob-proxy")

但那条路是什么?在哪里可以找到它?

我也看到

java -jar browsermob.jar --port 9090

但根本没有解释这个 jar 文件是什么,如果它是 browsermob 安装的一部分,或者其他无关的东西。

如果有人可以提供有关如何使用 browsermob 以及我需要安装什么的完整且有效的示例,我将不胜感激...

4

4 回答 4

18

BrowserMob Proxy

BrowserMob Proxy是一个开源工具,用于以HAR 格式捕获Web 应用程序的性能数据。它还允许操纵浏览器行为和流量,例如模拟网络流量、重写 HTTP 请求和响应等,并操纵来自其 AJAX 应用程序的网络流量。简而言之,BrowserMob proxy帮助我们使用 Selenium WebDriver 自动化测试来捕获 Web 应用程序的客户端性能数据。

BrowserMob Proxy您可以从Python 文档本教程中找到更多详细信息。

在 Windows 上使用 Python 客户端演示 BrowserMob Proxy 2.0

  • 通过 CLI安装browsermob-proxy :

    C:\Users\your_user>pip install browsermob-proxy
    Collecting browsermob-proxy
      Downloading browsermob-proxy-0.8.0.tar.gz
    Collecting requests>=2.9.1 (from browsermob-proxy)
      Downloading requests-2.18.4-py2.py3-none-any.whl (88kB)
        100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 148kB/s
    Collecting idna<2.7,>=2.5 (from requests>=2.9.1->browsermob-proxy)
      Downloading idna-2.6-py2.py3-none-any.whl (56kB)
        100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 61kB 639kB/s
    Collecting urllib3<1.23,>=1.21.1 (from requests>=2.9.1->browsermob-proxy)
      Downloading urllib3-1.22-py2.py3-none-any.whl (132kB)
        100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 133kB 250kB/s
    Collecting certifi>=2017.4.17 (from requests>=2.9.1->browsermob-proxy)
      Downloading certifi-2017.11.5-py2.py3-none-any.whl (330kB)
        100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 337kB 401kB/s
    Collecting chardet<3.1.0,>=3.0.2 (from requests>=2.9.1->browsermob-proxy)
      Downloading chardet-3.0.4-py2.py3-none-any.whl (133kB)
        100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 296kB/s
    Installing collected packages: idna, urllib3, certifi, chardet, requests, browse
    rmob-proxy
      Running setup.py install for browsermob-proxy ... done
    Successfully installed browsermob-proxy-0.8.0 certifi-2017.11.5 chardet-3.0.4 id
    na-2.6 requests-2.18.4 urllib3-1.22
    
  • Downloadbrowsermob -proxy二进制文件browsermob-proxy-2.1.4-bin形成以下 url:

    https://bmp.lightbody.net/
    
  • ExtractSave里面的目录C:\Utility

  • LaunchBrowsermobproxy 服务器通过CLI 命令手动:

    C:\Utility\browsermob-proxy-2.1.4\lib>java -jar browsermob-dist-2.1.4.jar --port 9090
    Running BrowserMob Proxy using LittleProxy implementation. To revert to the legacy implementation, run the proxy with the command-line option '--use-littleproxy false'.
    [INFO  2018-01-17T19:01:30,276 net.lightbody.bmp.proxy.Main] (main) Starting BrowserMob Proxy version 2.1.4
    [INFO  2018-01-17T19:01:30,388 org.eclipse.jetty.util.log] (main) jetty-7.x.y-SNAPSHOT
    [INFO  2018-01-17T19:01:30,471 org.eclipse.jetty.util.log] (main) started o.e.j.s.ServletContextHandler{/,null}
    [INFO  2018-01-17T19:01:30,871 org.eclipse.jetty.util.log] (main) Started SelectChannelConnector@0.0.0.0:9090
    
  • 您还可以通过您的代码启动Browsermobproxy 服务器,如下所示。

  • 创建一个新PyDev模块(如果使用Eclipse)并通过您编写一个基本程序IDE,如下所示:

    from browsermobproxy import Server
    server = Server("C:\\Utility\\browsermob-proxy-2.1.4\\bin\\browsermob-proxy")
    server.start()
    proxy = server.create_proxy()
    
    from selenium import webdriver
    profile  = webdriver.FirefoxProfile()
    profile.set_proxy(proxy.selenium_proxy())
    driver = webdriver.Firefox(firefox_profile=profile)
    
    
    proxy.new_har("google")
    driver.get("http://www.google.co.in")
    proxy.har # returns a HAR JSON blob
    
    server.stop()
    driver.quit()
    
  • 快照:

浏览器mobproxy

  • Test作为Python 运行执行
  • 当您Program执行时,您将观察到Firefox Quantum Browser被初始化,并且url http://www.google.co.in打开并在测试结束时关闭。
  • 完成后,Test Execution您将在您的工作空间中找到以下文件,这些文件将为您提供所有详细信息Test Execution

    bmp.log
    geckodriver.log
    server.log
    
  • 快照: browsermobProxy_logs

于 2018-01-15T16:05:22.350 回答
13

浏览器暴民捕获 你可以试试下面的代码:

    from browsermobproxy import Server
    import psutil
    import time
    
    for proc in psutil.process_iter():
        # check whether the process name matches
        if proc.name() == "browsermob-proxy":
            proc.kill()
    
    dict = {'port': 8090}
    server = Server(path="./BrowserMobProxy/bin/browsermob-proxy", options=dict)
    server.start()
    time.sleep(1)
    proxy = server.create_proxy()
    time.sleep(1)
    from selenium import webdriver
    profile = webdriver.FirefoxProfile()
    selenium_proxy = proxy.selenium_proxy()
    profile.set_proxy(selenium_proxy)
    driver = webdriver.Firefox(firefox_profile=profile)
    
    
    proxy.new_har("google")
    driver.get("http://www.google.co.uk")
    print (proxy.har) # returns a HAR JSON blob
    
    server.stop()
    driver.quit()

有两件事,如果您的代码失败,有时该过程可能会保持打开状态。所以我添加了下面的代码来关闭重复的实例。

import psutil
import time

for proc in psutil.process_iter():
    # check whether the process name matches
    if proc.name() == "browsermob-proxy":
        proc.kill()

在创建代理之前和之后还要休眠 1 秒。

server.start()
time.sleep(1)
proxy = server.create_proxy()
time.sleep(1)

这有助于摆脱由于服务器需要一些时间启动而可能面临的一些间歇性问题。

于 2018-01-22T17:47:16.097 回答
4

您需要将驱动程序配置为使用 BMP 作为代理,以便它可以记录网络活动。这是一个例子......

from browsermobproxy import Server
from selenium import webdriver

server = Server('/path/to/bmp/bin/browsermob-proxy') #Local path to BMP
server.start()
proxy = server.create_proxy() #Proxy is used to generate a HAR file containing the connection URLS that the MP3s are loaded from.
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--proxy-server={0}".format(proxy.proxy)) #Configure chrome options
driver = webdriver.Chrome(chrome_options=chrome_options)
proxy.new_har('filename') 

然后所有活动都将记录到该文件中。

在我的例子中,二进制文件的路径是C:\Python27\Lib\site-packages\browsermobproxy\browsermob-proxy-2.1.0-beta-3\bin\browsermob-proxy在 Windows 上使用 Python 2.7

于 2018-01-11T07:44:51.453 回答
4

这个问题与以下事实有关,安装 browsermob-proxy 不仅仅是在做:

pip install browsermob-proxy

执行上述代码后,您需要转到https://bmp.lightbody.net,下载 zip,解压缩,然后在 python 脚本中调用 Server() 时,从您刚刚的 zip 中识别可执行文件的路径创建的。它位于“bin”文件夹中,称为 browsermob-proxy。

就我而言,它是:

server = Server("/anaconda3/lib/python3.7/site-packages/browsermobproxy/browsermob-proxy-2.1.4/bin/browsermob-proxy")
于 2019-05-04T21:48:25.870 回答