Join Testing Is Documenting
Discord Server to ask questions and discuss features/bugs
Web Test Automation User Guide
WebTau (Web Test automation) - concise and expressive way to write end-to-end and unit tests.
Test your application across multiple layers:
- REST API (including Data Coverage)
- GraphQL API
- Web UI
- CLI
- Database
- Business Logic (JVM only)
actual(account).should(equal(map(
"id", "ac1",
"name", "My Second Account",
"address", map("zipCode", "7777777"))));
List<Account> accounts = fetchAccounts();
TableData expected = table("*id", "name", "address",
________________________________________,
"ac2", "Works", map("zipCode", "zip2"),
"ac1", "Home", map("zipCode", "zip1"),
"ac3", "My Account", map("zipCode", "zip8"));
public class WeatherJavaTest {
@Test
public void checkWeather() {
http.get("/weather", (header, body) -> {
body.get("temperature").shouldBe(lessThan(100));
});
}
}
WebTau prints a lot of useful information with a zero effort from your side. So you can investigate tests faster.
scenario("check weather") {
http.get("/weather") {
temperature.shouldBe < 100
}
}
Use Persona
to streamline Authorization testing
public class PersonaHttpJavaTest {
@Test
public void checkBalance() {
Alice.execute(() -> http.get("/statement", (header, body) -> {
body.get("balance").shouldBe(greaterThan(100));
}));
Bob.execute(() -> http.get("/statement", (header, body) -> {
body.get("balance").shouldBe(lessThan(50));
}));
}
}
scenario("my bank balance") {
Alice {
http.get("/statement") {
balance.shouldBe > 100
}
}
Bob {
http.get("/statement") {
balance.shouldBe < 50
}
}
}
Use one layer to re-enforce tests on another. E.g. REST API layer to set up data for Web UI test, or database layer to validate GraphQL API.
Use REPL to tighten test feedback loop and speed up test writing
webtau:000> $("ul li a")
element is found: by css ul li a
getText(): Guide
getUnderlyingValue(): Guide
count: 3
Capture test artifacts like API Responses, screenshots, command line output to automate your user facing documentation.
Leverage out of the box rich reporting:
Tests can be written in any JVM language. Language specific syntactic sugar is available for Groovy
.
@WebTau
public class WebSearchTest {
@Test
public void searchByQuery() {
search.submit("search this");
search.numberOfResults.waitToBe(greaterThan(1));
}
}
public class SearchPage {
private final PageElement box = $("#search-box");
private final PageElement results = $("#results .result");
public final ElementValue<Integer> numberOfResults = results.getCount();
public void submit(String query) {
browser.open("/search");
box.setValue(query);
box.sendKeys(browser.keys.enter);
}
}
@WebTau
public class GraphQLWeatherJavaIT {
@Test
public void checkWeather() {
String query = "{ weather { temperature } }";
graphql.execute(query, (header, body) -> {
body.get("data.weather.temperature").shouldBe(lessThan(100));
});
}
}
def PRICES = db.table("PRICES")
PRICES << [ "id" | "description" | "available" | "type" | "price" ] {
_____________________________________________________________________________________________
cell.guid | "nice set" | true | "card" | 1000
cell.guid | "nice set" | true | "card" | cell.above + 10
cell.guid | "another set" | permute(true, false) | permute("rts", "fps") | cell.above + 20 }
cli.run('echo hello world') {
output.should contain('hello')
output.should contain('world')
}