testbench2robotframework 0.9.0a1__tar.gz → 0.9.1a2__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 (60) hide show
  1. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/.gitignore +2 -1
  2. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/ExampleConfiguration/json_config.json +2 -2
  3. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/ExampleConfiguration/pyproject_example.toml +1 -1
  4. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/ExampleConfiguration/toml_config.toml +1 -1
  5. testbench2robotframework-0.9.1a2/PKG-INFO +158 -0
  6. testbench2robotframework-0.9.1a2/README.md +131 -0
  7. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/atest/robot/libs/json_config.py +2 -2
  8. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/__init__.py +1 -1
  9. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/cli.py +5 -5
  10. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/config.py +3 -3
  11. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/model.py +33 -33
  12. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/result_writer.py +79 -79
  13. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/testbench2rf.py +149 -149
  14. testbench2robotframework-0.9.0a1/PKG-INFO +0 -311
  15. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/CreatePiPWheel.bat +0 -0
  16. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/CreatePiPWheel.sh +0 -0
  17. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/DEVELOPMENT.md +0 -0
  18. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/LICENSE +0 -0
  19. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/MANIFEST.in +0 -0
  20. /testbench2robotframework-0.9.0a1/README.md → /testbench2robotframework-0.9.1a2/README_old.md +0 -0
  21. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/atest/json_config_tests/1_tfs.robot +0 -0
  22. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/atest/robot/libs/pyproject_config.py +0 -0
  23. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/atest/robot/resources/file_management.resource +0 -0
  24. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/atest/robot/resources/testbench2robotframework_cli.resource +0 -0
  25. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/atest/robot/rf_tests/cli_interface/write/json_config.robot +0 -0
  26. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/atest/robot/rf_tests/cli_interface/write/no_config_argument.robot +0 -0
  27. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/atest/robot/rf_tests/cli_interface/write/toml_config.robot +0 -0
  28. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/create_json_schema.py +0 -0
  29. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/images/LibrarySubdivision.PNG +0 -0
  30. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/images/Unbenannt.PNG +0 -0
  31. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/images/generated.png +0 -0
  32. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/images/libraries.PNG +0 -0
  33. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/images/resources.PNG +0 -0
  34. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/images/rfLibraryRootsTestBench.PNG +0 -0
  35. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/images/testbench_rfLibraryRegex.PNG +0 -0
  36. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/images/testbench_rfResourceRegex.PNG +0 -0
  37. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/images/testthemen.PNG +0 -0
  38. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/oldModel.py +0 -0
  39. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/pydantic_model.py +0 -0
  40. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/pyproject.toml +0 -0
  41. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/requirements.txt +0 -0
  42. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/robot.toml +0 -0
  43. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/tasks.py +0 -0
  44. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench-tools.zip +0 -0
  45. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/__main__.py +0 -0
  46. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/execution_artifacts.py +0 -0
  47. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/html_parser.py +0 -0
  48. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/json_reader.py +0 -0
  49. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/json_writer.py +0 -0
  50. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/log.py +0 -0
  51. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/model_utils.py +0 -0
  52. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/robotframework2testbench.py +0 -0
  53. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/testbench2robotframework.py +0 -0
  54. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/testsuite_write.py +0 -0
  55. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/testbench2robotframework/utils.py +0 -0
  56. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/tests/test_data/configurations/invalid_config.json +0 -0
  57. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/tests/test_data/configurations/valid_config.json +0 -0
  58. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/tests/test_missing_files.py +0 -0
  59. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/tests/test_robot_files_should_not_contain_invalid_characters.py +0 -0
  60. {testbench2robotframework-0.9.0a1 → testbench2robotframework-0.9.1a2}/tests/test_zip_file_generation.py +0 -0
@@ -164,4 +164,5 @@ robot.toml
164
164
  cli-export-config.json
165
165
  cli-import-config.json
166
166
  robot_tests/
167
- reports/
167
+ reports/
168
+ .github/
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "library-root": [
3
- "Interactions",
3
+ "Keywords",
4
4
  "RF-Library"
5
5
  ],
