teuton 2.1.1 → 2.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +12 -21
- data/docs/Challenge-Server-Project.md +50 -0
- data/docs/changelog/servidor-de-retos.md +53 -0
- data/docs/changelog/todo.md +46 -0
- data/docs/changelog/v2.0.md +17 -0
- data/docs/changelog/v2.1.md +139 -0
- data/docs/commands/commands.md +10 -0
- data/docs/commands/create_skeleton.md +31 -0
- data/docs/commands/help.md +13 -0
- data/docs/commands/revise_test.md +46 -0
- data/docs/commands/run_test_unit.md +78 -0
- data/docs/commands/show_version.md +9 -0
- data/docs/developers/01-telnet.md +121 -0
- data/docs/developers/02-ssh.md +93 -0
- data/docs/developers/03-encoding.md +153 -0
- data/docs/developers/comparative.md +17 -0
- data/docs/dsl/_Sidebar.md +30 -0
- data/docs/dsl/definition/expect.md +56 -0
- data/docs/dsl/definition/goto.md +112 -0
- data/docs/dsl/definition/group.md +16 -0
- data/docs/dsl/definition/result.md +76 -0
- data/docs/dsl/definition/run.md +23 -0
- data/docs/dsl/definition/target.md +35 -0
- data/docs/dsl/execution/export.md +39 -0
- data/docs/dsl/execution/play.md +16 -0
- data/docs/dsl/execution/send.md +54 -0
- data/docs/dsl/execution/show.md +21 -0
- data/docs/dsl/keywords.md +53 -0
- data/docs/dsl/setting/get.md +36 -0
- data/docs/dsl/setting/set.md +18 -0
- data/docs/install/install.md +32 -0
- data/docs/install/manual_install.md +25 -0
- data/docs/install/modes_of_use.md +38 -0
- data/docs/install/scripts_install.md +76 -0
- data/docs/install/tested_od.md +25 -0
- data/docs/install/vagrant_install.md +15 -0
- data/docs/learn/example-01-target.md +117 -0
- data/docs/learn/example-02-configfile.md +168 -0
- data/docs/learn/example-03-remote-hosts.md +90 -0
- data/docs/learn/example-04-use.md +74 -0
- data/docs/learn/example-05-debug.md +104 -0
- data/docs/learn/example-11-first-test.md +96 -0
- data/docs/learn/learning.md +34 -0
- data/docs/learn/quick-demo.md +168 -0
- data/docs/learn/videos.md +13 -0
- data/lib/teuton/application.rb +1 -1
- data/lib/teuton/command/readme.rb +3 -0
- data/lib/teuton/command/test.rb +3 -0
- data/lib/teuton/command.rb +2 -2
- metadata +91 -5
- data/docs/logo.png +0 -0
@@ -0,0 +1,168 @@
|
|
1
|
+
|
2
|
+
Learn how to use config file into your tests.
|
3
|
+
Tests can use params defined into config files. It's good idea save variable data separated into external config file.
|
4
|
+
|
5
|
+
> This example is on GitHub repository `teuton-challenge` at `learn/learn-02-config`.
|
6
|
+
|
7
|
+
## Config file (`config.yaml`)
|
8
|
+
|
9
|
+
```yaml
|
10
|
+
---
|
11
|
+
:global:
|
12
|
+
:cases:
|
13
|
+
- :tt_members: Student-name-1
|
14
|
+
:username: david
|
15
|
+
- :tt_members: Student-name-2
|
16
|
+
:username: fran
|
17
|
+
```
|
18
|
+
|
19
|
+
## Definitions (`start.rb`)
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
group "learn 02 config" do
|
23
|
+
|
24
|
+
target "Create user " + get(:username)
|
25
|
+
run "id " + get(:username)
|
26
|
+
expect get(:username)
|
27
|
+
|
28
|
+
end
|
29
|
+
```
|
30
|
+
|
31
|
+
In this section we define targets using keywords: target, run, expect and get.
|
32
|
+
|
33
|
+
* **get** keyword is used to read param from configuracion file. It's posible personalize tests separated for every case.
|
34
|
+
|
35
|
+
> Localhost's OS must be GNU/Linux (any other compatible OS) because the command used is `id david`.
|
36
|
+
|
37
|
+
## Main execution block
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
play do
|
41
|
+
show
|
42
|
+
# export using other output formats
|
43
|
+
export :format => :colored_text
|
44
|
+
end
|
45
|
+
|
46
|
+
```
|
47
|
+
|
48
|
+
Runing this example and see `show` keyword output:
|
49
|
+
|
50
|
+
```bash
|
51
|
+
$ teuton learn/learn-02-config
|
52
|
+
[INFO] ScriptPath => learn/learn-02-config/start.rb
|
53
|
+
[INFO] ConfigPath => learn/learn-02-config/config.yaml
|
54
|
+
[INFO] TestName => learn-02-config
|
55
|
+
==================================
|
56
|
+
Executing [teuton] (version 2.0.1)
|
57
|
+
[INFO] Running in parallel (2019-06-20 11:20:49 +0100)
|
58
|
+
.id: «darth-maul»: no existe ese usuario
|
59
|
+
F
|
60
|
+
[INFO] Duration = 0.008375141 (2019-06-20 11:20:49 +0100)
|
61
|
+
|
62
|
+
|
63
|
+
==================================
|
64
|
+
INITIAL CONFIGURATIONS
|
65
|
+
+---------------+------------------------------------------------------------------------------+
|
66
|
+
| tt_title | Executing [teuton] (version 2.0.1) |
|
67
|
+
| tt_scriptname | learn/learn-02-config/start.rb |
|
68
|
+
| tt_configfile | learn/learn-02-config/config.yaml |
|
69
|
+
| tt_testname | learn-02-config |
|
70
|
+
| tt_sequence | false |
|
71
|
+
+---------------+------------------------------------------------------------------------------+
|
72
|
+
CASE RESULTS
|
73
|
+
+---------+-------------+----------------+
|
74
|
+
| Case ID | % Completed | Members |
|
75
|
+
| Case_01 | 100% | Student-name-1 |
|
76
|
+
| Case_02 | 0% ? | Student-name-2 |
|
77
|
+
+---------+-------------+----------------+
|
78
|
+
FINAL VALUES
|
79
|
+
+-------------+---------------------------+
|
80
|
+
| start_time | 2019-06-20 11:20:49 +0100 |
|
81
|
+
| finish_time | 2019-06-20 11:20:49 +0100 |
|
82
|
+
| duration | 0.008375141 |
|
83
|
+
+-------------+---------------------------+
|
84
|
+
HALL OF FAME
|
85
|
+
+-----+---+
|
86
|
+
| 100 | * |
|
87
|
+
| 0 | * |
|
88
|
+
+-----+---+
|
89
|
+
|
90
|
+
```
|
91
|
+
---
|
92
|
+
|
93
|
+
## Results
|
94
|
+
|
95
|
+
Output reports are saved into `var/learn-02-config/` directory.
|
96
|
+
|
97
|
+
```
|
98
|
+
var/learn-02-config
|
99
|
+
├── case-01.txt
|
100
|
+
├── case-02.txt
|
101
|
+
└── resume.txt
|
102
|
+
```
|
103
|
+
|
104
|
+
Let's see `export` keyword output.
|
105
|
+
|
106
|
+
```
|
107
|
+
$ more var/learn-02-config/case-01.txt
|
108
|
+
|
109
|
+
CONFIGURATIONS
|
110
|
+
+------------+----------------+
|
111
|
+
| tt_members | Student-name-1 |
|
112
|
+
| username | root |
|
113
|
+
| tt_skip | false |
|
114
|
+
+------------+----------------+
|
115
|
+
|
116
|
+
TEST
|
117
|
+
======================
|
118
|
+
GROUP: learn 02 config
|
119
|
+
01 (1.0/1.0)
|
120
|
+
Description : Checking user <root>
|
121
|
+
Command : id root
|
122
|
+
Duration : 0.003 (local)
|
123
|
+
Alterations : find(root) & count
|
124
|
+
Expected : Greater than 0 (String)
|
125
|
+
Result : 1 (Integer)
|
126
|
+
|
127
|
+
RESULTS
|
128
|
+
+--------------+---------------------------+
|
129
|
+
| case_id | 1 |
|
130
|
+
| start_time_ | 2019-06-20 12:29:41 +0100 |
|
131
|
+
| finish_time | 2019-06-20 12:29:42 +0100 |
|
132
|
+
| duration | 0.003650038 |
|
133
|
+
| unique_fault | 0 |
|
134
|
+
| max_weight | 1.0 |
|
135
|
+
| good_weight | 1.0 |
|
136
|
+
| fail_weight | 0.0 |
|
137
|
+
| fail_counter | 0 |
|
138
|
+
| grade | 100 |
|
139
|
+
+--------------+---------------------------+
|
140
|
+
```
|
141
|
+
|
142
|
+
---
|
143
|
+
|
144
|
+
## Using other config files
|
145
|
+
|
146
|
+
**Default names:**:
|
147
|
+
By default, when you run `teuton play foo`, this will search for:
|
148
|
+
* `foo/start.rb` test file and
|
149
|
+
* `foo/config.yaml` config file.
|
150
|
+
|
151
|
+
**Using cname param:**
|
152
|
+
But it's posible run `teuton play --cname=rock foo`, and this will search for:
|
153
|
+
* `foo/start.rb` test file and
|
154
|
+
* `foo/rock.yaml` config file.
|
155
|
+
|
156
|
+
`cname` param searchs YAML config file into the same project folder.
|
157
|
+
|
158
|
+
**Using cpath param:**
|
159
|
+
An also, it's posible run `teuton play --cpath=/home/david/startwars.yaml foo`, and this will search for:
|
160
|
+
* `foo/start.rb` test file and
|
161
|
+
* `/home/david/starwars.yaml` config file.
|
162
|
+
|
163
|
+
`cpath` param use YAML config file, from the specified path.
|
164
|
+
|
165
|
+
**Using diferent main rb name:**
|
166
|
+
When you run `teuton play foo/mazingerz.rb`, this will search for:
|
167
|
+
* `foo/mazingerz.rb` test file and
|
168
|
+
* `foo/mazingerz.yaml` config file.
|
@@ -0,0 +1,90 @@
|
|
1
|
+
|
2
|
+
Learn how to:
|
3
|
+
* Check a group of remote hosts.
|
4
|
+
* Export reports using other output formats.
|
5
|
+
* Checking remote machine (host1) with Windows OS.
|
6
|
+
|
7
|
+
> This example is on GitHub repository `teuton-challenge` at `learn/learn-03-remote-hosts`.
|
8
|
+
|
9
|
+
## Config file (`config.yaml`)
|
10
|
+
|
11
|
+
```yaml
|
12
|
+
---
|
13
|
+
:global:
|
14
|
+
:host1_username: root
|
15
|
+
:host1_password: profesor
|
16
|
+
:cases:
|
17
|
+
- :tt_members: Darth Maul
|
18
|
+
:host1_ip: 192.168.1.201
|
19
|
+
:host1_hostname: siths
|
20
|
+
:username: maul
|
21
|
+
- :tt_members: R2D2
|
22
|
+
:host1_ip: 192.168.1.202
|
23
|
+
:host1_hostname: robots
|
24
|
+
:username: r2d2
|
25
|
+
- :tt_members: Obiwan Kenobi
|
26
|
+
:host1_ip: 192.168.1.203
|
27
|
+
:host1_hostname: jedis
|
28
|
+
:username: obiwan
|
29
|
+
```
|
30
|
+
|
31
|
+
## Definitions (group section)
|
32
|
+
|
33
|
+
Defining 3 targets to be checked:
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
group "learn 03 remote hosts" do
|
37
|
+
|
38
|
+
target "Hostname is <#{get(:host1_hostname)}>"
|
39
|
+
goto :host1, :exec => "hostname"
|
40
|
+
expect_one get(:host1_hostname)
|
41
|
+
|
42
|
+
target "DNS Server OK"
|
43
|
+
goto :host1, :exec => "nslookup www.google.es"
|
44
|
+
expect "Nombre:"
|
45
|
+
|
46
|
+
target "Exist user <#{get(:username)}>"
|
47
|
+
goto :host1, :exec => "net user"
|
48
|
+
expect get(:username)
|
49
|
+
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
> Remote machine (host1) OS must be Windows.
|
54
|
+
|
55
|
+
## Execution (play section)
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
play do
|
59
|
+
show
|
60
|
+
# export using other output formats
|
61
|
+
export :format => :colored_text
|
62
|
+
export :format => :json
|
63
|
+
send :copy_to => :host1
|
64
|
+
end
|
65
|
+
```
|
66
|
+
|
67
|
+
* `show`, show process log on screen.
|
68
|
+
* `export :format => :json`, create output reports into `var/learn-03-remote-host/` directory. We can use diferents format to export: txt, colored_text, json and yaml.
|
69
|
+
* `send :copy_to => :host1` keyword copy output report into remote machine (host1).
|
70
|
+
|
71
|
+
## Output reports
|
72
|
+
|
73
|
+
```
|
74
|
+
$ tree var
|
75
|
+
var
|
76
|
+
└── learn-03-remote-hosts
|
77
|
+
├── case-01.colored_text
|
78
|
+
├── case-01.json
|
79
|
+
├── case-02.colored_text
|
80
|
+
├── case-02.json
|
81
|
+
├── case-03.colored_text
|
82
|
+
├── case-03.json
|
83
|
+
├── resume.colored_text
|
84
|
+
└── resume.json
|
85
|
+
```
|
86
|
+
|
87
|
+
* `case-01`, report with details about case 01 (maul)
|
88
|
+
* `case-02`, report with details about case 02 (r2d2)
|
89
|
+
* `case-03`, report with details about case 03 (obiwan)
|
90
|
+
* `cresume`, report with global resumed information about all cases.
|
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
Learn how to:
|
3
|
+
* Organize huge amount of groups/targets into several files.
|
4
|
+
* Checking Windows OS infrastructure (host1).
|
5
|
+
|
6
|
+
> This example is on GitHub repository `teuton-challenge` at `learn/learn-04-use`.
|
7
|
+
|
8
|
+
## Tree directory
|
9
|
+
|
10
|
+
This example has more files:
|
11
|
+
|
12
|
+
```bash
|
13
|
+
$ tree learn/learn-04-use
|
14
|
+
learn/learn-04-require
|
15
|
+
├── config.yaml
|
16
|
+
├── network.rb
|
17
|
+
├── README.md
|
18
|
+
├── start.rb
|
19
|
+
└── users.rb
|
20
|
+
```
|
21
|
+
|
22
|
+
* `README.md` and `config.yaml` are the same as previous examples.
|
23
|
+
|
24
|
+
## Execution (play section)
|
25
|
+
|
26
|
+
Previous `start.rb` file is splited in: start.rb, users.rb and network.rb.
|
27
|
+
|
28
|
+
Let's see current `start.rb` file:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
use 'users'
|
32
|
+
use 'network'
|
33
|
+
|
34
|
+
play do
|
35
|
+
show
|
36
|
+
export
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
* `use`, indicates external rb file that will be included/imported into main rb file. It's a good idea to organize project files, when the number of groups/targets is high.
|
41
|
+
|
42
|
+
## Definitions (user section)
|
43
|
+
|
44
|
+
> Require Windows OS on remote machine.
|
45
|
+
|
46
|
+
Let's see `users.rb` file
|
47
|
+
```ruby
|
48
|
+
group "User configuration" do
|
49
|
+
target "Exist user <#{get(:username)}>"
|
50
|
+
goto :host1, :exec => "net user"
|
51
|
+
expect get(:username)
|
52
|
+
end
|
53
|
+
|
54
|
+
```
|
55
|
+
|
56
|
+
## Definitions (network section)
|
57
|
+
|
58
|
+
> Require Windows OS on remote machine.
|
59
|
+
|
60
|
+
Let's see `network.rb` file:
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
group "Network configuracion" do
|
64
|
+
|
65
|
+
target "Hostname is <#{get(:host1_hostname)}>"
|
66
|
+
goto :host1, :exec => "hostname"
|
67
|
+
expect_one get(:host1_hostname)
|
68
|
+
|
69
|
+
target "DNS Server OK"
|
70
|
+
goto :host1, :exec => "nslookup www.nba.es"
|
71
|
+
expect "Nombre:"
|
72
|
+
|
73
|
+
end
|
74
|
+
```
|
@@ -0,0 +1,104 @@
|
|
1
|
+
|
2
|
+
Learn how to:
|
3
|
+
* Check test syntax.
|
4
|
+
* Debug your tests.
|
5
|
+
|
6
|
+
> This example is on GitHub repository `teuton-challenge` at `learn/learn-05-debug`.
|
7
|
+
|
8
|
+
## Tree directory
|
9
|
+
|
10
|
+
```bash
|
11
|
+
$ tree learn/learn-05-debug
|
12
|
+
learn/learn-05-debug
|
13
|
+
├── config.yaml
|
14
|
+
├── external.rb
|
15
|
+
├── internal.rb
|
16
|
+
├── README.md
|
17
|
+
└── start.rb
|
18
|
+
```
|
19
|
+
|
20
|
+
## Execution (play section)
|
21
|
+
|
22
|
+
The `start.rb` is main execution rb file, and uses `external` and `internal` rb files.
|
23
|
+
|
24
|
+
Let's see current `start.rb` file:
|
25
|
+
|
26
|
+
```ruby
|
27
|
+
use 'external'
|
28
|
+
use 'internal'
|
29
|
+
|
30
|
+
play do
|
31
|
+
show
|
32
|
+
export :format => :colored_text
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
## Debugging: Testing rb files
|
37
|
+
|
38
|
+
Tests grows and becames huge, with a lot of targets (That isn't a problem). Then, we organize them spliting into several files and invoke `use` keywork from our main rb file (That's good) to load other files.
|
39
|
+
|
40
|
+
When this happend, sometimes we need to verify or check rb file consistency and syntax, and we will do it with `teuton test PATH/TO/PROJECT/FOLDER`. Let's see an example:
|
41
|
+
|
42
|
+
```bash
|
43
|
+
$ teuton test learn/learn-01-target
|
44
|
+
[INFO] ScriptPath => ...epos/teuton.d/units/learn/learn-01-target/start.rb
|
45
|
+
[INFO] ConfigPath => ...s/teuton.d/units/learn/learn-01-target/config.yaml
|
46
|
+
[INFO] TestName => learn-01-target
|
47
|
+
|
48
|
+
+------------------------+
|
49
|
+
| GROUP: learn-01-target |
|
50
|
+
+------------------------+
|
51
|
+
(001) target Create user <david>
|
52
|
+
weight 1.0
|
53
|
+
goto localhost and {:exec=>"id david"}
|
54
|
+
expect david (String)
|
55
|
+
|
56
|
+
+--------------+-------+
|
57
|
+
| DSL Stats | Count |
|
58
|
+
+--------------+-------+
|
59
|
+
| Groups | 1 |
|
60
|
+
| Targets | 1 |
|
61
|
+
| Goto | 1 |
|
62
|
+
| * localhost | 1 |
|
63
|
+
| Uniques | 0 |
|
64
|
+
| Logs | 0 |
|
65
|
+
| | |
|
66
|
+
| Gets | 0 |
|
67
|
+
| Sets | 0 |
|
68
|
+
+--------------+-------+
|
69
|
+
+----------------------+
|
70
|
+
| Revising CONFIG file |
|
71
|
+
+----------------------+
|
72
|
+
[WARN] File /home/david/proy/repos/teuton.d/units/learn/learn-01-target/config.yaml not found!
|
73
|
+
[INFO] Recomended content:
|
74
|
+
---
|
75
|
+
:global:
|
76
|
+
:cases:
|
77
|
+
- :tt_members: VALUE
|
78
|
+
```
|
79
|
+
|
80
|
+
In this case, Teuton detects that there isn't config file and propose us content for `config.yaml`.
|
81
|
+
|
82
|
+
## Debugging: Result content
|
83
|
+
|
84
|
+
Every time we invoke `goto` or `run` keywork, a OS command is executed and the output showed on screen is captured by Teuton and saved into `result` internal object.
|
85
|
+
|
86
|
+
We coul debug it invoking `result.debug` into our rb file. Let's see an example from `external.rb.rb` file:
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
group "Windows: external configuration" do
|
90
|
+
|
91
|
+
target "Localhost: Verify connectivity with #{gett(:windows1_ip)}"
|
92
|
+
run "ping #{get(:windows1_ip)} -c 1"
|
93
|
+
result.debug
|
94
|
+
expect_one "0% packet loss"
|
95
|
+
result.debug
|
96
|
+
|
97
|
+
target "Localhost: netbios-ssn service working on #{gett(:windows1_ip)}"
|
98
|
+
run "nmap -Pn #{get(:windows1_ip)}"
|
99
|
+
expect "139/tcp", "open"
|
100
|
+
|
101
|
+
end
|
102
|
+
```
|
103
|
+
|
104
|
+
`result.debug` it's usefull when you are verifying what command ouput has been captured by Teuton.
|
@@ -0,0 +1,96 @@
|
|
1
|
+
|
2
|
+
Steps:
|
3
|
+
1. Create skeleton
|
4
|
+
2. Personalize targets
|
5
|
+
3. Personalize configuration file
|
6
|
+
4. Run the challenge
|
7
|
+
|
8
|
+
---
|
9
|
+
|
10
|
+
## STEP 1: Create skeleton
|
11
|
+
|
12
|
+
Create skeleton for a new project: `teuton create foo`
|
13
|
+
|
14
|
+
```bash
|
15
|
+
$ teuton create foo
|
16
|
+
|
17
|
+
[INFO] Create project <foo>
|
18
|
+
* Create dir => foo
|
19
|
+
* Create dir => foo/assets
|
20
|
+
* Create file => foo/start.rb
|
21
|
+
* Create file => foo/config.yaml
|
22
|
+
* Create file => foo/.gitignore
|
23
|
+
* Create file => foo/assets/README.md
|
24
|
+
```
|
25
|
+
|
26
|
+
> It's posible to create these files by hand.
|
27
|
+
|
28
|
+
This command will create:
|
29
|
+
|
30
|
+
| File/Directory | Description |
|
31
|
+
| --------------- | -------------- |
|
32
|
+
| foo | Base directory |
|
33
|
+
| foo/assets | Base directory for assest (images and text files) |
|
34
|
+
| foo/start.rb | Main Script |
|
35
|
+
| foo/config.yaml | YAML configuration file |
|
36
|
+
| foo/.gitignore | Prevent uploading YAML files to git repository |
|
37
|
+
| foo/assets/README.md | Statement of practice |
|
38
|
+
|
39
|
+
---
|
40
|
+
|
41
|
+
## STEP 2: Personalize targets
|
42
|
+
|
43
|
+
Write your own targets using the keywords: `target`, `goto` and `expect`. Let's see an example:
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
group "Demo group" do
|
47
|
+
|
48
|
+
target "Exist </home/david> directory"
|
49
|
+
goto :host1, :exec => "file /home/david"
|
50
|
+
expect ["/home/david", "directory"]
|
51
|
+
|
52
|
+
end
|
53
|
+
```
|
54
|
+
|
55
|
+
The above example checks if exists 'yoda' user, on *host1* system.
|
56
|
+
|
57
|
+
> Let's see the keywords used:
|
58
|
+
>
|
59
|
+
> * `target "Exist </home/david> directory"`, Describe the target with our words, so every one could easily understand what we are trying
|
60
|
+
to check.
|
61
|
+
> * `goto :host1, :exec => "file /home/david"`: Execute the command
|
62
|
+
into the remote machine (host1).
|
63
|
+
> * `expect ["/home/david", "directory"]`: Compare command ouput with our expectations.
|
64
|
+
|
65
|
+
---
|
66
|
+
|
67
|
+
## STEP 3: Personalize Configfile
|
68
|
+
|
69
|
+
Use a YAML file (`foo/config.yaml`) or JSON for your own configurations. In this example, the file contains params used by our challenge (script).
|
70
|
+
|
71
|
+
**Example**:
|
72
|
+
|
73
|
+
```yaml
|
74
|
+
---
|
75
|
+
:global:
|
76
|
+
:host1_username: root
|
77
|
+
:cases:
|
78
|
+
- :tt_members: Student 01 name or alias
|
79
|
+
:host1_ip: 1.1.1.1
|
80
|
+
:host1_password: root-password-student-01
|
81
|
+
- :tt_members: Student 02 name or alias
|
82
|
+
:host1_ip: 2.2.2.2
|
83
|
+
:host1_password: root-password-student-02
|
84
|
+
```
|
85
|
+
|
86
|
+
> The above file configures 2 diferents cases with their own params. The script use this information when execute every case.
|
87
|
+
|
88
|
+
---
|
89
|
+
|
90
|
+
## STEP 4: run the challenge
|
91
|
+
|
92
|
+
Now we only have to run the challenge:
|
93
|
+
|
94
|
+
```bash
|
95
|
+
$ teuton foo
|
96
|
+
```
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
# Learning
|
3
|
+
|
4
|
+
Learn how to write your own tests reading examples.
|
5
|
+
- [Quick demo](quick-demo.md)
|
6
|
+
- [Example 01 - Target](example-01-target.md)
|
7
|
+
- [Example 02 - Config file](example-02-configfile.md)
|
8
|
+
- [Example 03 - Remote hosts](example-03-remote-hosts.md)
|
9
|
+
- [Example 04 - Use](example-04-use.md)
|
10
|
+
- [Example 05 - Debug](example-05-debug.md)
|
11
|
+
- [Example 11 - Create your first test](example-11-first-test.md)
|
12
|
+
- [Videos](videos.md)
|
13
|
+
|
14
|
+
---
|
15
|
+
# More examples
|
16
|
+
|
17
|
+
* Let's see examples at [teuton-challenges](https://github.com/teuton-software/teuton-challenges) GitHub repository.
|
18
|
+
* Ask us by email at `teuton.software@protonmail.com` or Twitter at `@SoftwareTeuton`.
|
19
|
+
* [CHAPI19 - Spanish Teuton demo](https://github.com/dvarrui/proyectos-de-ejemplo/tree/master/charlas/teuton)
|
20
|
+
|
21
|
+
---
|
22
|
+
# Videos
|
23
|
+
|
24
|
+
By now there are no English videos. We are sorry!
|
25
|
+
But if you want to see Spanish videos, here you are:
|
26
|
+
|
27
|
+
Teuton (v2.0):
|
28
|
+
* [CHAPI19 - Charla Teuton](https://youtu.be/KFWQDfNAFxI?t=12221)
|
29
|
+
|
30
|
+
Sysadmingame (Teuton v1.0)
|
31
|
+
* [Sysadmingame (1 de 3): Instalación del programa](https://youtu.be/dnyMq9_KDco)
|
32
|
+
* [Sysadmingame (2 de 3): Crear un caso simple](https://youtu.be/0e2g5Izvc6c)
|
33
|
+
* [Sysadmingame (3 de 3): Crear un caso complejo](https://youtu.be/ebEK6OXH8kQ)
|
34
|
+
* [CHAPI16 - Charla sysadmingame](https://youtu.be/cNJaB5xzHHQ)
|