testbench2robotframework 0.6.1__tar.gz → 0.8.0a1__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 (102) hide show
  1. testbench2robotframework-0.8.0a1/.gitignore +156 -0
  2. testbench2robotframework-0.8.0a1/CreatePiPWheel.bat +7 -0
  3. testbench2robotframework-0.8.0a1/CreatePiPWheel.sh +5 -0
  4. testbench2robotframework-0.8.0a1/DEVELOPMENT.md +25 -0
  5. testbench2robotframework-0.8.0a1/ExampleConfiguration/json_config.json +39 -0
  6. testbench2robotframework-0.8.0a1/ExampleConfiguration/pyproject_example.toml +37 -0
  7. testbench2robotframework-0.8.0a1/ExampleConfiguration/toml_config.toml +37 -0
  8. testbench2robotframework-0.8.0a1/MANIFEST.in +5 -0
  9. testbench2robotframework-0.8.0a1/PKG-INFO +311 -0
  10. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/README.md +10 -15
  11. testbench2robotframework-0.8.0a1/atest/json_config_tests/1_tfs.robot +25 -0
  12. testbench2robotframework-0.8.0a1/atest/robot/libs/json_config.py +46 -0
  13. testbench2robotframework-0.8.0a1/atest/robot/libs/pyproject_config.py +13 -0
  14. testbench2robotframework-0.8.0a1/atest/robot/resources/file_management.resource +16 -0
  15. testbench2robotframework-0.8.0a1/atest/robot/resources/testbench2robotframework_cli.resource +24 -0
  16. testbench2robotframework-0.8.0a1/atest/robot/rf_tests/cli_interface/write/json_config.robot +38 -0
  17. testbench2robotframework-0.8.0a1/atest/robot/rf_tests/cli_interface/write/no_config_argument.robot +23 -0
  18. testbench2robotframework-0.8.0a1/atest/robot/rf_tests/cli_interface/write/toml_config.robot +37 -0
  19. testbench2robotframework-0.8.0a1/create_json_schema.py +41 -0
  20. testbench2robotframework-0.8.0a1/oldModel.py +1153 -0
  21. testbench2robotframework-0.8.0a1/pydantic_model.py +469 -0
  22. testbench2robotframework-0.8.0a1/pyproject.toml +175 -0
  23. testbench2robotframework-0.8.0a1/requirements.txt +140 -0
  24. testbench2robotframework-0.8.0a1/robot.toml +6 -0
  25. testbench2robotframework-0.8.0a1/tasks.py +29 -0
  26. testbench2robotframework-0.8.0a1/testbench-tools.zip +0 -0
  27. testbench2robotframework-0.8.0a1/testbench2robotframework/__init__.py +20 -0
  28. testbench2robotframework-0.6.1/testbench2robotframework/__init__.py → testbench2robotframework-0.8.0a1/testbench2robotframework/__main__.py +4 -2
  29. testbench2robotframework-0.8.0a1/testbench2robotframework/cli.py +226 -0
  30. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/testbench2robotframework/config.py +82 -42
  31. testbench2robotframework-0.8.0a1/testbench2robotframework/html_parser.py +20 -0
  32. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/testbench2robotframework/json_reader.py +48 -28
  33. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/testbench2robotframework/json_writer.py +18 -4
  34. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/testbench2robotframework/log.py +3 -1
  35. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/testbench2robotframework/model.py +321 -140
  36. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/testbench2robotframework/result_writer.py +197 -103
  37. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/testbench2robotframework/robotframework2testbench.py +3 -3
  38. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/testbench2robotframework/testbench2rf.py +202 -123
  39. testbench2robotframework-0.8.0a1/testbench2robotframework/testbench2robotframework.py +46 -0
  40. testbench2robotframework-0.8.0a1/testbench2robotframework/testsuite_write.py +56 -0
  41. testbench2robotframework-0.8.0a1/testbench2robotframework/utils.py +135 -0
  42. testbench2robotframework-0.6.1/CreatePiPWheel.bat +0 -8
  43. testbench2robotframework-0.6.1/CreatePiPWheel.sh +0 -7
  44. testbench2robotframework-0.6.1/DEVELOPMENT.md +0 -103
  45. testbench2robotframework-0.6.1/MANIFEST.in +0 -13
  46. testbench2robotframework-0.6.1/PKG-INFO +0 -302
  47. testbench2robotframework-0.6.1/config.json +0 -41
  48. testbench2robotframework-0.6.1/pyproject.toml +0 -123
  49. testbench2robotframework-0.6.1/requirements.txt +0 -169
  50. testbench2robotframework-0.6.1/setup.cfg +0 -48
  51. testbench2robotframework-0.6.1/setup.py +0 -4
  52. testbench2robotframework-0.6.1/testbench2robotframework/__main__.py +0 -53
  53. testbench2robotframework-0.6.1/testbench2robotframework/testbench2robotframework.py +0 -32
  54. testbench2robotframework-0.6.1/testbench2robotframework/testsuite_write.py +0 -51
  55. testbench2robotframework-0.6.1/testbench2robotframework/utils.py +0 -183
  56. testbench2robotframework-0.6.1/testbench2robotframework.egg-info/PKG-INFO +0 -302
  57. testbench2robotframework-0.6.1/testbench2robotframework.egg-info/SOURCES.txt +0 -70
  58. testbench2robotframework-0.6.1/testbench2robotframework.egg-info/dependency_links.txt +0 -1
  59. testbench2robotframework-0.6.1/testbench2robotframework.egg-info/entry_points.txt +0 -4
  60. testbench2robotframework-0.6.1/testbench2robotframework.egg-info/not-zip-safe +0 -1
  61. testbench2robotframework-0.6.1/testbench2robotframework.egg-info/requires.txt +0 -16
  62. testbench2robotframework-0.6.1/testbench2robotframework.egg-info/top_level.txt +0 -1
  63. testbench2robotframework-0.6.1/tests/test_setup/test_data/config.json +0 -36
  64. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/TestThemeTree.json +0 -258
  65. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2184-PC-21637.json +0 -691
  66. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2184.json +0 -41
  67. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2185-PC-21639.json +0 -714
  68. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2185.json +0 -41
  69. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2231-PC-21643.json +0 -714
  70. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2231.json +0 -41
  71. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2232-PC-21645.json +0 -714
  72. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2232.json +0 -41
  73. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2233-PC-21647.json +0 -272
  74. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2233-PC-21649.json +0 -272
  75. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2233.json +0 -57
  76. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2241-PC-21667.json +0 -434
  77. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2241-PC-21668.json +0 -434
  78. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2241.json +0 -57
  79. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2242-PC-21671.json +0 -401
  80. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2242.json +0 -41
  81. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2243-PC-21673.json +0 -95
  82. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2243.json +0 -41
  83. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2244-PC-21675.json +0 -128
  84. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2244.json +0 -41
  85. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2261-PC-21683.json +0 -194
  86. testbench2robotframework-0.6.1/tests/test_setup/test_data/json-report/itba-TC-2261.json +0 -41
  87. testbench2robotframework-0.6.1/tests/test_setup/test_setup_name.py +0 -63
  88. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/LICENSE +0 -0
  89. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/images/LibrarySubdivision.PNG +0 -0
  90. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/images/Unbenannt.PNG +0 -0
  91. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/images/generated.png +0 -0
  92. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/images/libraries.PNG +0 -0
  93. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/images/resources.PNG +0 -0
  94. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/images/rfLibraryRootsTestBench.PNG +0 -0
  95. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/images/testbench_rfLibraryRegex.PNG +0 -0
  96. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/images/testbench_rfResourceRegex.PNG +0 -0
  97. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/images/testthemen.PNG +0 -0
  98. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/tests/test_data/configurations/invalid_config.json +0 -0
  99. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/tests/test_data/configurations/valid_config.json +0 -0
  100. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/tests/test_missing_files.py +0 -0
  101. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/tests/test_robot_files_should_not_contain_invalid_characters.py +0 -0
  102. {testbench2robotframework-0.6.1 → testbench2robotframework-0.8.0a1}/tests/test_zip_file_generation.py +0 -0
