damienmg / rules_web

Rules for testing web front-end.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Bazel Web Testing Rules

Bazel rules and supporting code to allow testing against a browser with WebDriver.

Configure your Bazel project

Add the following to your WORKSPACE file:

git_repository(
    name = "io_bazel_rules_go",
    remote = "https://github.com/bazelbuild/rules_go.git",
    tag = "0.1.0",
)

load("@io_bazel_rules_go//go:def.bzl", "go_repositories")

go_repositories()

git_repository(
    name = "io_bazel_rules_web",
    remote = "https://github.com/bazelbuild/rules_web.git",
    tag = "0.0.1",
)

load("@io_bazel_rules_web//web:repositories.bzl", "web_test_repositories")

web_test_repositories(
    # specify test languages your project is using.
    go = True,
    java = True,
)

This will configure the following repositories required to get web_test_suite working:

Write your tests

Write your test in the language of your choice, but use our provided Browser API to get an instance of WebDriver.

Example Test (Java):

import com.google.testing.web.Browser;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.openqa.selenium.WebDriver;

@RunWith(JUnit4.class)
public class BrowserTest {
  private WebDriver driver;

  @Before public void createDriver() {
    driver = new Browser().newSession();
  }

  @After public void quitDriver() {
    try {
      driver.quit();
     } finally {
      driver = null;
     }
   }

  // your tests here
}

Example Test (Go):

import (
    "testing"

    "github.com/tebeka/selenium/selenium"
    "github.com/bazelbuild/rules_web/go/browser"
)

func TestWebApp(t *testing.T) {
    wd, err := NewSession(selenium.Capabilities{})
    if err != nil {
        t.Fatal(err)
    }

    // your test here

    if err := wd.Quit(); err != nil {
        t.Logf("Error quitting webdriver: %v", err)
    }
}

In your BUILD files, create your test target as normal, but tag it "manual". Then create a web_test_suite that depends on your test target:

load("@io_bazel_rules_go//go:def.bzl", "go_test")
load("@io_bazel_rules_web//web:web.bzl", "web_test_suite")

go_test(
    name = "browser_test_wrapped",
    srcs = ["browser_test.go"],
    tags = ["manual"],
    deps = [
        "@com_github_tebeka_selenium//:selenium",
        "@io_bazel_rules_web//go:browser",
    ],
)

web_test_suite(
    name = "browser_test",
    browsers = [
        "@io_bazel_rules_web//browsers:chrome-native",
    ],
    local = 1,
    test = ":browser_test_wrapped",
)

About

Rules for testing web front-end.

License:Apache License 2.0


Languages

Language:Go 56.0%Language:Python 39.1%Language:Java 3.0%Language:Shell 1.9%