如何将 browsermob 与 python-selenium 一起使用?
How to use browsermob with python-selenium?
我想在使用 selenium 进行 GUI 测试时使用 browsermob 来监视网络连接。我找到了一些资料和文档 and here and here,但完全不清楚如何真正使用它。
文档中写着:
server = Server("path/to/browsermob-proxy")
但是那条路是什么?在哪里可以找到它?
我也看到了
java -jar browsermob.jar --port 9090
但没有解释这个 jar 文件是什么,如果它是 browsermob 安装的一部分,或者不相关的东西。
如果有人可以提供有关如何使用 browsermob 以及我需要安装的所有内容的完整且有效的示例,我将不胜感激...
您需要将驱动程序配置为使用 BMP 作为代理,以便它可以记录网络 activity。这是一个例子....
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')
然后所有activity将被记录到那个文件。
在我的例子中,二进制文件的路径是 C:\Python27\Lib\site-packages\browsermobproxy\browsermob-proxy-2.1.0-beta-3\bin\browsermob-proxy
on Windows with Python 2.7
BrowserMob Proxy
BrowserMob Proxy
是一个开源工具,用于捕获 HAR 格式的 Web 应用程序的性能数据 .它还允许操纵浏览器行为和流量,例如模拟网络流量、重写 HTTP 请求和响应等,以及操纵来自 AJAX 应用程序的网络流量。简而言之,BrowserMob proxy
帮助我们使用 Selenium WebDriver 自动化测试捕获 Web 应用程序的客户端性能数据。
您可以从 Python Documentation and this tutorial.
中找到有关 BrowserMob Proxy
的更多详细信息
在 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
Download
browsermob-proxy 二进制文件 browsermob-proxy-2.1.4-bin 形式以下 url :
https://bmp.lightbody.net/
Extract
和 Save
C:\Utility
中的目录
Launch
Browsermobproxy 服务器 手动通过 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()
快照:
- 将您的
Test
作为 Python 运行 执行
- 当您的
Program
执行时,您会观察到 Firefox Quantum Browser 被初始化并且 url
http://www.google.co.in 打开并在测试结束时关闭。
完成 Test Execution
后,您将在您的作品 space 中找到以下文件,这些文件将为您提供 Test Execution
的所有详细信息:
bmp.log
geckodriver.log
server.log
快照:
您可以试试下面的代码:
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)
这有助于消除由于服务器需要一些时间启动而可能面临的一些间歇性问题。
这个问题与事实有关,即安装 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")
我想在使用 selenium 进行 GUI 测试时使用 browsermob 来监视网络连接。我找到了一些资料和文档
文档中写着:
server = Server("path/to/browsermob-proxy")
但是那条路是什么?在哪里可以找到它?
我也看到了
java -jar browsermob.jar --port 9090
但没有解释这个 jar 文件是什么,如果它是 browsermob 安装的一部分,或者不相关的东西。
如果有人可以提供有关如何使用 browsermob 以及我需要安装的所有内容的完整且有效的示例,我将不胜感激...
您需要将驱动程序配置为使用 BMP 作为代理,以便它可以记录网络 activity。这是一个例子....
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')
然后所有activity将被记录到那个文件。
在我的例子中,二进制文件的路径是 C:\Python27\Lib\site-packages\browsermobproxy\browsermob-proxy-2.1.0-beta-3\bin\browsermob-proxy
on Windows with Python 2.7
BrowserMob Proxy
BrowserMob Proxy
是一个开源工具,用于捕获 HAR 格式的 Web 应用程序的性能数据 .它还允许操纵浏览器行为和流量,例如模拟网络流量、重写 HTTP 请求和响应等,以及操纵来自 AJAX 应用程序的网络流量。简而言之,BrowserMob proxy
帮助我们使用 Selenium WebDriver 自动化测试捕获 Web 应用程序的客户端性能数据。
您可以从 Python Documentation and this tutorial.
中找到有关BrowserMob Proxy
的更多详细信息
在 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
Download
browsermob-proxy 二进制文件 browsermob-proxy-2.1.4-bin 形式以下 url :https://bmp.lightbody.net/
Extract
和Save
C:\Utility
中的目录
Launch
Browsermobproxy 服务器 手动通过 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()
快照:
- 将您的
Test
作为 Python 运行 执行
- 当您的
Program
执行时,您会观察到 Firefox Quantum Browser 被初始化并且url
http://www.google.co.in 打开并在测试结束时关闭。 完成
Test Execution
后,您将在您的作品 space 中找到以下文件,这些文件将为您提供Test Execution
的所有详细信息:bmp.log geckodriver.log server.log
快照:
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)
这有助于消除由于服务器需要一些时间启动而可能面临的一些间歇性问题。
这个问题与事实有关,即安装 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")