6
6
  "resource-root": [
@@ -11,7 +11,7 @@
11
11
  "log-suite-numbering": true,
12
12
  "resource-directory": "{root}/Resources",
13
13
  "clean": true,
14
- "compound-interaction-logging": "GROUP",
14
+ "compound-keyword-logging": "GROUP",
15
15
  "library-mapping": {
16
16
  "SeleniumLibrary": "SeleniumLibrary timeout=10 implicit_wait=1 run_on_failure=Capture Page Screenshot",
17
17
  "SuperRemoteLibrary": "Remote http://127.0.0.1:8270 WITH NAME SuperRemoteLibrary"
@@ -7,7 +7,7 @@ fully-qualified = false
7
7
  output-directory = "{root}/Generated"
8
8
  log-suite-numbering = false
9
9
  clean = true
10
- compound-interaction-logging = true
10
+ compound-keyword-logging = true
11
11
  resource-directory = "{root}/Resources"
12
12
  testcase-split-regex = ".*StopWithRestart.*"
13
13
  phase-pattern = "{testcase} : Phase {index}/{length}"
@@ -7,7 +7,7 @@ fully-qualified = false
7
7
  output-directory = "{root}/Generated"
8
8
  log-suite-numbering = false
9
9
  clean = true
10
- compound-interaction-logging = true
10
+ compound-keyword-logging = true
11
11
  resource-directory = "{root}/Resources"
12
12
  testcase-split-regex = ".*StopWithRestart.*"
13
13
  phase-pattern = "{testcase} : Phase {index}/{length}"
@@ -0,0 +1,158 @@
1
+ Metadata-Version: 2.4
2
+ Name: testbench2robotframework
3
+ Version: 0.9.1a2
4
+ Summary: Robot Framework Code Generator from Keyword-Driven Tests in imbus TestBench 3.0 and newer
5
+ Author-email: imbus AG <support@imbus.de>
6
+ Requires-Python: >= 3.10
7
+ Description-Content-Type: text/markdown
8
+ License-File: LICENSE
9
+ Requires-Dist: click >= 8.0
10
+ Requires-Dist: robotframework >= 5.0
11
+ Requires-Dist: tomli; python_version < '3.11'
12
+ Requires-Dist: build ; extra == "dev"
13
+ Requires-Dist: check-manifest ; extra == "dev"
14
+ Requires-Dist: flit ; extra == "dev"
15
+ Requires-Dist: invoke ; extra == "dev"
16
+ Requires-Dist: mypy ; extra == "dev"
17
+ Requires-Dist: pylint ; extra == "dev"
18
+ Requires-Dist: pytest ; extra == "dev"
19
+ Requires-Dist: pytest-cov ; extra == "dev"
20
+ Requires-Dist: pytest-spec ; extra == "dev"
21
+ Requires-Dist: robotframework-tidy ; extra == "dev"
22
+ Requires-Dist: ruff ; extra == "dev"
23
+ Requires-Dist: twine ; extra == "dev"
24
+ Project-URL: Repository, https://github.com/imbus/testbench2robotframework
25
+ Provides-Extra: dev
26
+
27
+ # TestBench2RobotFramework
28
+
29
+ **TestBench2RobotFramework** is a CLI tool used to convert a TestBench JSON report into Robot Framework test suites and to write the execution results provided by Robot Framework to the TestBench report.
30
+
31
+ ## Installation
32
+
33
+ You can install TestBench2RobotFramework via pip using the following command:
34
+
35
+ ```powershell
36
+ pip install testbench2robotframework
37
+ ```
38
+
39
+ Python 3.10 or higher is required to run this tool.
40
+
41
+ ## Remark
42
+ TestBench2RobotFramework requires TestBench version >= 4. If you're running an older version please contact the TestBench support for information on how to connect your Version of TestBench to Robot Framework. The TestBench Report can be either be exported via the TestBench Rest API with tools like the testbench-cli-reporter or directly from the client.
43
+
44
+ ## Usage
45
+
46
+ TestBench2RobotFramework supports two main use cases, which are described in more detail in the following sections:
47
+
48
+ 1. Generating Robot Framework test suites from a TestBench report.
49
+ 2. Fetching results from a Robot Framework output XML file and saving them back to a TestBench report.
50
+
51
+ ### Generating Robot Framework Test Suites
52
+ To generate Robot Framework test suites, use the `generate-tests` subcommand:
53
+
54
+ ```powershell
55
+ testbench2robotframework generate-tests TESTBENCH_REPORT
56
+ ```
57
+
58
+ This command generates a Robot Framework test suite for each test case set specified in the `TESTBENCH_REPORT`.
59
+
60
+ ![](./images/testthemen.PNG)
61
+ ![](./images/generated.PNG)
62
+
63
+ The example above demonstrates how Robot Framework test suites are generated based on the *Test Theme Tree* defined in TestBench.
64
+
65
+
66
+
67
+ #### Configuration
68
+
69
+ There are multiple configuration options available for **TestBench2RobotFramework** that can be used to customize the generated test suites. Options can be specified either via the command line, in a `pyproject.toml` file or in a `robot.toml` file.
70
+
71
+ To use options via the command line, the following syntax is used:
72
+
73
+ ```powershell
74
+ testbench2robotframework generate-tests [OPTIONS] TESTBENCH_REPORT
75
+ ```
76
+
77
+ | Option | Description |
78
+ |--------|-------------|
79
+ | `-c`, `--config PATH` | Path to a configuration file for TestBench2RobotFramework. |
80
+ | `--clean` | Deletes all files present in the output-directory before new test suites are created. |
81
+ | `-d`, `--output-directory PATH` | Directory or ZIP archive containing the generated test suites. |
82
+ | `--compound-keyword-logging` | Mode for logging compound keywords. Options: `GROUP`, `COMMENT`, or `NONE`. |
83
+ | `--fully-qualified` | Calls Robot Framework keywords by their fully qualified names in the generated test suites. |
84
+ | `--log-suite-numbering` | Enables logging of the test suite numbering. |
85
+ | `--metadata` | Add extra metadata to the settings of the generated Robot Framework test suite. Provide entries as key:value pairs, where *key* is the metadata name and *value* is the corresponding value. Values may also be Python expressions. The special variable '$tcs' gives access to the TestBench Python model of the test case set. |
86
+ | `--resource-directory PATH` | Directory containing the Robot Framework resource files. |
87
+ | `--resource-directory-regex TEXT` | Regex that can be used to identify the TestBench Subdivision that corresponds to the <resource-directory>. Resources will be imported relative to this subdivision based on the test elements structure in TestBench. |
88
+ | `--library-regex TEXT` | Regular expression used to identify TestBench subdivisions corresponding to Robot Framework libraries. |
89
+ | `--library-root TEXT` | TestBench root subdivision whose direct children correspond to Robot Framework libraries. |
90
+ | `--resource-regex TEXT` | Regular expression used to identify TestBench subdivisions corresponding to Robot Framework resources. |
91
+ | `--resource-root TEXT` | TestBench root subdivision whose direct children correspond to Robot Framework resources. |
92
+ | `--library-mapping TEXT` | Library import statement to use when a keyword from the specified TestBench subdivision is encountered. |
93
+ | `--resource-mapping TEXT` | Resource import statement to use when a keyword from the specified TestBench subdivision is encountered. |
94
+ | `--help` | Displays the help message and exits. |
95
+ | `--version` | Writes the TestBench2RobotFramework, Robot Framework and Python version to console. |
96
+
97
+
98
+ ### Saving Robot Framework Results
99
+
100
+ Saving the results requires a Robot Framework output XML file, along with the original TestBench report from which the test suites were generated.
101
+
102
+ Use the following command:
103
+
104
+ ```powershell
105
+ testbench2robotframework fetch-results [OPTIONS] ROBOT_RESULT TESTBENCH_REPORT
106
+ ```
107
+
108
+ | Option | Description |
109
+ |--------|-------------|
110
+ | `-c`, `--config PATH` | Path to a configuration file for TestBench2RobotFramework. |
111
+ | `-d`, `--output-directory PATH` | Path to the directory or ZIP file where the updated TestBench JSON report (with results) should be saved. |
112
+ | `--help` | Displays the help message and exits. |
113
+
114
+
115
+
116
+ ### Using pyproject.toml
117
+ All CLI options available for ``testbench2robotframework`` can also be defined in your ``pyproject.toml`` file, ``robot.toml``, or a workspace-local ``.robot.toml``. This offers a convenient way to store and reuse configuration settings, particularly in larger projects or automated environments.
118
+
119
+ #### Example
120
+ ```toml
121
+ [tool.testbench2robotframework]
122
+ library-regex = ['(?:.*\.)?(?P<resourceName>[^.]+?)\s*\[Robot-Library\].*']
123
+ resource-regex = ['(?:.*\.)?(?P<resourceName>[^.]+?)\s*\[Robot-Resource\].*']
124
+ library-root = ["RF", "RF-Library"]
125
+ resource-root = ["RF-Resource"]
126
+ fully-qualified = false
127
+ output-directory = "{root}/Generated"
128
+ log-suite-numbering = false
129
+ clean = true
130
+ compound-keyword-logging = GROUP
131
+ resource-directory = "{root}/Resources"
132
+ resource-directory-regex = ".*\\[Robot-Resources\\].*"
133
+ reference-behaviour = "ATTACHMENT"
134
+ attachment-conflict-behaviour = "USE_EXISTING"
135
+
136
+ [tool.testbench2robotframework.library-mapping]
137
+ SeleniumLibrary = "SeleniumLibrary timeout=10 implicit_wait=1 run_on_failure=Capture Page Screenshot"
138
+ SuperRemoteLibrary = "Remote http://127.0.0.1:8270 WITH NAME SuperRemoteLibrary"
139
+
140
+ [tool.testbench2robotframework.resource-mapping]
141
+ MyKeywords = "{root}/../MyKeywords.resource"
142
+ MyOtherKeywords = "{resourceDirectory}/subdir/MyOtherKeywords.resource"
143
+
144
+ [tool.testbench2robotframework.forced-import]
145
+ libraries = ["test.py"]
146
+ resources = []
147
+ variables = []
148
+
149
+ [tool.testbench2robotframework.console-logging]
150
+ logLevel = "INFO"
151
+ logFormat = "%(levelname)s: %(message)s"
152
+
153
+ [tool.testbench2robotframework.file-logging]
154
+ logLevel = "DEBUG"
155
+ logFormat = "%(asctime)s - %(filename)s:%(lineno)d - %(levelname)8s - %(message)s"
156
+ fileName = "testbench2robotframework.log"
157
+ ```
158
+
@@ -0,0 +1,131 @@
1
+ # TestBench2RobotFramework
2
+
3
+ **TestBench2RobotFramework** is a CLI tool used to convert a TestBench JSON report into Robot Framework test suites and to write the execution results provided by Robot Framework to the TestBench report.
4
+
5
+ ## Installation
6
+
7
+ You can install TestBench2RobotFramework via pip using the following command:
8
+
9
+ ```powershell
10
+ pip install testbench2robotframework
11
+ ```
12
+
13
+ Python 3.10 or higher is required to run this tool.
14
+
15
+ ## Remark
16
+ TestBench2RobotFramework requires TestBench version >= 4. If you're running an older version please contact the TestBench support for information on how to connect your Version of TestBench to Robot Framework. The TestBench Report can be either be exported via the TestBench Rest API with tools like the testbench-cli-reporter or directly from the client.
17
+
18
+ ## Usage
19
+
20
+ TestBench2RobotFramework supports two main use cases, which are described in more detail in the following sections:
21
+
22
+ 1. Generating Robot Framework test suites from a TestBench report.
23
+ 2. Fetching results from a Robot Framework output XML file and saving them back to a TestBench report.
24
+
25
+ ### Generating Robot Framework Test Suites
26
+ To generate Robot Framework test suites, use the `generate-tests` subcommand:
27
+
28
+ ```powershell
29
+ testbench2robotframework generate-tests TESTBENCH_REPORT
30
+ ```
31
+
32
+ This command generates a Robot Framework test suite for each test case set specified in the `TESTBENCH_REPORT`.
33
+
34
+ ![](./images/testthemen.PNG)
35
+ ![](./images/generated.PNG)
36
+
37
+ The example above demonstrates how Robot Framework test suites are generated based on the *Test Theme Tree* defined in TestBench.
38
+
39
+
40
+
41
+ #### Configuration
42
+
43
+ There are multiple configuration options available for **TestBench2RobotFramework** that can be used to customize the generated test suites. Options can be specified either via the command line, in a `pyproject.toml` file or in a `robot.toml` file.
44
+
45
+ To use options via the command line, the following syntax is used:
46
+
47
+ ```powershell
48
+ testbench2robotframework generate-tests [OPTIONS] TESTBENCH_REPORT
49
+ ```
50
+
51
+ | Option | Description |
52
+ |--------|-------------|
53
+ | `-c`, `--config PATH` | Path to a configuration file for TestBench2RobotFramework. |
54
+ | `--clean` | Deletes all files present in the output-directory before new test suites are created. |
55
+ | `-d`, `--output-directory PATH` | Directory or ZIP archive containing the generated test suites. |
56
+ | `--compound-keyword-logging` | Mode for logging compound keywords. Options: `GROUP`, `COMMENT`, or `NONE`. |
57
+ | `--fully-qualified` | Calls Robot Framework keywords by their fully qualified names in the generated test suites. |
58
+ | `--log-suite-numbering` | Enables logging of the test suite numbering. |
59
+ | `--metadata` | Add extra metadata to the settings of the generated Robot Framework test suite. Provide entries as key:value pairs, where *key* is the metadata name and *value* is the corresponding value. Values may also be Python expressions. The special variable '$tcs' gives access to the TestBench Python model of the test case set. |
60
+ | `--resource-directory PATH` | Directory containing the Robot Framework resource files. |
61
+ | `--resource-directory-regex TEXT` | Regex that can be used to identify the TestBench Subdivision that corresponds to the <resource-directory>. Resources will be imported relative to this subdivision based on the test elements structure in TestBench. |
62
+ | `--library-regex TEXT` | Regular expression used to identify TestBench subdivisions corresponding to Robot Framework libraries. |
63
+ | `--library-root TEXT` | TestBench root subdivision whose direct children correspond to Robot Framework libraries. |
64
+ | `--resource-regex TEXT` | Regular expression used to identify TestBench subdivisions corresponding to Robot Framework resources. |
65
+ | `--resource-root TEXT` | TestBench root subdivision whose direct children correspond to Robot Framework resources. |
66
+ | `--library-mapping TEXT` | Library import statement to use when a keyword from the specified TestBench subdivision is encountered. |
67
+ | `--resource-mapping TEXT` | Resource import statement to use when a keyword from the specified TestBench subdivision is encountered. |
68
+ | `--help` | Displays the help message and exits. |
69
+ | `--version` | Writes the TestBench2RobotFramework, Robot Framework and Python version to console. |
70
+
71
+
72
+ ### Saving Robot Framework Results
73
+
74
+ Saving the results requires a Robot Framework output XML file, along with the original TestBench report from which the test suites were generated.
75
+
76
+ Use the following command:
77
+
78
+ ```powershell
79
+ testbench2robotframework fetch-results [OPTIONS] ROBOT_RESULT TESTBENCH_REPORT
80
+ ```
81
+
82
+ | Option | Description |
83
+ |--------|-------------|
84
+ | `-c`, `--config PATH` | Path to a configuration file for TestBench2RobotFramework. |
85
+ | `-d`, `--output-directory PATH` | Path to the directory or ZIP file where the updated TestBench JSON report (with results) should be saved. |
86
+ | `--help` | Displays the help message and exits. |
87
+
88
+
89
+
90
+ ### Using pyproject.toml
91
+ All CLI options available for ``testbench2robotframework`` can also be defined in your ``pyproject.toml`` file, ``robot.toml``, or a workspace-local ``.robot.toml``. This offers a convenient way to store and reuse configuration settings, particularly in larger projects or automated environments.
92
+
93
+ #### Example
94
+ ```toml
95
+ [tool.testbench2robotframework]
96
+ library-regex = ['(?:.*\.)?(?P<resourceName>[^.]+?)\s*\[Robot-Library\].*']
97
+ resource-regex = ['(?:.*\.)?(?P<resourceName>[^.]+?)\s*\[Robot-Resource\].*']
98
+ library-root = ["RF", "RF-Library"]
99
+ resource-root = ["RF-Resource"]
100
+ fully-qualified = false
101
+ output-directory = "{root}/Generated"
102
+ log-suite-numbering = false
103
+ clean = true
104
+ compound-keyword-logging = GROUP
105
+ resource-directory = "{root}/Resources"
106
+ resource-directory-regex = ".*\\[Robot-Resources\\].*"
107
+ reference-behaviour = "ATTACHMENT"
108
+ attachment-conflict-behaviour = "USE_EXISTING"
109
+
110
+ [tool.testbench2robotframework.library-mapping]
111
+ SeleniumLibrary = "SeleniumLibrary timeout=10 implicit_wait=1 run_on_failure=Capture Page Screenshot"
112
+ SuperRemoteLibrary = "Remote http://127.0.0.1:8270 WITH NAME SuperRemoteLibrary"
113
+
114
+ [tool.testbench2robotframework.resource-mapping]
115
+ MyKeywords = "{root}/../MyKeywords.resource"
116
+ MyOtherKeywords = "{resourceDirectory}/subdir/MyOtherKeywords.resource"
117
+
118
+ [tool.testbench2robotframework.forced-import]
119
+ libraries = ["test.py"]
120
+ resources = []
121
+ variables = []
122
+
123
+ [tool.testbench2robotframework.console-logging]
124
+ logLevel = "INFO"
125
+ logFormat = "%(levelname)s: %(message)s"
126
+
127
+ [tool.testbench2robotframework.file-logging]
128
+ logLevel = "DEBUG"
129
+ logFormat = "%(asctime)s - %(filename)s:%(lineno)d - %(levelname)8s - %(message)s"
130
+ fileName = "testbench2robotframework.log"
131
+ ```
@@ -3,7 +3,7 @@ from pathlib import Path
3
3
 
4
4
  data = {
5
5
  # "rfLibraryRoots": [
6
- # "Interactions",
6
+ # "Keywords",
7
7
  # "RF-Library"
8
8
  # ],
9
9
  # "rfResourceRoots": [
@@ -15,7 +15,7 @@ data = {
15
15
  # "logSuiteNumbering": True,
16
16
  # "resourceDirectory": "{root}/Resources",
17
17
  # "clearGenerationDirectory": True,
18
- # "logCompoundInteractions": True,
18
+ # "logCompoundKeywords": True,
19
19
  # "subdivisionsMapping": {
20
20
  # "libraries": {
21
21
  # "SeleniumLibrary": "SeleniumLibrary timeout=10 implicit_wait=1 run_on_failure=Capture Page Screenshot",
@@ -17,4 +17,4 @@ suites and enhancing the TestBench report with execution results from Robot Fram
17
17
 
18
18
  from .testbench2robotframework import testbench2robotframework # noqa: F401
19
19
 
20
- __version__ = "0.9.0a1"
20
+ __version__ = "0.9.1a2"
@@ -85,9 +85,9 @@ def testbench2robotframework_cli():
85
85
  help="Directory or ZIP archive containing the generated test suites.",
86
86
  )
87
87
  @click.option(
88
- "--compound-interaction-logging",
88
+ "--compound-keyword-logging",
89
89
  type=click.Choice(["GROUP", "COMMENT", "NONE"], case_sensitive=False),
90
- help="Mode for logging compound interactions.",
90
+ help="Mode for logging compound keywords.",
91
91
  )
92
92
  @click.option(
93
93
  "--log-suite-numbering", is_flag=True, help="Enables logging of the test suite numbering."
@@ -159,7 +159,7 @@ def testbench2robotframework_cli():
159
159
  @click.argument("testbench-report", type=click.Path(path_type=Path))
160
160
  def generate_tests( # noqa: PLR0913
161
161
  clean: bool,
162
- compound_interaction_logging: str,
162
+ compound_keyword_logging: str,
163
163
  config: Path,
164
164
  fully_qualified: bool,
165
165
  library_regex: tuple[str],
@@ -198,8 +198,8 @@ def generate_tests( # noqa: PLR0913
198
198
  else:
199
199
  configuration["log-suite-numbering"] = configuration.get("log-suite-numbering", False)
200
200
  configuration["metadata"] = metadata or configuration.get("metadata", {})
201
- configuration["compound-interaction-logging"] = (
202
- compound_interaction_logging or configuration.get("compound-interaction-logging", "GROUP")
201
+ configuration["compound-keyword-logging"] = (
202
+ compound_keyword_logging or configuration.get("compound-keyword-logging", "GROUP")
203
203
  )
204
204
  configuration["resource-directory"] = (
205
205
  resource_directory.as_posix()
@@ -163,7 +163,7 @@ class LoggingConfig:
163
163
  )
164
164
 
165
165
 
166
- class CompoundInteractionLogging(StrEnum):
166
+ class CompoundKeywordLogging(StrEnum):
167
167
  GROUP = "GROUP"
168
168
  COMMENT = "COMMENT"
169
169
  NONE = "NONE"
@@ -186,7 +186,7 @@ class AttachmentConflictBehaviour(StrEnum):
186
186
  class Configuration:
187
187
  attachmentConflictBehaviour: AttachmentConflictBehaviour
188
188
  clean: bool
189
- compound_interaction_logging: CompoundInteractionLogging
189
+ compound_keyword_logging: CompoundKeywordLogging
190
190
  forced_import: ForcedImport
191
191
  fully_qualified: bool
192
192
  library_regex: list[str]
@@ -229,7 +229,7 @@ class Configuration:
229
229
  }
230
230
  ),
231
231
  metadata=dictionary.get("metadata", {}),
232
- compound_interaction_logging=CompoundInteractionLogging(dictionary.get("compound-interaction-logging", "GROUP").upper()),
232
+ compound_keyword_logging=CompoundKeywordLogging(dictionary.get("compound-keyword-logging", "GROUP").upper()),
233
233
  resource_directory=dictionary.get("resource-directory", "").replace(
234
234
  "\\", "/"
235
235
  ),
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: openapi.yml
3
- # timestamp: 2025-11-07T10:20:17+00:00
3
+ # timestamp: 2025-11-24T08:45:38+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -118,7 +118,7 @@ class VerdictStatus(Enum):
118
118
  Pass = 'Pass'
119
119
 
120
120
 
121
- class InteractionVerdict(Enum):
121
+ class KeywordVerdict(Enum):
122
122
  Pass = 'Pass'
123
123
  Fail = 'Fail'
124
124
  Skipped = 'Skipped'
@@ -134,12 +134,12 @@ class SequencePhase(Enum):
134
134
  Teardown = 'Teardown'
135
135
 
136
136
 
137
- class InteractionCallType(Enum):
137
+ class KeywordCallType(Enum):
138
138
  Flow = 'Flow'
139
139
  Check = 'Check'
140
140
 
141
141
 
142
- class InteractionType(Enum):
142
+ class KeywordType(Enum):
143
143
  Atomic = 'Atomic'
144
144
  Compound = 'Compound'
145
145
  Textual = 'Textual'
@@ -615,7 +615,7 @@ class UDFEnumerationValue:
615
615
 
616
616
 
617
617
  @dataclass
618
- class Keyword:
618
+ class Tag:
619
619
  key: str
620
620
  name: str
621
621
  isVariantsMarker: bool
@@ -735,7 +735,7 @@ class TestCaseSetSpecificationSummary:
735
735
  preConditions: List[ConditionSummary]
736
736
  postConditions: List[ConditionSummary]
737
737
  udfs: List[UserDefinedField]
738
- keywords: List[Keyword]
738
+ tags: List[Tag]
739
739
  references: List[str]
740
740
  requirements: List[RequirementReference]
741
741
  responsible: Optional[UserReference] = None
@@ -748,7 +748,7 @@ class TestCaseSpecificationDetails:
748
748
  key: str
749
749
  comments: str
750
750
  udfs: List[UserDefinedField]
751
- keywords: List[Keyword]
751
+ tags: List[Tag]
752
752
  requirements: List[RequirementReference]
753
753
  version: Optional[str] = None
754
754
 
@@ -761,7 +761,7 @@ class TestThemeSpecification:
761
761
  status: SpecStatus
762
762
  priority: Priority
763
763
  udfs: List[UserDefinedField]
764
- keywords: List[Keyword]
764
+ tags: List[Tag]
765
765
  requirements: List[RequirementReference]
766
766
  references: List[str]
767
767
  dueDate: Optional[str] = None
@@ -774,7 +774,7 @@ class TestCaseSetExecutionSummary:
774
774
  key: str
775
775
  comments: str
776
776
  udfs: List[UserDefinedField]
777
- keywords: List[Keyword]
777
+ tags: List[Tag]
778
778
 
779
779
 
780
780
  @dataclass
@@ -815,7 +815,7 @@ class TestCaseExecutionDetails:
815
815
  comments: str
816
816
  defects: List[str]
817
817
  udfs: List[UserDefinedField]
818
- keywords: List[Keyword]
818
+ tags: List[Tag]
819
819
  references: List[str]
820
820
  version: Optional[str] = None
821
821
  tester: Optional[UserReference] = None
@@ -1116,7 +1116,7 @@ class TestThemeExecution:
1116
1116
  execStatus: ExecStatus
1117
1117
  verdict: VerdictStatus
1118
1118
  udfs: List[UserDefinedField]
1119
- keywords: List[Keyword]
1119
+ tags: List[Tag]
1120
1120
  references: List[str]
1121
1121
  comments: Optional[str] = None
1122
1122
  responsible: Optional[UserReference] = None
@@ -1332,8 +1332,8 @@ class TestCaseSetExecutionForImport:
1332
1332
 
1333
1333
 
1334
1334
  @dataclass
1335
- class InteractionCallExecution:
1336
- verdict: InteractionVerdict
1335
+ class KeywordCallExecution:
1336
+ verdict: KeywordVerdict
1337
1337
  duration: int
1338
1338
  currentUser: UserReference
1339
1339
  comments: str
@@ -1404,7 +1404,7 @@ class DefaultValue:
1404
1404
 
1405
1405
 
1406
1406
  @dataclass
1407
- class InteractionParameterForInsert:
1407
+ class KeywordParameterForInsert:
1408
1408
  name: str
1409
1409
  dataTypeKey: Optional[str] = None
1410
1410
  evaluationType: Optional[ParameterEvaluationType] = None
@@ -1646,12 +1646,12 @@ class ImageInfo:
1646
1646
 
1647
1647
 
1648
1648
  @dataclass
1649
- class InteractionDetails:
1649
+ class KeywordDetails:
1650
1650
  key: str
1651
1651
  name: str
1652
1652
  uniqueID: str
1653
1653
  status: TestElementStatus
1654
- defaultCallType: InteractionCallType
1654
+ defaultCallType: KeywordCallType
1655
1655
  description: str
1656
1656
  path: str
1657
1657
  parameters: List[ParameterDetails]
@@ -1734,44 +1734,44 @@ class RichTextInfo:
1734
1734
 
1735
1735
 
1736
1736
  @dataclass
1737
- class InteractionCallSpecification:
1737
+ class KeywordCallSpecification:
1738
1738
  key: str
1739
1739
  name: str
1740
1740
  sequencePhase: SequencePhase
1741
- callType: InteractionCallType
1741
+ callType: KeywordCallType
1742
1742
  comments: str
1743
1743
  callParameters: List[ParameterSummary]
1744
- interactionType: Optional[InteractionType] = None
1744
+ keywordType: Optional[KeywordType] = None
1745
1745
  description: Optional[str] = None
1746
- interactionKey: Optional[str] = None
1747
- callingInteractionKey: Optional[str] = None
1746
+ keywordKey: Optional[str] = None
1747
+ callingKeywordKey: Optional[str] = None
1748
1748
 
1749
1749
 
1750
1750
  @dataclass
1751
- class InteractionCall:
1751
+ class KeywordCall:
1752
1752
  sequenceID: str
1753
1753
  numbering: str
1754
- spec: InteractionCallSpecification
1754
+ spec: KeywordCallSpecification
1755
1755
  parentID: Optional[str] = None
1756
- exec: Optional[InteractionCallExecution] = None
1756
+ exec: Optional[KeywordCallExecution] = None
1757
1757
 
1758
1758
 
1759
1759
  @dataclass
1760
- class InteractionForInsert:
1760
+ class KeywordForInsert:
1761
1761
  parentKey: str
1762
1762
  name: str
1763
- parameters: List[InteractionParameterForInsert]
1763
+ parameters: List[KeywordParameterForInsert]
1764
1764
  uid: Optional[str] = None
1765
1765
  description: Optional[RichTextInfo] = None
1766
1766
  advancedContent: Optional[AdvancedContent] = None
1767
- callType: Optional[InteractionCallType] = None
1767
+ callType: Optional[KeywordCallType] = None
1768
1768
 
1769
1769
 
1770
1770
  @dataclass
1771
- class InteractionDetailsForUpdate:
1771
+ class KeywordDetailsForUpdate:
1772
1772
  name: Optional[str] = None
1773
1773
  description: Optional[RichTextInfo] = None
1774
- callType: Optional[InteractionCallType] = None
1774
+ callType: Optional[KeywordCallType] = None
1775
1775
  locker: Optional[OptionalUser] = None
1776
1776
  advancedContent: Optional[OptionalAdvancedContent] = None
1777
1777
 
@@ -1828,9 +1828,9 @@ class TestCaseSetDetails:
1828
1828
  name: str
1829
1829
  spec: TestCaseSetSpecificationSummary
1830
1830
  testCases: List[TestCaseSummary]
1831
- testSequence: List[InteractionCall]
1831
+ testSequence: List[KeywordCall]
1832
1832
  parameters: List[ParameterDetails]
1833
- interactions: List[InteractionDetails]
1833
+ keywords: List[KeywordDetails]
1834
1834
  exec: Optional[TestCaseSetExecutionSummary] = None
1835
1835
 
1836
1836
 
@@ -1838,9 +1838,9 @@ class TestCaseSetDetails:
1838
1838
  class TestCaseDetails:
1839
1839
  uniqueID: str
1840
1840
  spec: TestCaseSpecificationDetails
1841
- testSequence: List[InteractionCall]
1841
+ testSequence: List[KeywordCall]
1842
1842
  parameters: List[ParameterSummary]
1843
- interactions: List[InteractionDetails]
1843
+ keywords: List[KeywordDetails]
1844
1844
  exec: Optional[TestCaseExecutionDetails] = None
1845
1845
  origin: Optional[TestCaseDetailsOrigin] = None
1846
1846