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.
Files changed (55) hide show
  1. {robotframework_pabot-5.1.0/src/robotframework_pabot.egg-info → robotframework_pabot-5.2.0b1}/PKG-INFO +47 -21
  2. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/README.md +46 -17
  3. robotframework_pabot-5.2.0b1/pyproject.toml +12 -0
  4. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/setup.cfg +3 -1
  5. robotframework_pabot-5.2.0b1/src/pabot/ProcessManager.py +376 -0
  6. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/__init__.py +1 -1
  7. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/arguments.py +70 -26
  8. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/pabot.py +310 -132
  9. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/robotremoteserver.py +27 -7
  10. robotframework_pabot-5.2.0b1/src/pabot/skip_listener.py +7 -0
  11. robotframework_pabot-5.2.0b1/src/pabot/timeout_listener.py +5 -0
  12. robotframework_pabot-5.2.0b1/src/pabot/writer.py +110 -0
  13. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1/src/robotframework_pabot.egg-info}/PKG-INFO +47 -21
  14. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/SOURCES.txt +8 -1
  15. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_basic_arguments.py +2 -2
  16. robotframework_pabot-5.2.0b1/tests/test_dynamic_ordering.py +345 -0
  17. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_pabot.py +22 -12
  18. robotframework_pabot-5.2.0b1/tests/test_pabot_process_handling.py +284 -0
  19. robotframework_pabot-5.2.0b1/tests/test_pabot_timeout.py +85 -0
  20. robotframework_pabot-5.2.0b1/tests/test_robotremoteserver.py +64 -0
  21. robotframework_pabot-5.1.0/LICENSE.txt +0 -202
  22. robotframework_pabot-5.1.0/pyproject.toml +0 -3
  23. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/MANIFEST.in +0 -0
  24. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/setup.py +0 -0
  25. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/SharedLibrary.py +0 -0
  26. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/clientwrapper.py +0 -0
  27. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/coordinatorwrapper.py +0 -0
  28. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/execution_items.py +0 -0
  29. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/pabotlib.py +0 -0
  30. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/__init__.py +0 -0
  31. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/client.py +0 -0
  32. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/coordinator.py +0 -0
  33. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/messages.py +0 -0
  34. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/py3/worker.py +0 -0
  35. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/result_merger.py +0 -0
  36. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/pabot/workerwrapper.py +0 -0
  37. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/dependency_links.txt +0 -0
  38. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/entry_points.txt +0 -0
  39. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/requires.txt +0 -0
  40. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/src/robotframework_pabot.egg-info/top_level.txt +0 -0
  41. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_arguments_output.py +0 -0
  42. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_depends.py +0 -0
  43. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_functional.py +0 -0
  44. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_missing_subprocess_output.py +0 -0
  45. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_ordering.py +0 -0
  46. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_pabotlib.py +0 -0
  47. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_pabotprerunmodifier.py +0 -0
  48. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_pabotsuitenames_io.py +0 -0
  49. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_prerunmodifier.py +0 -0
  50. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_resultmerger.py +0 -0
  51. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_run_empty_suite.py +0 -0
  52. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_stacktrace.py +0 -0
  53. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_suite_structure.py +0 -0
  54. {robotframework_pabot-5.1.0 → robotframework_pabot-5.2.0b1}/tests/test_testlevelsplit_include.py +0 -0
  55. {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.1.0
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|--ordering 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#all-command-line-options) and also following pabot options:
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
- File is created during pabot execution if not already there.
297
- The file is a cache that pabot uses when re-executing same tests to speed up processing.
298
- This file can be partially manually edited but easier option is to use ```--ordering FILENAME```.
299
- First 4 rows contain information that should not be edited - pabot will edit these when something changes.
300
- After this come the suite names.
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
- With ```--ordering FILENAME``` you can have a list that controls order also. The syntax is same as .pabotsuitenames file syntax but does not contain 4 hash rows that are present in .pabotsuitenames.
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
- Note: The `--ordering` file is intended only for defining the execution order of suites and tests. The actual selection of what to run must still be done using options like `--test`, `--suite`, `--include`, or `--exclude`.
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-the-name) you can use either the new or old full test path. For example:
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. 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. Please take care that in case of circular dependencies an exception will be thrown. 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.
327
- * 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.
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
- prints something like this:
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|--ordering 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#all-command-line-options) and also following pabot options:
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
- File is created during pabot execution if not already there.
271
- The file is a cache that pabot uses when re-executing same tests to speed up processing.
272
- This file can be partially manually edited but easier option is to use ```--ordering FILENAME```.
273
- First 4 rows contain information that should not be edited - pabot will edit these when something changes.
274
- After this come the suite names.
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
- With ```--ordering FILENAME``` you can have a list that controls order also. The syntax is same as .pabotsuitenames file syntax but does not contain 4 hash rows that are present in .pabotsuitenames.
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
- Note: The `--ordering` file is intended only for defining the execution order of suites and tests. The actual selection of what to run must still be done using options like `--test`, `--suite`, `--include`, or `--exclude`.
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-the-name) you can use either the new or old full test path. For example:
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. 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. Please take care that in case of circular dependencies an exception will be thrown. 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.
301
- * 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.
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
- prints something like this:
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