@@ -0,0 +1,156 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+ ignore/
9
+ .ruff_cache/
10
+ tests/
11
+
12
+ # Distribution / packaging
13
+ .Python
14
+ build/
15
+ develop-eggs/
16
+ dist/
17
+ downloads/
18
+ eggs/
19
+ .eggs/
20
+ lib/
21
+ lib64/
22
+ parts/
23
+ sdist/
24
+ var/
25
+ wheels/
26
+ pip-wheel-metadata/
27
+ share/python-wheels/
28
+ *.egg-info/
29
+ .installed.cfg
30
+ *.egg
31
+ MANIFEST
32
+
33
+ # PyInstaller
34
+ # Usually these files are written by a python script from a template
35
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
36
+ *.manifest
37
+ *.spec
38
+
39
+ # Installer logs
40
+ pip-log.txt
41
+ pip-delete-this-directory.txt
42
+
43
+ # Unit test / coverage reports
44
+ htmlcov/
45
+ .tox/
46
+ .nox/
47
+ .coverage
48
+ .coverage.*
49
+ .cache
50
+ nosetests.xml
51
+ coverage.xml
52
+ *.cover
53
+ *.py,cover
54
+ .hypothesis/
55
+ .pytest_cache/
56
+
57
+ # Translations
58
+ *.mo
59
+ *.pot
60
+
61
+ # Django stuff:
62
+ *.log
63
+ local_settings.py
64
+ db.sqlite3
65
+ db.sqlite3-journal
66
+
67
+ # Flask stuff:
68
+ instance/
69
+ .webassets-cache
70
+
71
+ # Scrapy stuff:
72
+ .scrapy
73
+
74
+ # Sphinx documentation
75
+ docs/_build/
76
+
77
+ # PyBuilder
78
+ target/
79
+
80
+ # Jupyter Notebook
81
+ .ipynb_checkpoints
82
+
83
+ # IPython
84
+ profile_default/
85
+ ipython_config.py
86
+
87
+ # pyenv
88
+ .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
98
+ __pypackages__/
99
+
100
+ # Celery stuff
101
+ celerybeat-schedule
102
+ celerybeat.pid
103
+
104
+ # SageMath parsed files
105
+ *.sage.py
106
+
107
+ # Environments
108
+ .env
109
+ .venv
110
+ env/
111
+ venv/
112
+ ENV/
113
+ env.bak/
114
+ venv.bak/
115
+
116
+ # Spyder project settings
117
+ .spyderproject
118
+ .spyproject
119
+
120
+ # Rope project settings
121
+ .ropeproject
122
+
123
+ # mkdocs documentation
124
+ /site
125
+
126
+ # mypy
127
+ .mypy_cache/
128
+ .dmypy.json
129
+ dmypy.json
130
+
131
+ # Pyre type checker
132
+ .pyre/
133
+ *.egg-info
134
+ __pycache__
135
+ build
136
+ .vscode
137
+ json_report
138
+ testbench2robotframework.log*
139
+ result_example
140
+ Generated/
141
+ TestBenchExport
142
+ .idea
143
+ *.zip
144
+ json-report_out
145
+ report_out
146
+ dist
147
+ IssueDebugging/
148
+ MyResources/
149
+ log.html
150
+ output.xml
151
+ playwright-log.txt
152
+ results/
153
+ report.html
154
+ ExampleConfiguration/toml_config_minimal.toml
155
+ ExampleConfiguration/toml_new_names.toml
156
+ README_new.md
@@ -0,0 +1,7 @@
1
+ check-manifest --update
2
+ pause
3
+ python -m build
4
+ pause
5
+ twine check dist\*
6
+ pause
7
+ twine upload dist/*
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ check-manifest --update
3
+ python -m build
4
+ twine check dist\*
5
+ twine upload dist/*
@@ -0,0 +1,25 @@
1
+ # Contributing
2
+ ## Setting up project for the first time
3
+ 1. Write all dependencies into pyproject.toml
4
+ 2. Create venv (python -m venv .venv) and activate it (".venv\scripts\activate" or "source .venv/bin/activate")
5
+ 3. Update pip (python -m pip install -U pip)
6
+ 3. Install pip-tools (pip install pip-tools)
7
+ 4. Update/Create `requirements.txt` (when dependencies have been updated in pyproject.toml)
8
+ - with Development dependencies
9
+ > pip-compile --extra dev
10
+ - or only with Runtime dependencies
11
+ > pip-compile
12
+ 5. Install dependencies (pip install -U -r requirements.txt)
13
+ 6. Install project into local venv (pip install -e .[dev])
14
+
15
+ ## Creating whl and publish
16
+ 1. Install 'setuptools' (pip install setuptools)
17
+ 2. Run CreatePipWheel Script
18
+
19
+
20
+ ## Generate documentation in Word format
21
+ [Install Pandoc](https://pandoc.org/installing.html)
22
+
23
+ ```shell
24
+ pandoc -s README.md -M title="imbus TestBench - Robot Code Generator" -M subtitle=Benutzerhandbuch -M toc-title=Inhaltsverzeichnis --toc -o Benutzerhandbuch.docx
25
+ ```
@@ -0,0 +1,39 @@
1
+ {
2
+ "library-root": [
3
+ "Interactions",
4
+ "RF-Library"
5
+ ],
6
+ "resource-root": [
7
+ "RF-Resource"
8
+ ],
9
+ "fully-qualified": false,
10
+ "output-directory": "{root}/Generated",
11
+ "log-suite-numbering": true,
12
+ "resource-directory": "{root}/Resources",
13
+ "clean": true,
14
+ "compound-interaction-logging": "GROUP",
15
+ "library-mapping": {
16
+ "SeleniumLibrary": "SeleniumLibrary timeout=10 implicit_wait=1 run_on_failure=Capture Page Screenshot",
17
+ "SuperRemoteLibrary": "Remote http://127.0.0.1:8270 WITH NAME SuperRemoteLibrary"
18
+ },
19
+ "resource-mapping": {
20
+ "MyKeywords": "{root}/../MyKeywords.resource",
21
+ "MyOtherKeywords": "{resourceDirectory}/subdir/MyOtherKeywords.resource"
22
+ },
23
+ "forcedImport": {
24
+ "libraries": [
25
+ ],
26
+ "resources":
27
+ [
28
+ ],
29
+ "variables": [
30
+ ]
31
+ },
32
+ "testCaseSplitPathRegEx": "^StopWithRestart\\..*",
33
+ "console-logging": {
34
+ "logLevel": "debug"
35
+ },
36
+ "file-logging": {
37
+ "logLevel": "info"
38
+ }
39
+ }
@@ -0,0 +1,37 @@
1
+ [tool.testbench2robotframework]
2
+ library-regex = ['(?:.*\.)?(?P<resourceName>[^.]+?)\s*\[Robot-Library\].*']
3
+ resource-regex = ['(?:.*\.)?(?P<resourceName>[^.]+?)\s*\[Robot-Resource\].*']
4
+ library-root = ["RF", "RF-Library"]
5
+ resource-root = ["RF-Resource"]
6
+ fully-qualified = false
7
+ output-directory = "{root}/Generated"
8
+ log-suite-numbering = false
9
+ clean = true
10
+ compound-interaction-logging = true
11
+ resource-directory = "{root}/Resources"
12
+ testcase-split-regex = ".*StopWithRestart.*"
13
+ phase-pattern = "{testcase} : Phase {index}/{length}"
14
+ reference-behaviour = "ATTACHMENT"
15
+ attachment-conflict-behaviour = "USE_EXISTING"
16
+
17
+ [tool.testbench2robotframework.library-mapping]
18
+ SeleniumLibrary = "SeleniumLibrary timeout=10 implicit_wait=1 run_on_failure=Capture Page Screenshot"
19
+ SuperRemoteLibrary = "Remote http://127.0.0.1:8270 WITH NAME SuperRemoteLibrary"
20
+
21
+ [tool.testbench2robotframework.resource-mapping]
22
+ MyKeywords = "{root}/../MyKeywords.resource"
23
+ MyOtherKeywords = "{resourceDirectory}/subdir/MyOtherKeywords.resource"
24
+
25
+ [tool.testbench2robotframework.forced-import]
26
+ libraries = ["test.py"]
27
+ resources = []
28
+ variables = []
29
+
30
+ [tool.testbench2robotframework.console-logging]
31
+ logLevel = "INFO"
32
+ logFormat = "%(levelname)s: %(message)s"
33
+
34
+ [tool.testbench2robotframework.file-logging]
35
+ logLevel = "DEBUG"
36
+ logFormat = "%(asctime)s - %(filename)s:%(lineno)d - %(levelname)8s - %(message)s"
37
+ fileName = "testbench2robotframework.log"
@@ -0,0 +1,37 @@
1
+ [tool.testbench2robotframework]
2
+ library-regex = ['(?:.*\.)?(?P<resourceName>[^.]+?)\s*\[Robot-Library\].*']
3
+ resource-regex = ['(?:.*\.)?(?P<resourceName>[^.]+?)\s*\[Robot-Resource\].*']
4
+ library-root = ["RF", "RF-Library"]
5
+ resource-root = ["RF-Resource"]
6
+ fully-qualified = false
7
+ output-directory = "{root}/Generated"
8
+ log-suite-numbering = false
9
+ clean = true
10
+ compound-interaction-logging = true
11
+ resource-directory = "{root}/Resources"
12
+ testcase-split-regex = ".*StopWithRestart.*"
13
+ phase-pattern = "{testcase} : Phase {index}/{length}"
14
+ reference-behaviour = "ATTACHMENT"
15
+ attachment-conflict-behaviour = "USE_EXISTING"
16
+
17
+ [tool.testbench2robotframework.library-mapping]
18
+ SeleniumLibrary = "SeleniumLibrary timeout=10 implicit_wait=1 run_on_failure=Capture Page Screenshot"
19
+ SuperRemoteLibrary = "Remote http://127.0.0.1:8270 WITH NAME SuperRemoteLibrary"
20
+
21
+ [tool.testbench2robotframework.resource-mapping]
22
+ MyKeywords = "{root}/../MyKeywords.resource"
23
+ MyOtherKeywords = "{resourceDirectory}/subdir/MyOtherKeywords.resource"
24
+
25
+ [tool.testbench2robotframework.forced-import]
26
+ libraries = ["test.py"]
27
+ resources = []
28
+ variables = []
29
+
30
+ [tool.testbench2robotframework.console-logging]
31
+ logLevel = "INFO"
32
+ logFormat = "%(levelname)s: %(message)s"
33
+
34
+ [tool.testbench2robotframework.file-logging]
35
+ logLevel = "DEBUG"
36
+ logFormat = "%(asctime)s - %(filename)s:%(lineno)d - %(levelname)8s - %(message)s"
37
+ fileName = "testbench2robotframework.log"
@@ -0,0 +1,5 @@
1
+ include *.py
2
+ include *.md
3
+ include *.txt
4
+ recursive-include images *.PNG
5
+ recursive-include images *.png
@@ -0,0 +1,311 @@
1
+ Metadata-Version: 2.4
2
+ Name: testbench2robotframework
3
+ Version: 0.8.0a1
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.9
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
+ # Installation des Robot Code Generators
28
+
29
+ Voraussetzung für die Installation der Software ist eine vorhandene Python Installation. Die minimal benötigte Version ist Python 3.9. Zum Überprüfen, ob die korrekte Python Version installiert ist, kann der folgende Kommandozeilen Befehl verwendet werden:
30
+
31
+ ```powershell
32
+ python --version
33
+ ```
34
+
35
+ Die Installation des Code Generators erfolgt aus dem Python Package Index.
36
+ ```powershell
37
+ pip install testbench2robotframework
38
+ ```
39
+
40
+ Wenn die Installation durchgeführt wurde, liefert folgender Befehl die aktuell installierte Version:
41
+
42
+ ```powershell
43
+ tb2robot --version
44
+ ```
45
+ ## Anmerkung
46
+ Im aktuellen TestBench-Release wird der JSON-Bericht noch nicht direkt vom Server generiert. Zur Generierung des JSON-Berichts aus einem TestBench XML-Bericht können die im Repository hinterlegten TestBench-Tools verwendet werden: [Download TestBench-Tools](https://github.com/imbus/testbench2robotframework/raw/main/testbench-tools.zip)
47
+
48
+ # Verwendung des Robot Code Generators
49
+ Nach erfolgreicher Installation des Robot Code Generators kann dieser durch den Befehl ``tb2robot`` oder ``testbench2robotframework`` ausgeführt werden.
50
+
51
+ Der Befehl ``tb2robot --help
52
+ `` zeigt, wie aus einem TestBench JSON Report, Robot Framework Testsuites generiert werden können und wie die Durchführungsergebnisse wieder eingelesen werden können.
53
+
54
+ Zum Generieren von Robot Framework Testsuites wird der Subcommand ``write`` mit zwei Parametern aufgerufen:
55
+
56
+ - Dem Pfad zu einer JSON Datei, die als Konfigurationsdatei für die Ausgabe des Generators dient. Wird diese beim Aufruf des Code Generators nicht übergeben, so wird automatisch eine Konfigurationsdatei mit dem Namen ``config.json`` generiert.
57
+
58
+ - Dem Pfad zu den TestBech JSON Report Dateien. Diese können in einem Verzeichnis oder in einer ZIP Datei liegen.
59
+
60
+ Der folgende Aufruf demonstriert die Verwendung anhand eines Beispiels:
61
+ ```powershell
62
+ tb2robot write -c .\Konfigurationsdatei.json E:\TestBench\report.zip
63
+ ```
64
+ Das folgende Beispiel zeigt, wie auf diese Weise der Testthemenbaum der TestBench in Robot Framework Testsuites konvertiert wird.
65
+
66
+ ![](./images/testthemen.PNG)
67
+ ![](./images/generated.PNG)
68
+
69
+ Beispiel für die Generierung von Robot Framework Testsuites aus dem Testthemenbaum der TestBench. Für jedes Testthema wird ein Verzeichnis erstellt. Dieses Verzeichnis enthält eine ``__init__.robot`` Datei mit Informationen über das Testthema. Außerdem wird für jeden Testfallsatz eine Robot Framework Testsuite erzeugt, die die eigentlichen Testfälle enthält.
70
+
71
+ Nach Ausführung der Robotframework Test Suites können die Ergebnisse zurück in den Json Report der Tesbench geschrieben werden.
72
+ Zu diesem Zweck wird der Subcommand ``read`` verwendet, der eine XML-Ergebnisdatei liest und die Ergebnisse in die JSON-Dateien schreibt.
73
+
74
+ - Den Pfad zu einer Robot Framework XML-Ergebnisdatei, aus der die Ergebnisse der Testdurchführung gelesen werden.
75
+
76
+ - Den Pfad zu einem Verzeichnis oder einer ZIP Datei in der die Ergebnisse gespeichert werden sollen. Dies ist ein optionaler Parameter. Wird der Parameter nicht übergeben, so wird der übergebene JSON Report überschrieben.
77
+
78
+ - Den Pfad zu den TestBech JSON Report Dateien (ohne Ergebnisse). Diese können in einem Verzeichnis oder in einer ZIP Datei liegen.
79
+
80
+ Der folgende Aufruf demonstriert das Lesen der Ergebnisse anhand eines Beispiels:
81
+ ```powershell
82
+ tb2robot read -o .\output.xml -r .\ReportWithResults.zip E:\TestBench\report.zip
83
+ ```
84
+
85
+ # Konfiguration der Ergebnisse
86
+ Zur Konfiguration des Ergebnisses sollte beim Aufruf des Robot Code Generators der Pfad zu einer JSON Konfigurationsdatei übergeben werden. Auf diese Weise kann beispielsweise der Pfad angegeben werden, in welchem die *.robot Dateien erzeugt werden. Die Konfigurationsdatei kann die folgenden Einstellungen enthalten:
87
+
88
+ ## rfLibraryRegex
89
+ Eine Liste von regulären Ausdrücken, mittels derer TestBench Subdivisionen als Robot Framework Bibliotheken identifiziert werden können.
90
+ Der standardmäßig eingestellte Regex findet alle Subdivisionen, deren Name auf "[Robot-Library]" enden. Wenn eine Interaktion aus einer der gefundenen Subdivisionen verwendet wird, so wird diese Subdivision in der generierten Robot Framework Testsuite als Bibliothek importiert.
91
+ Auf diese Weise führt beispielsweise die Verwendung von Interaktionen aus den folgenden TestBench Subdivisionen zum Import der ``Browser-`` und ``BuiltIn`` Bibliotheken.
92
+
93
+ ![](./images/testbench_rfLibraryRegex.PNG)
94
+
95
+ ```python
96
+ *** Settings ***
97
+ Library Browser
98
+ Library BuiltIn
99
+ ```
100
+ In der Konfigurationsdatei kann der reguläre Ausdruck abgeändert werden. Der Name, mit dem die Bibliothek, in der Robot Framework Testsuite eingebunden werden soll, muss dabei über die named group ``?P<resourceName>`` angegeben werden.
101
+ ```json
102
+ "rfLibraryRegex": [
103
+ "(?:.*\\.)?(?P<resourceName>[^.]+?)\\s*\\[Robot-Library\\].*"
104
+ ]
105
+ ```
106
+
107
+ ## rfResourceRegex
108
+ Analog zum ``rfLibraryRegex`` gibt es auch einen regulären Ausdruck, der für das Identifizieren von Subdivisionen zuständig ist, die als Robot Framework Ressourcen importiert werden sollen.
109
+ Standardmäßig werden über diesen Regex alle Subdivisionen, deren Namen auf "[Robot-Resource]" enden, als Ressourcen in den Robot Framework Testsuiten importiert.
110
+ Im folgenden Beispiel wird die Robot Framework Ressource mit dem Namen ``keywords.resource`` importiert, da die zugehörige Subdivision mit ``[Robot-Resource]`` endet.
111
+
112
+ ![](./images/testbench_rfResourceRegex.PNG)
113
+
114
+ ```python
115
+ *** Settings ***
116
+ Resource keywords.resource
117
+ ```
118
+ In der Konfigurationsdatei kann der reguläre Ausdruck abgeändert werden. Der Name, mit dem die Ressource in der Robot Framework Testsuite eingebunden werden soll, muss dabei über die named group ``?P<resourceName>`` angegeben werden.
119
+ ```json
120
+ "rfResourceRegex": [
121
+ "(?:.*\\.)?(?P<resourceName>[^.]+?)\\s*\\[Robot-Resource\\].*"
122
+ ]
123
+ ```
124
+ ## rfLibraryRoots
125
+ Eine Liste der verschiedenen TestBench Root Subdivisionen, die Robotframework Bibliotheken enthalten.
126
+ Das Verwenden einer Interaktion aus einer ``rfLibraryRoots`` Subdivision, führt dazu, dass die Subdivision der zweiten Ebene, unter welcher die verwendete Interaktion (in einer beliebiger Tiefe) zu finden ist, als Library in der Robot Framework Test Suite importiert wird.
127
+
128
+ Bibliotheken (Subdivisionen der zweiten Ebene des Testelementebaumes), die nicht in einer der Root Subdivision enthalten sind, werden als ``Unknown`` Import in der Robotdatei markiert.
129
+
130
+ Im folgenden Beispiel ist lediglich die ``RobotLibraries`` Subdivision als ``rfLibraryRoot`` vorgegeben.
131
+
132
+ ```json
133
+ "rfLibraryRoots": ["RobotLibraries"]
134
+ ```
135
+
136
+ ![Robot Framework Bibliotheken werden in der TestBench als Subdivisionen dargestellt](./images/libraries.PNG)
137
+
138
+ Dies führt dazu, dass nur die in dieser Subdivision enthaltenden Bibliotheken ``BuiltIn`` und ``OperatingSystem`` importiert werden. Die ``Process`` Bibliothek ist hingegen in einer Subdivision definiert, die nicht als ``rfLibraryRoot`` angegeben ist. Aus diesem Grund wird sie nicht importiert:
139
+
140
+ ```python
141
+ *** Settings ***
142
+ Library BuiltIn
143
+ Library OperatingSystem
144
+ # UNKNOWN Process
145
+ ```
146
+
147
+ ## rfResourceRoots
148
+ Analog zu den Bibliotheken müssen auch die Root Subdivision der Robot Framework Ressourcen Dateien in der Konfigurationsdatei angegeben werden.
149
+
150
+ Das folgende Beispiel zeigt, den Import von Subdivisionen, die nicht als ``rfResourceRoots`` angegeben sind:
151
+
152
+ ```json
153
+ "rfResourceRoots": ["RF-Resources"]
154
+ ```
155
+
156
+ ![Robot Framework Ressourcen Dateien werden in der TestBench als Subdivisionen dargestellt](./images/resources.PNG)
157
+
158
+ Da ``UnknownResources`` nicht in den ``rfResourceRoots`` enthalten ist, wird die in dieser Subdivision enthaltende Ressourcedatei ``unknownKeywords`` nicht importiert.
159
+
160
+ ```python
161
+ *** Settings ***
162
+ Resource keywords.resource
163
+ # UNKNOWN unknownKeywords
164
+ ```
165
+
166
+ ## fullyQualified
167
+ Boolesche Variable, die angibt, ob die Keywords in den generierten Robot Dateien lediglich durch den Keywordnamen aufgerufen werden oder, ob zusätzlich der Bibliotheksname vorangestellt werden soll.
168
+
169
+ Die Konfiguration ``"fullyQualified": true`` führt beispielsweise zu dem folgenden Keyword Aufruf:
170
+
171
+ ```python
172
+ SeleniumLibrary.Open Browser https://robotframework.org/ firefox
173
+ ```
174
+ Wird hingegen ``"fullyQualified": false`` verwendet, so wird das Keyword ohne den zugehörigen Bibliotheksnamen aufgerufen:
175
+
176
+ ```python
177
+ Open Browser https://robotframework.org/ firefox
178
+ ```
179
+
180
+ ## resourceDirectory
181
+ Damit der Robot Code Generator die korrekten Ressourcen in der Setting Section der Testsuites einbindet, muss in der Konfigurationsdatei der Pfad zu einem Verzeichnis angegeben werden, das sämtliche für das Projekt benötigten Ressourcen Dateien enthält. Dieser Pfad kann absolut oder relativ zu dem Verzeichnis, in dem der Robot Code Generator ausgeführt wurde, angegeben werden.
182
+ Im Falle eines relativen Pfades muss ein ``{root}`` vorangestellt werden.
183
+
184
+ ```json
185
+ "resourceDirectory": "{root}/Resources",
186
+ ```
187
+
188
+ ```robotframework
189
+ *** Settings ***
190
+ Resource ../Resources/myKeywords.resource
191
+ ```
192
+
193
+ ## generationDirectory
194
+ Der Pfad zu dem Verzeichnis mit den generierten Robot Framework Testsuites kann über den Parameter ``generationDirectory`` vorgegeben werden. Wie bereits beim ``resourceDirectory`` kann auch dieser Pfad relativ oder absolut angegeben werden:
195
+ ```json
196
+ "generationDirectory": "{root}/generatedRobotFiles"
197
+ ```
198
+
199
+ ## createOutputZip
200
+ Für den Fall, dass die Ausgabe des Robot Code Generators auch in Form einer ZIP Datei erfolgen soll, muss die Variable createOutputZip auf true gesetzt werden. Dies hat zur Folge, dass sowohl ein Verzeichnis als auch eine ZIP Datei mit den generierten Robotframework Testsuites erstellt wird.
201
+
202
+ ## logSuiteNumbering
203
+ Über die Boolesche Variable ``logSuiteNumbering`` kann angegeben werden, ob der Präfix eines Verzeichnisses in den Logs angezeigt werden soll. Der Präfix eines Verzeichnisses/einer Robot Framework Testsuite bestimmt die Reihenfolge, in der die Test Suites ausgeführt werden.
204
+
205
+ ```json
206
+ "logSuiteNumbering": true
207
+ ```
208
+ ## clearGenerationDirectory
209
+ Wird die Variable ``clearGenerationDirectory`` auf ``true`` gesetzt, so werden bei jeder Ausführung des Robot Code Generators die Dateien der vorherigen Läufe gelöscht.
210
+
211
+ ```json
212
+ "clearGenerationDirectory": true,
213
+ ```
214
+
215
+ ## logCompoundInteractions
216
+ Bei der Konvertierung der TestBench Testfallsätze nach Robotframework werden lediglich die atomaren Interaktionen in Robotframework aufgerufen. Damit ein Benutzer die gesamte Hierarchie eines Testfallsatzes in Robotframework sehen kann, muss der Wert der Variablen ``logCompoundInteractions`` ``true`` sein. Dies hat zur Folge, dass auch die zusammengesetzten Interaktionen als Kommentare in den Testsuites erscheinen. Durch eine entsprechende Einrückung kann ein Benutzer erkennen, in welcher zusammengesetzten Interaktion eine atomare Interaktion aufgerufen wird.
217
+
218
+ ```json
219
+ "logCompoundInteractions": true,
220
+ ```
221
+
222
+ ## subdivisionsMapping
223
+ Im ``subdivisionsMapping`` kann definiert werden, welche TestBench Subdivision welchem Import Statement in Robotframework entspricht. Auf diese Weise können auch Bibliotheken mit bestimmten Parametern und "Remote Libraries" eingebunden werden. Bibliotheken und Ressourcen, die an dieser Stelle definiert werden, werden nur importiert, wenn auch ein Keyword der entsprechenden Bibliothek/Ressource verwendet wird.
224
+
225
+ ```json
226
+ "subdivisionsMapping": {
227
+ "libraries": {
228
+ "SeleniumLibrary": "SeleniumLibrary timeout=10 implicit_wait=1 run_on_failure=Capture Page Screenshot",
229
+ "SuperRemoteLibrary": "Remote http://127.0.0.1:8270 WITH NAME SuperRemoteLibrary"
230
+ },
231
+ "resources": {
232
+ "MyKeywords": "{root}/../MyKeywords.resource",
233
+ "MyOtherKeywords": "{resourceDirectory}/subdir/MyOtherKeywords.resource"
234
+ }
235
+ }
236
+ ```
237
+
238
+
239
+ ## forcedImport
240
+ Damit eine Bibliotheks-, Ressourcen- oder eine Variablendatei importiert wird, ohne dass es eine entsprechende Subdivision in der TestBench gibt, muss diese als ``forcedImport`` hinterlegt sein. Dateien, die auf diese Weise importiert werden, werden in jeder Testsuite importiert, unabhängig davon, ob ein Keyword aus dieser Datei verwendet wird.
241
+
242
+ ```json
243
+ "forcedImport": {
244
+ "libraries": [
245
+ "SeleniumLibrary"
246
+ ],
247
+ "resources":
248
+ [
249
+ "technical_keywords.resource"
250
+ ],
251
+ "variables": [
252
+ "myVars.py"
253
+ ]
254
+ }
255
+ ```
256
+
257
+ ## loggingConfiguration
258
+ Über die Einstellung ``loggingConfiguration`` kann das Log-Level gesetzt werden.
259
+ Gültige Optionen sind:
260
+
261
+ * "CRITICAL"
262
+
263
+ * "FATAL"
264
+
265
+ * "ERROR"
266
+
267
+ * "WARNING"
268
+
269
+ * "WARN"
270
+
271
+ * "INFO"
272
+
273
+ * "DEBUG"
274
+
275
+ * "NOTSET"
276
+
277
+ Das Default Log-Level ist ``INFO``.
278
+ ```json
279
+ "loggingConfiguration": {
280
+ "console": {
281
+ "logLevel": "info"
282
+ }
283
+ }
284
+ ```
285
+
286
+ ## referenceBehaviour
287
+ Damit die Referenzen, die während der Testdurchführung erstellt werden, in die TestBench importiert werden können, muss die ``referenceBehaviour`` angegeben werden.
288
+ Diese definiert, ob eine Referenz als Anhang oder als Referenz auf eine im Dateisystem liegende Datei importiert werden soll.
289
+ Der Parameter kann somit einen der beiden Werte ``REFERENCE`` oder ``ATTACHMENT`` annehmen.
290
+
291
+ ```json
292
+ "referenceBehaviour": "ATTACHMENT"
293
+ ```
294
+
295
+ ## attachmentConflictBehaviour
296
+ Für den Fall, dass eine Referenz als Attachment importiert werden soll, muss angegeben werden, wie gleiche Dateinamen zu behandeln sind.
297
+ Zu diesem Zweck kann der Parameter attachmentConflictBehaviour mit einem der Werte ``ERROR``, ``USE_NEW``, ``USE_EXISTING`` oder ``RENAME_NEW`` angegeben werden.
298
+
299
+ Die möglichen Werte haben dabei die folgende Bedeutung:
300
+ - ERROR: Für den Fall, dass mehrere Attachments mit dem gleichen Namen existieren, wird eine Fehlermeldung geworfen. Es wird lediglich das zuerst gelesene Attachment importiert.
301
+ - USE_EXISTING: Für den Fall, dass mehrere Attachments mit dem gleichen Namen existieren, wird lediglich das zuerst gelesene Attachment importiert.
302
+ - USE_NEW: Für den Fall, dass mehrere Attachments mit dem gleichen Namen existieren, wird lediglich das zuletzt gelesene Attachment importiert.
303
+ - RENAME_NEW: Für den Fall, dass ein Attachment gelesen wird und bereits ein gleichnamiges existiert, wird der Name des neuen Attachments abgewandelt, dass er einzigartig ist und importiert werden kann.
304
+ ```json
305
+ "attachmentConflictBehaviour": "USE_EXISTING"
306
+ ```
307
+
308
+ ## testCaseSplitPathRegEx
309
+ Über den im Parameter ``testCaseSplitPathRegEx`` angegebenen Wert kann ein Benutzer bestimmen, ob ein Testfallsatz aus der TestBench in mehrere Robot Framework Testfälle unterteilt werden soll. Zu diesem Zweck muss der Benutzer in ``testCaseSplitPathRegEx`` den Namen einer Interaktion definieren, anhand welcher der Code Generator erkennt, dass ein Testfall an dieser Stelle unterteilt werden soll. Anschließend kann diese ``Splitting interaction`` in einem Testfallsatz zum Unterteilen von Testfällen verwendet werden.
310
+
311
+