当前位置: 首页 > 知识库问答 >
问题:

用于基于云的测试的独立与嵌入式Browsermob代理(Sauce Labs/Browserack)

闻安宜
2023-03-14

我使用嵌入式Browsermob代理服务器进行了本地工作测试。没有什么新内容,但这里仍然是示例代码。

    _server = new BrowserMobProxyServer()
    _server.start();
    Proxy proxy = ClientUtil.createSeleniumProxy(_server);
    ChromeOptions options = new ChromeOptions();
    options.setCapability("proxy", proxy);
    _driver = new ChromeDriver(options);

现在,我们正在研究将此类测试集成到CI管道中并在云中执行这些测试的选项(Browserstack/Sauce实验室)。我正在试图弄清楚在这种情况下的设置是什么样子的。目前我的理解是,代码(设置代理并实际包含测试)将在我们的服务器上运行。这意味着嵌入式代理也将在我们的服务器上运行,而服务器不一定可以从外部访问。因此,问题是:

  1. 我是否必须切换到独立的browsermob代理并使其可访问

共有1个答案

蒋英博
2023-03-14

在您的情况下,如果测试/webdriver实例将在远程计算机(browserstack或sauce)上运行,则必须在远程计算机上对代理服务器生成的代理进行身份验证,以拦截流量。我有一个类似的需求,我使用一个独立的BrowserMob实例进行了设置。下面是browserstack及其本地测试二进制文件的工作示例代码:

这将需要以下依赖项:

<dependency>
    <groupId>com.browserstack</groupId>
    <artifactId>browserstack-local-java</artifactId>
    <version>1.0.0</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>net.lightbody.bmp</groupId>
    <artifactId>browsermob-core</artifactId>
    <version>2.1.5</version>
    <scope>test</scope>
</dependency> 

代码段:

import com.browserstack.local.Local;
import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import net.lightbody.bmp.core.har.Har;
import net.lightbody.bmp.proxy.CaptureType;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;

import java.io.File;
import java.net.URL;
import java.util.HashMap;

public class InterceptProxy {
    public static final String USERNAME = <BrowserStack Username>;
    public static final String AUTOMATE_KEY = <BrowserStack Key>;
    public static final String URL = "https://" + USERNAME + ":" + AUTOMATE_KEY + "@hub-cloud.browserstack.com/wd/hub";

    public static void main(String[] args) throws Exception {
        BrowserMobProxy proxy = new BrowserMobProxyServer();
        proxy.start(0);
        Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
        Local browserStackLocal = new Local();
        HashMap<String, String> browserStackLocalArgs = new HashMap<String, String>();
        browserStackLocalArgs.put("key", AUTOMATE_KEY);
        browserStackLocalArgs.put("forcelocal", "true");
        browserStackLocalArgs.put("forceproxy","true");
        browserStackLocalArgs.put("force","true");
        browserStackLocalArgs.put("v", "true");
        String host=seleniumProxy.getHttpProxy().substring(0,seleniumProxy.getHttpProxy().indexOf(":"));
        String port=seleniumProxy.getHttpProxy().substring(seleniumProxy.getHttpProxy().indexOf(":")+1,seleniumProxy.getHttpProxy().length());
        browserStackLocalArgs.put("-local-proxy-host", host);
        browserStackLocalArgs.put("-local-proxy-port", port);
        browserStackLocal.start(browserStackLocalArgs);

        DesiredCapabilities caps = new DesiredCapabilities();
        caps.setCapability("browser", "Chrome");
        caps.setCapability("browser_version", "62.0");
        caps.setCapability("os", "Windows");
        //caps.setCapability(CapabilityType.PROXY, seleniumProxy);
        caps.setCapability("os_version", "10");
        caps.setCapability("browserstack.local",true);

        WebDriver driver = new RemoteWebDriver(new URL(URL), caps);
        driver.manage().deleteAllCookies();
        driver.manage().window().maximize();
        proxy.enableHarCaptureTypes(CaptureType.REQUEST_CONTENT, CaptureType.RESPONSE_CONTENT);

        // create a new HAR with the label "yahoo.com"
        proxy.newHar("yahoo.com");

        // open yahoo.com
        driver.get("http://yahoo.com");

        // get the HAR data
        Har har = proxy.getHar();

        //Writing Har to file
        har.writeTo(new File("/Users/MyUser/Desktop/HAR.txt"));
        driver.quit();
        browserStackLocal.stop();
        proxy.stop();
    }
}
 类似资料:
  • 问题内容: 我想测试嵌入式设备的功能。为简化起见,我可以说这是一个人形机器人,由PC通过C / C ++ API进行远程控制。 我非常有兴趣使用它,因为它没有样板方法。但是,我的情况要复杂一些。实际测试在C#程序上运行,大约需要24小时才能完成。通过切换到Python,我可能会节省大量开发新测试的时间。但是,在这样做之前,我正在寻找一些答案。 古老的测试套件的第一个问题是,所有测试都以预定的顺序执

  • 我正在为Mule ESB应用程序编写集成测试,该应用程序通过HTTPS连接到外部API。我想模拟外部API并在Maven构建期间运行端到端联调。我的问题是关于设置嵌入式HTTPS服务器。我尝试过使用泽西,但它只提供HTTP。我正在看这个例子 https://github.com/jersey/jersey/tree/master/examples/https-clientserver-grizzl

  • 独立于window的按钮,类似于屏幕 Assistive Touch 键(小圆点)。效果就是,无论如何切换视图,或者弹出键盘,这个按钮都始终位于屏幕最前面,也就是说,这是一个地球人无法遮挡的按钮:)具体请看视频。 作者说:目前网上类似的按钮工具条有很多,但是能够独立于window并且随意拖动的好像没有。写这个工具的目的在于方便通过始终在屏幕上的按钮对全局的控制。 [Code4App.com]

  • 我在机器上本地Redis服务器的帮助下,使用Spring Boot运行集成测试用例。 但我想要一个嵌入式Redis服务器,它不依赖于任何服务器,可以在任何环境下运行,比如H2内存数据库。我该怎么做?

  • 概况 背景 当我们在写一些UI测试的时候,我们总需要到浏览器去看一下一些DOM的变化。比如,我们点击了某个下拉菜单,会有另外一个联动的下拉菜单发生了变化。而如果这个事件更复杂的时候,有时我们可能就很难观察出来他们之间的变化。 ShowCase Luffa Screenshot 源码见:https://github.com/phodal/luffa 基本原理 尽管这里的例子是以Jasmine作为例子

  • 我开始在Selenium上写一些测试,并认为如果我能在登录我们的网站时获得性能指标,那就太好了。我遇到了BrowserMob-Proxy。我开始从Lightbody的github页面复制前五行,我已经得到了错误消息:“ProxyServer无法解析为类型”和“代理无法解析为类型”。 谁能告诉我这里还缺什么吗? 这是pom。xml: 在这个类中,我试图让方法“开始”和“结束”(“开始”还没有完成,我