6

BrowserStack是一个强大的平台,用于针对最新和现代的浏览器测试网站。到目前为止,一切都很好。

BrowserStack 也提供了一个 API

该 API 具有一个工作人员的概念,该工作人员表示加载特定 URL 的特定浏览器(版本)。

我可以用这样的工作实例做些什么有用的事情?

如何将这样的工作人员与 Selenium 测试集成在一起?

如何将这样的工作人员与单元测试(Python)集成?

一个人将如何使用这样的工作者,例如测试一个带有视频播放器的特定网站是否真的会加载和播放视频(例如,用于跨浏览器视频测试)?

4

2 回答 2

5

当前 API 在所有平台/浏览器组合中打开您提供的 url。

所以,如果你打开一个包含大量 JS 测试的 HTML 页面,你需要使用像 Yeti/testswarm/js-test-driver 这样的工具,它会自动从浏览器中获取结果。

另一个使用 BrowserStack API 的例子是http://ryanseddon.github.com/bunyip/

与 Jenkins 的示例集成:http: //github.com/jquery/testswarm/wiki/Automated-Distributed-Continuous-Integration-for-JavaScript

对于本地 JS 测试,您将需要使用localtunnel 之类的工具来获取本地服务器的公共 url。

于 2012-09-13T07:50:02.503 回答
0

当前 BrowserStack API 最有用的功能之一是允许您将会话标记为失败的测试

像任何 Selenium 集线器/节点系统一样,BrowserStack 不知道您为什么要向浏览器发送命令。它只是运行您请求的命令。因此,它无法知道测试何时失败。

但是您可以使用 API 告诉它测试失败,以便会话在 BrowserStack UI 中被标记为失败。然后,您可以仅过滤失败的会话以进行调查。

这是在 Java 中,而不是在 Python 中,但这里有一些示例代码,展示了如何更新会话以反映它们代表失败的测试。您只需传入 Selenium 会话 ID(在运行相关测试时需要保存)以及测试失败时出现的异常。

import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import com.unblu.automation.support.settings.Prop;
import com.unblu.automation.support.settings.Settings;

import org.openqa.selenium.remote.SessionId;

public class BrowserStackUpdater {

    private void markSessionAsFailed(SessionId sessionId, Throwable e) {
        var url = "https://api.browserstack.com/automate/sessions/" + sessionId + ".json";
        try {
            var userName = "BROWSERSTACKUSERNAMEHERE";
            var key = "BROWSERSTACKKEYHERE";
            var result = Unirest.put(url)
                .basicAuth(userName, key)
                .field("status", "failed")
                .field("reason", e.toString())
                .asString();
            System.out.println("Marking test failed; reply from BrowserStack: " +
              result.getStatus() + " : " + result.getBody());
        }
        catch (UnirestException ue) { ue.printStackTrace(); }
    }

    public void markTestFailedInBrowserStack(Iterable<SessionId> sessionIds, Throwable e) {
        var env = Settings.getString(Prop.runEnvironment);
        if (env.equals("BrowserStack")) {
            for (var sid : sessionIds) {
                markSessionAsFailed(sid, e);
            }
        }
    }
}
于 2018-10-02T15:39:45.363 回答