Tutorial 1: Scripting¶
This section will show you how to write simple test script.
Yoda implements own test script format based on YAML (used also for configuration). The format uses hierarchical structure.
- Test set: test script file, 1st level
- Test scenario: 2nd level, test set can have multiple scenario
- Test case: 3rd level, test scenario can have multiple cases
- Test condition: 4th level, test case can have multiple conditions
Scenarios, cases and condition elements have special tags which provide metadata (id, name, description etc.). Condition elements also contain embedded Python code to be executed.
Let’s create simple test script test.jedi with 1 scenario, 1 case and 2 conditions (positive and negative). Yoda defines own file extensions yoda, jedi. Other extensions are not recognized by execution engine.
Test-Scenario-1: id: ts-01 path: filepath within test repository name: Example test scenario desc: Contains sample test case author: Test User <email@example.com> version: 1.0 Test-Case-1: id: tc-01 name: Example test case desc: Contains sample test condition Test-Condition-1: id: tco-01 name: Example test condition 1 desc: This conditions should pass test: | x = 8 y = 5 this.test_result = x - y validate: | assert (this.test_result == 3), "x-y != 3" Test-Condition-2: id: tco-02 name: Example test condition 2 desc: This conditions should fail test: | x = 8 y = 5 this.test_result = x - y validate: | assert (this.test_result == 2), "x-y != 2"
Scenario, case and conditions element titles contains numbering. Be careful with it, the execution engine expects increasing sequences starting from 1 with no duplicates and gaps. Tags id, name are mandatory, other metadata tags are optional but help to understand purpose of test.
Conditions have mandatory elements test and validate with embedded Python code. Test contains code which tests something. Validate checks the result (whether the condition passed or failed) using assertion. Notice the usage of | character which instructs Yaml parser to consider the content as executable code.
Following example shows minimum test script structure with multiple elements on each level. Each element id must be unique within its level.
Test-Scenario-1: id: ts-01 name: scenario 1 Test-Case-1: id: tc-01 name: case 1 Test-Condition-1: id: tco-01 name: condition 1 test: | validate: | Test-Condition-2 id: tco-02 name: condition 2 test: | validate: | Test-Case-2: id: tc-02 name: case 2 Test-Condition-1: id: tco-01 name: condition 1 test: | validate: | Test-Scenario-2: id: ts-02 name: scenario 2 Test-Case-1: id: tc-01 name: case 1 Test-Condition-1: id: tco-01 name: condition 1 test: | validate: |