Example ------- Simple scenario scenario 'Buy many books' do step { action: "Log with default account" } step { result: "Check that user is logged" } step { action: "Select the book 'Harry Potter and the order of the phoenix'" } step { action: "Select the book 'Harry Potter and the goblet of fire'" } step { result: "Check that basket contains 2 books" } step { action: "Pay" } step { result: "Check basket is paid" } end This scenario can be refactored with the introduction of action word named 'choose book' actionword 'Select book' (title) do step { action: "Select the book ${title}" } end So now, the scenario can call the action word scenario 'Buy many books' do step { action: "Log with default account" } step { result: "Check that user is logged" } call 'Select book'(title = 'Harry Potter and the order of the phoenix') call 'Select book'(title = 'Harry Potter and the goblet of fire') step { result: "Check that basket contains 2 books" } step { action: "Pay" } step { result: "Check that basket is paid" } end We want to add a new scenario about basket canceling. So we create a new action word named 'login' actionword 'Login' do step { action: "Log with default account" } step { result: "Check that user is logged" } end And an action word to check the number of books in the basket actionword 'Check book count' (count) do step { result: "Check that basket contains ${count} books" } end The new scenario can use these action words scenario 'A selection can be canceled' do call 'Login' call 'Select book'(title = 'Harry Potter and the order of the phoenix') call 'Check book count'(count = 1) step { action: "Cancel basket" } call 'Check book count'(count = 0) end And the scenario 'Buy many books' can now use the new action words scenario 'Buy many books' do call 'Login' call 'Select book'(title = 'Harry Potter and the order of the phoenix') call 'Select book'(title = 'Harry Potter and the goblet of fire') call 'Check book count'(count = 2) step { action: "Pay" } step { result: "Check that basket is paid" } end Test elements syntax -------------------- ### Scenario syntax scenario 'scenario name' do STATEMENT 1 ... STATEMENT 2 end with parameters scenario 'scenario name' (x) do STATEMENT 1 ... STATEMENT 2 end A scenario can be tagged @key1 @key2 scenario 'scenario name' do ... end A tag can have a value @key: value scenario 'scenario name' do ... end ### Action word syntax actionword 'action word name' do STATEMENT 1 ... STATEMENT 2 end With parameters actionword 'action word name' (x) do ... end A Parameter can have default value actionword 'action word name' (x = 0) do ... end An action word can be tagged @key1 @key2 actionword 'action word name' do ... end A tag can have a value @key: value actionword 'action word name' do ... end Statement syntax ---------------- ### Call action word call 'action word name' With parameters call 'a actionword'(x = 3, y = '4', z = parameter) ### Create a free step A free step can contain a test action step { action: "act" } or an expected result step { result: "check" } ### Assignment i := 5 ### If statement Simple if if EXPRESSION STATEMENTS end If with else if EXPRESSION STATEMENTS else STATEMENTS end Comments syntax --------------- # this is a comment Expression syntax -------------------- ### Identifier a abc $id _id ### Numeric operators 4 + 6 a - b a * b a % b a / b ### Comparison operators a == b a > b a >= 5 a <= 5 a in R ### Logical operators a or b a and b not a ### Array [] [a, b, c] ### Dictionary {} {a: 42, b: "Hello ${name}"} ### Access expression i[4] i[key] i.key i.x.y ### template "static template" "a ${variable} template" Literal syntax -------------- ### String value 'my string' ### Boolean value true false ### Integer value 42 -42 ### Float value 42.0 4.2 ### Null value null ### Binary value 0b101010 OB101010 ### Hexadecimal value 0x2A 0X2A ### Scientific notation 4E+42 4e-42