robotframework-pabot 5.1.0__tar.gz → 5.2.0b1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {robotframework_pabot-5.1.0/src/robotframework_pabot.egg-info → robotframework_pabot-5.2.0b1}/PKG-INFO +47 -21
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/README.md +46 -17
- robotframework_pabot-5.2.0b1/pyproject.toml +12 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/setup.cfg +3 -1
- robotframework_pabot-5.2.0b1/src/pabot/ProcessManager.py +376 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/__init__.py +1 -1
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/arguments.py +70 -26
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/pabot.py +310 -132
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/robotremoteserver.py +27 -7
- robotframework_pabot-5.2.0b1/src/pabot/skip_listener.py +7 -0
- robotframework_pabot-5.2.0b1/src/pabot/timeout_listener.py +5 -0
- robotframework_pabot-5.2.0b1/src/pabot/writer.py +110 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1/src/robotframework_pabot.egg-info}/PKG-INFO +47 -21
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/SOURCES.txt +8 -1
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_basic_arguments.py +2 -2
- robotframework_pabot-5.2.0b1/tests/test_dynamic_ordering.py +345 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_pabot.py +22 -12
- robotframework_pabot-5.2.0b1/tests/test_pabot_process_handling.py +284 -0
- robotframework_pabot-5.2.0b1/tests/test_pabot_timeout.py +85 -0
- robotframework_pabot-5.2.0b1/tests/test_robotremoteserver.py +64 -0
- robotframework_pabot-5.1.0/LICENSE.txt +0 -202
- robotframework_pabot-5.1.0/pyproject.toml +0 -3
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/MANIFEST.in +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/setup.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/SharedLibrary.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/clientwrapper.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/coordinatorwrapper.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/execution_items.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/pabotlib.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/__init__.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/client.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/coordinator.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/messages.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/worker.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/result_merger.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/workerwrapper.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/dependency_links.txt +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/entry_points.txt +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/requires.txt +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/top_level.txt +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_arguments_output.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_depends.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_functional.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_missing_subprocess_output.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_ordering.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_pabotlib.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_pabotprerunmodifier.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_pabotsuitenames_io.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_prerunmodifier.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_resultmerger.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_run_empty_suite.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_stacktrace.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_suite_structure.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_testlevelsplit_include.py +0 -0
- {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_testlevelsplit_output_task_order.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: robotframework-pabot
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.2.0b1
|
|
4
4
|
Summary: Parallel test runner for Robot Framework
|
|
5
5
|
Home-page: https://pabot.org
|
|
6
6
|
Download-URL: https://pypi.python.org/pypi/robotframework-pabot
|
|
@@ -12,17 +12,14 @@ Classifier: Intended Audience :: Developers
|
|
|
12
12
|
Classifier: Natural Language :: English
|
|
13
13
|
Classifier: Programming Language :: Python :: 3
|
|
14
14
|
Classifier: Topic :: Software Development :: Testing
|
|
15
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
16
15
|
Classifier: Development Status :: 5 - Production/Stable
|
|
17
16
|
Classifier: Framework :: Robot Framework
|
|
18
17
|
Requires-Python: >=3.6
|
|
19
18
|
Description-Content-Type: text/markdown
|
|
20
|
-
License-File: LICENSE.txt
|
|
21
19
|
Requires-Dist: robotframework>=3.2
|
|
22
20
|
Requires-Dist: robotframework-stacktrace>=0.4.1
|
|
23
21
|
Requires-Dist: natsort>=8.2.0
|
|
24
22
|
Dynamic: download-url
|
|
25
|
-
Dynamic: license-file
|
|
26
23
|
|
|
27
24
|
# Pabot
|
|
28
25
|
|
|
@@ -47,7 +44,7 @@ A parallel executor for [Robot Framework](http://www.robotframework.org) tests.
|
|
|
47
44
|
- [Contributing](#contributing-to-the-project)
|
|
48
45
|
- [Command-line options](#command-line-options)
|
|
49
46
|
- [PabotLib](#pabotlib)
|
|
50
|
-
- [Controlling execution order](#controlling-execution-order-and-level-of-parallelism)
|
|
47
|
+
- [Controlling execution order, mode and level of parallelism](#controlling-execution-order-mode-and-level-of-parallelism)
|
|
51
48
|
- [Programmatic use](#programmatic-use)
|
|
52
49
|
- [Global variables](#global-variables)
|
|
53
50
|
- [Output Files Generated by Pabot](#output-files-generated-by-pabot)
|
|
@@ -98,6 +95,12 @@ There are several ways you can help in improving this tool:
|
|
|
98
95
|
- Report an issue or an improvement idea to the [issue tracker](https://github.com/mkorpela/pabot/issues)
|
|
99
96
|
- Contribute by programming and making a pull request (easiest way is to work on an issue from the issue tracker)
|
|
100
97
|
|
|
98
|
+
Before contributing, please read our detailed contributing guidelines:
|
|
99
|
+
|
|
100
|
+
- [Contributing Guide](CONTRIBUTING.md)
|
|
101
|
+
- [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
102
|
+
- [Security Policy](SECURITY.md)
|
|
103
|
+
|
|
101
104
|
## Command-line options
|
|
102
105
|
<!-- NOTE:
|
|
103
106
|
The sections inside these docstring markers are also used in Pabot's --help output.
|
|
@@ -114,7 +117,8 @@ pabot [--verbose|--testlevelsplit|--command .. --end-command|
|
|
|
114
117
|
--processtimeout num|
|
|
115
118
|
--shard i/n|
|
|
116
119
|
--artifacts extensions|--artifactsinsubfolders|
|
|
117
|
-
--resourcefile file|--argumentfile[num] file|--suitesfrom file
|
|
120
|
+
--resourcefile file|--argumentfile[num] file|--suitesfrom file
|
|
121
|
+
--ordering <FILENAME> [static|dynamic] [skip|run_all]|
|
|
118
122
|
--chunk|
|
|
119
123
|
--pabotprerunmodifier modifier|
|
|
120
124
|
--no-rebot|
|
|
@@ -124,7 +128,7 @@ pabot [--verbose|--testlevelsplit|--command .. --end-command|
|
|
|
124
128
|
|
|
125
129
|
PabotLib remote server is started by default to enable locking and resource distribution between parallel test executions.
|
|
126
130
|
|
|
127
|
-
Supports all [Robot Framework command line options](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#
|
|
131
|
+
Supports all [Robot Framework command line options](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#command-line-options) and also following pabot options:
|
|
128
132
|
|
|
129
133
|
**--verbose**
|
|
130
134
|
More output from the parallel execution.
|
|
@@ -202,8 +206,10 @@ Supports all [Robot Framework command line options](https://robotframework.org/r
|
|
|
202
206
|
Optionally read suites from output.xml file. Failed suites will run first and longer running ones will be executed
|
|
203
207
|
before shorter ones.
|
|
204
208
|
|
|
205
|
-
**--ordering [FILE PATH]**
|
|
206
|
-
Optionally give execution order from a file.
|
|
209
|
+
**--ordering [FILE PATH] [MODE] [FAILURE POLICY]**
|
|
210
|
+
Optionally give execution order from a file. See README.md section: [Controlling execution order, mode and level of parallelism](#controlling-execution-order-mode-and-level-of-parallelism)
|
|
211
|
+
- MODE (optional): [static (default)|dynamic]
|
|
212
|
+
- FAILURE POLICY (optional, only in dynamic mode): [skip|run_all (default)]
|
|
207
213
|
|
|
208
214
|
**--chunk**
|
|
209
215
|
Optionally chunk tests to PROCESSES number of robot runs. This can save time because all the suites will share the same
|
|
@@ -245,6 +251,9 @@ These can be helpful when you must ensure that only one of the processes uses so
|
|
|
245
251
|
|
|
246
252
|
PabotLib Docs are located at https://pabot.org/PabotLib.html.
|
|
247
253
|
|
|
254
|
+
Note that PabotLib uses the XML-RPC protocol, which does not support all possible object types.
|
|
255
|
+
These limitations are described in the Robot Framework documentation in chapter [Supported argument and return value types](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#supported-argument-and-return-value-types).
|
|
256
|
+
|
|
248
257
|
### PabotLib example:
|
|
249
258
|
|
|
250
259
|
test.robot
|
|
@@ -290,18 +299,28 @@ pabot call using resources from valueset.dat
|
|
|
290
299
|
|
|
291
300
|
pabot --pabotlib --resourcefile valueset.dat test.robot
|
|
292
301
|
|
|
293
|
-
### Controlling execution order and level of parallelism
|
|
302
|
+
### Controlling execution order, mode, and level of parallelism
|
|
294
303
|
|
|
295
304
|
.pabotsuitenames file contains the list of suites that will be executed.
|
|
296
|
-
|
|
297
|
-
The file
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
305
|
+
This file is created during pabot execution if it does not already exist. It acts as a cache to speed up processing when re-executing the same tests.
|
|
306
|
+
The file can be manually edited partially, but a simpler and more controlled approach is to use:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
--ordering <FILENAME> [static|dynamic] [skip|run_all]
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
- **FILENAME** – path to the ordering file.
|
|
313
|
+
- **mode** – optional execution mode, either `static` (default) or `dynamic`.
|
|
314
|
+
- `static` executes suites in predefined stages.
|
|
315
|
+
- `dynamic` executes tests as soon as all their dependencies are satisfied, allowing more optimal parallel execution.
|
|
316
|
+
- **failure_policy** – determines behavior when dependencies fail. Used only in dynamic mode. Optional:
|
|
317
|
+
- `skip` – dependent tests are skipped if a dependency fails.
|
|
318
|
+
- `run_all` – all tests run regardless of failures (default).
|
|
301
319
|
|
|
302
|
-
|
|
320
|
+
The ordering file syntax is similar to `.pabotsuitenames` but does not include the first 4 hash rows used by pabot. The ordering file defines the **execution order and dependencies** of suites and tests.
|
|
321
|
+
The actual selection of what to run must still be done using options like `--test`, `--suite`, `--include`, or `--exclude`.
|
|
303
322
|
|
|
304
|
-
|
|
323
|
+
#### Controlling execution order
|
|
305
324
|
|
|
306
325
|
There different possibilities to influence the execution:
|
|
307
326
|
|
|
@@ -313,7 +332,7 @@ There different possibilities to influence the execution:
|
|
|
313
332
|
--suite Top Suite
|
|
314
333
|
```
|
|
315
334
|
|
|
316
|
-
* If the base suite name is changing with robot option [```--name / -N```](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#setting-
|
|
335
|
+
* If the base suite name is changing with robot option [```--name / -N```](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#setting-suite-name) you can use either the new or old full test path. For example:
|
|
317
336
|
|
|
318
337
|
```
|
|
319
338
|
--test New Suite Name.Sub Suite.Test 1
|
|
@@ -323,8 +342,14 @@ OR
|
|
|
323
342
|
|
|
324
343
|
* You can add a line with text `#WAIT` to force executor to wait until all previous suites have been executed.
|
|
325
344
|
* You can group suites and tests together to same executor process by adding line `{` before the group and `}` after. Note that `#WAIT` cannot be used inside a group.
|
|
326
|
-
* You can introduce dependencies using the word `#DEPENDS` after a test declaration. This keyword can be used several times if it is necessary to refer to several different tests.
|
|
327
|
-
|
|
345
|
+
* You can introduce dependencies using the word `#DEPENDS` after a test declaration. This keyword can be used several times if it is necessary to refer to several different tests.
|
|
346
|
+
* The ordering algorithm is designed to preserve the exact user-defined order as closely as possible. However, if a test's execution dependencies are not yet satisfied, the test is postponed and moved to the earliest possible stage where all its dependencies are fulfilled.
|
|
347
|
+
* Please take care that in case of circular dependencies an exception will be thrown.
|
|
348
|
+
* Note that each `#WAIT` splits suites into separate execution blocks, and it's not possible to define dependencies for suites or tests that are inside another `#WAIT` block or inside another `{}` braces.
|
|
349
|
+
* Ordering mode effect to execution:
|
|
350
|
+
* **Dynamic mode** will schedule dependent tests as soon as all their dependencies are satisfied. Note that in dynamic mode `#WAIT` is ignored, but you can achieve same results with using only `#DEPENDS` keywords.
|
|
351
|
+
* **Static mode** preserves stage barriers and executes the next stage only after all tests in the previous stage finish.
|
|
352
|
+
* Note: Within a group `{}`, neither execution order nor the `#DEPENDS` keyword currently works. This is due to limitations in Robot Framework, which is invoked within Pabot subprocesses. These limitations may be addressed in a future release of Robot Framework. For now, tests or suites within a group will be executed in the order Robot Framework discovers them — typically in alphabetical order.
|
|
328
353
|
* An example could be:
|
|
329
354
|
|
|
330
355
|
```
|
|
@@ -378,7 +403,7 @@ where order.txt is:
|
|
|
378
403
|
#SLEEP 8
|
|
379
404
|
```
|
|
380
405
|
|
|
381
|
-
|
|
406
|
+
Possible output could be:
|
|
382
407
|
|
|
383
408
|
```
|
|
384
409
|
2025-02-15 19:15:00.408321 [0] [ID:1] SLEEPING 6 SECONDS BEFORE STARTING Data 1.suite C
|
|
@@ -466,6 +491,7 @@ pabot_results/
|
|
|
466
491
|
│ ├── robot_stdout.out
|
|
467
492
|
│ ├── robot_stderr.out
|
|
468
493
|
│ └── artifacts...
|
|
494
|
+
pabot_manager.log # Pabot's own main log. Basically same than prints in console
|
|
469
495
|
```
|
|
470
496
|
|
|
471
497
|
Each `PABOTQUEUEINDEX` folder contains as default:
|
|
@@ -21,7 +21,7 @@ A parallel executor for [Robot Framework](http://www.robotframework.org) tests.
|
|
|
21
21
|
- [Contributing](#contributing-to-the-project)
|
|
22
22
|
- [Command-line options](#command-line-options)
|
|
23
23
|
- [PabotLib](#pabotlib)
|
|
24
|
-
- [Controlling execution order](#controlling-execution-order-and-level-of-parallelism)
|
|
24
|
+
- [Controlling execution order, mode and level of parallelism](#controlling-execution-order-mode-and-level-of-parallelism)
|
|
25
25
|
- [Programmatic use](#programmatic-use)
|
|
26
26
|
- [Global variables](#global-variables)
|
|
27
27
|
- [Output Files Generated by Pabot](#output-files-generated-by-pabot)
|
|
@@ -72,6 +72,12 @@ There are several ways you can help in improving this tool:
|
|
|
72
72
|
- Report an issue or an improvement idea to the [issue tracker](https://github.com/mkorpela/pabot/issues)
|
|
73
73
|
- Contribute by programming and making a pull request (easiest way is to work on an issue from the issue tracker)
|
|
74
74
|
|
|
75
|
+
Before contributing, please read our detailed contributing guidelines:
|
|
76
|
+
|
|
77
|
+
- [Contributing Guide](CONTRIBUTING.md)
|
|
78
|
+
- [Code of Conduct](CODE_OF_CONDUCT.md)
|
|
79
|
+
- [Security Policy](SECURITY.md)
|
|
80
|
+
|
|
75
81
|
## Command-line options
|
|
76
82
|
<!-- NOTE:
|
|
77
83
|
The sections inside these docstring markers are also used in Pabot's --help output.
|
|
@@ -88,7 +94,8 @@ pabot [--verbose|--testlevelsplit|--command .. --end-command|
|
|
|
88
94
|
--processtimeout num|
|
|
89
95
|
--shard i/n|
|
|
90
96
|
--artifacts extensions|--artifactsinsubfolders|
|
|
91
|
-
--resourcefile file|--argumentfile[num] file|--suitesfrom file
|
|
97
|
+
--resourcefile file|--argumentfile[num] file|--suitesfrom file
|
|
98
|
+
--ordering <FILENAME> [static|dynamic] [skip|run_all]|
|
|
92
99
|
--chunk|
|
|
93
100
|
--pabotprerunmodifier modifier|
|
|
94
101
|
--no-rebot|
|
|
@@ -98,7 +105,7 @@ pabot [--verbose|--testlevelsplit|--command .. --end-command|
|
|
|
98
105
|
|
|
99
106
|
PabotLib remote server is started by default to enable locking and resource distribution between parallel test executions.
|
|
100
107
|
|
|
101
|
-
Supports all [Robot Framework command line options](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#
|
|
108
|
+
Supports all [Robot Framework command line options](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#command-line-options) and also following pabot options:
|
|
102
109
|
|
|
103
110
|
**--verbose**
|
|
104
111
|
More output from the parallel execution.
|
|
@@ -176,8 +183,10 @@ Supports all [Robot Framework command line options](https://robotframework.org/r
|
|
|
176
183
|
Optionally read suites from output.xml file. Failed suites will run first and longer running ones will be executed
|
|
177
184
|
before shorter ones.
|
|
178
185
|
|
|
179
|
-
**--ordering [FILE PATH]**
|
|
180
|
-
Optionally give execution order from a file.
|
|
186
|
+
**--ordering [FILE PATH] [MODE] [FAILURE POLICY]**
|
|
187
|
+
Optionally give execution order from a file. See README.md section: [Controlling execution order, mode and level of parallelism](#controlling-execution-order-mode-and-level-of-parallelism)
|
|
188
|
+
- MODE (optional): [static (default)|dynamic]
|
|
189
|
+
- FAILURE POLICY (optional, only in dynamic mode): [skip|run_all (default)]
|
|
181
190
|
|
|
182
191
|
**--chunk**
|
|
183
192
|
Optionally chunk tests to PROCESSES number of robot runs. This can save time because all the suites will share the same
|
|
@@ -219,6 +228,9 @@ These can be helpful when you must ensure that only one of the processes uses so
|
|
|
219
228
|
|
|
220
229
|
PabotLib Docs are located at https://pabot.org/PabotLib.html.
|
|
221
230
|
|
|
231
|
+
Note that PabotLib uses the XML-RPC protocol, which does not support all possible object types.
|
|
232
|
+
These limitations are described in the Robot Framework documentation in chapter [Supported argument and return value types](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#supported-argument-and-return-value-types).
|
|
233
|
+
|
|
222
234
|
### PabotLib example:
|
|
223
235
|
|
|
224
236
|
test.robot
|
|
@@ -264,18 +276,28 @@ pabot call using resources from valueset.dat
|
|
|
264
276
|
|
|
265
277
|
pabot --pabotlib --resourcefile valueset.dat test.robot
|
|
266
278
|
|
|
267
|
-
### Controlling execution order and level of parallelism
|
|
279
|
+
### Controlling execution order, mode, and level of parallelism
|
|
268
280
|
|
|
269
281
|
.pabotsuitenames file contains the list of suites that will be executed.
|
|
270
|
-
|
|
271
|
-
The file
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
282
|
+
This file is created during pabot execution if it does not already exist. It acts as a cache to speed up processing when re-executing the same tests.
|
|
283
|
+
The file can be manually edited partially, but a simpler and more controlled approach is to use:
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
--ordering <FILENAME> [static|dynamic] [skip|run_all]
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
- **FILENAME** – path to the ordering file.
|
|
290
|
+
- **mode** – optional execution mode, either `static` (default) or `dynamic`.
|
|
291
|
+
- `static` executes suites in predefined stages.
|
|
292
|
+
- `dynamic` executes tests as soon as all their dependencies are satisfied, allowing more optimal parallel execution.
|
|
293
|
+
- **failure_policy** – determines behavior when dependencies fail. Used only in dynamic mode. Optional:
|
|
294
|
+
- `skip` – dependent tests are skipped if a dependency fails.
|
|
295
|
+
- `run_all` – all tests run regardless of failures (default).
|
|
275
296
|
|
|
276
|
-
|
|
297
|
+
The ordering file syntax is similar to `.pabotsuitenames` but does not include the first 4 hash rows used by pabot. The ordering file defines the **execution order and dependencies** of suites and tests.
|
|
298
|
+
The actual selection of what to run must still be done using options like `--test`, `--suite`, `--include`, or `--exclude`.
|
|
277
299
|
|
|
278
|
-
|
|
300
|
+
#### Controlling execution order
|
|
279
301
|
|
|
280
302
|
There different possibilities to influence the execution:
|
|
281
303
|
|
|
@@ -287,7 +309,7 @@ There different possibilities to influence the execution:
|
|
|
287
309
|
--suite Top Suite
|
|
288
310
|
```
|
|
289
311
|
|
|
290
|
-
* If the base suite name is changing with robot option [```--name / -N```](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#setting-
|
|
312
|
+
* If the base suite name is changing with robot option [```--name / -N```](https://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#setting-suite-name) you can use either the new or old full test path. For example:
|
|
291
313
|
|
|
292
314
|
```
|
|
293
315
|
--test New Suite Name.Sub Suite.Test 1
|
|
@@ -297,8 +319,14 @@ OR
|
|
|
297
319
|
|
|
298
320
|
* You can add a line with text `#WAIT` to force executor to wait until all previous suites have been executed.
|
|
299
321
|
* You can group suites and tests together to same executor process by adding line `{` before the group and `}` after. Note that `#WAIT` cannot be used inside a group.
|
|
300
|
-
* You can introduce dependencies using the word `#DEPENDS` after a test declaration. This keyword can be used several times if it is necessary to refer to several different tests.
|
|
301
|
-
|
|
322
|
+
* You can introduce dependencies using the word `#DEPENDS` after a test declaration. This keyword can be used several times if it is necessary to refer to several different tests.
|
|
323
|
+
* The ordering algorithm is designed to preserve the exact user-defined order as closely as possible. However, if a test's execution dependencies are not yet satisfied, the test is postponed and moved to the earliest possible stage where all its dependencies are fulfilled.
|
|
324
|
+
* Please take care that in case of circular dependencies an exception will be thrown.
|
|
325
|
+
* Note that each `#WAIT` splits suites into separate execution blocks, and it's not possible to define dependencies for suites or tests that are inside another `#WAIT` block or inside another `{}` braces.
|
|
326
|
+
* Ordering mode effect to execution:
|
|
327
|
+
* **Dynamic mode** will schedule dependent tests as soon as all their dependencies are satisfied. Note that in dynamic mode `#WAIT` is ignored, but you can achieve same results with using only `#DEPENDS` keywords.
|
|
328
|
+
* **Static mode** preserves stage barriers and executes the next stage only after all tests in the previous stage finish.
|
|
329
|
+
* Note: Within a group `{}`, neither execution order nor the `#DEPENDS` keyword currently works. This is due to limitations in Robot Framework, which is invoked within Pabot subprocesses. These limitations may be addressed in a future release of Robot Framework. For now, tests or suites within a group will be executed in the order Robot Framework discovers them — typically in alphabetical order.
|
|
302
330
|
* An example could be:
|
|
303
331
|
|
|
304
332
|
```
|
|
@@ -352,7 +380,7 @@ where order.txt is:
|
|
|
352
380
|
#SLEEP 8
|
|
353
381
|
```
|
|
354
382
|
|
|
355
|
-
|
|
383
|
+
Possible output could be:
|
|
356
384
|
|
|
357
385
|
```
|
|
358
386
|
2025-02-15 19:15:00.408321 [0] [ID:1] SLEEPING 6 SECONDS BEFORE STARTING Data 1.suite C
|
|
@@ -440,6 +468,7 @@ pabot_results/
|
|
|
440
468
|
│ ├── robot_stdout.out
|
|
441
469
|
│ ├── robot_stderr.out
|
|
442
470
|
│ └── artifacts...
|
|
471
|
+
pabot_manager.log # Pabot's own main log. Basically same than prints in console
|
|
443
472
|
```
|
|
444
473
|
|
|
445
474
|
Each `PABOTQUEUEINDEX` folder contains as default:
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=42", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[tool.pytest.ini_options]
|
|
6
|
+
python_files = ["test_*.py"]
|
|
7
|
+
python_classes = ["Test*"]
|
|
8
|
+
filterwarnings = [
|
|
9
|
+
"ignore:'robot.utils.PY2' is deprecated:DeprecationWarning:robot.utils",
|
|
10
|
+
"ignore:'robot.utils.is_unicode' is deprecated:DeprecationWarning:robot.utils",
|
|
11
|
+
"ignore::pytest.PytestCollectionWarning:module=tests.test_pabotlib",
|
|
12
|
+
]
|
|
@@ -11,12 +11,12 @@ description = Parallel test runner for Robot Framework
|
|
|
11
11
|
long_description = file: README.md
|
|
12
12
|
long_description_content_type = text/markdown
|
|
13
13
|
license = Apache License, Version 2.0
|
|
14
|
+
license_files =
|
|
14
15
|
classifiers =
|
|
15
16
|
Intended Audience :: Developers
|
|
16
17
|
Natural Language :: English
|
|
17
18
|
Programming Language :: Python :: 3
|
|
18
19
|
Topic :: Software Development :: Testing
|
|
19
|
-
License :: OSI Approved :: Apache Software License
|
|
20
20
|
Development Status :: 5 - Production/Stable
|
|
21
21
|
Framework :: Robot Framework
|
|
22
22
|
|
|
@@ -30,6 +30,8 @@ install_requires =
|
|
|
30
30
|
robotframework>=3.2
|
|
31
31
|
robotframework-stacktrace>=0.4.1
|
|
32
32
|
natsort>=8.2.0
|
|
33
|
+
license_files =
|
|
34
|
+
LICENSE
|
|
33
35
|
|
|
34
36
|
[options.packages.find]
|
|
35
37
|
where = src
|