behavex 4.2.2__tar.gz → 4.2.3__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.
- {behavex-4.2.2/behavex.egg-info → behavex-4.2.3}/PKG-INFO +1 -1
- behavex-4.2.3/behavex/__pycache__/__init__.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/__main__.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/arguments.cpython-310.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__pycache__/arguments.cpython-39.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/conf_mgr.cpython-310.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__pycache__/conf_mgr.cpython-39.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/environment.cpython-310.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__pycache__/environment.cpython-39.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/execution_singleton.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/global_vars.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/progress_bar.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/runner.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/runner.cpython-39.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/utils.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/__pycache__/utils.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/environment.py +9 -9
- behavex-4.2.3/behavex/outputs/__pycache__/__init__.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/outputs/__pycache__/formatter_manager.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/outputs/__pycache__/formatter_manager.cpython-39.pyc +0 -0
- behavex-4.2.3/behavex/outputs/__pycache__/jinja_mgr.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/outputs/__pycache__/output_strings.cpython-310.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/__pycache__/output_strings.cpython-39.pyc +0 -0
- behavex-4.2.3/behavex/outputs/__pycache__/report_html.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/outputs/__pycache__/report_json.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/outputs/__pycache__/report_utils.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/outputs/__pycache__/report_xml.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/outputs/formatters/__pycache__/allure_behavex_formatter.cpython-310.pyc +0 -0
- behavex-4.2.3/behavex/outputs/formatters/__pycache__/allure_behavex_formatter.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/output_strings.py +8 -5
- {behavex-4.2.2 → behavex-4.2.3}/behavex/runner.py +63 -26
- {behavex-4.2.2 → behavex-4.2.3}/behavex/utils.py +1 -7
- {behavex-4.2.2 → behavex-4.2.3/behavex.egg-info}/PKG-INFO +1 -1
- behavex-4.2.3/behavex.egg-info/SOURCES.txt +239 -0
- behavex-4.2.3/output/focused_test_run/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/full_test_run/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/image_test_verification/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_001349/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_003713/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_004697/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_006245/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_008581/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_014810/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_034257/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_049842/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_057264/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_065267/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_071651/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_080858/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_107483/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_116700/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_120092/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_140259/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_143213/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_146320/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_146403/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_154070/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_159339/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_164111/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_188075/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_189804/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_195102/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_206620/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_238600/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_251312/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_260546/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_288178/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_304378/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_323270/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_328507/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_344685/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_344776/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_344852/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_348748/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_372668/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_376424/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_382185/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_405504/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_422012/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_423021/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_426722/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_434999/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_435402/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_440809/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_449330/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_450637/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_450881/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_465338/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_475651/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_479506/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_489113/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_495088/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_496889/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_497394/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_540969/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_574360/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_577418/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_579891/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_588144/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_590886/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_596667/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_601328/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_602191/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_631745/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_634385/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_646388/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_654650/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_656366/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_678770/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_680470/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_683436/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_685176/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_689341/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_691007/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_695521/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_703468/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_704571/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_710568/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_711677/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_719414/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_723957/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_724106/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_725084/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_732485/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_732517/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_742134/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_756176/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_767286/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_773557/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_787703/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_798702/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_803377/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_818000/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_821244/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_841973/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_843772/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_851821/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_852322/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_857146/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_858906/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_867706/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_868972/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_886897/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_891058/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_892919/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_907134/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_909239/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_932996/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_936717/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_940684/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_945860/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_947760/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_952517/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_955858/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_959703/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_969405/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/output_972545/outputs/logs/image_attachments_utils/__init__.py +4 -0
- behavex-4.2.3/output/outputs/logs/image_attachments_utils/__init__.py +4 -0
- {behavex-4.2.2 → behavex-4.2.3}/pyproject.toml +1 -1
- {behavex-4.2.2 → behavex-4.2.3}/setup.py +1 -1
- behavex-4.2.2/behavex/__pycache__/runner.cpython-39.pyc +0 -0
- behavex-4.2.2/behavex/__pycache__/utils.cpython-39.pyc +0 -0
- behavex-4.2.2/behavex/outputs/__pycache__/formatter_manager.cpython-39.pyc +0 -0
- behavex-4.2.2/behavex/outputs/formatters/__pycache__/allure_behavex_formatter.cpython-39.pyc +0 -0
- behavex-4.2.2/behavex.egg-info/SOURCES.txt +0 -96
- {behavex-4.2.2 → behavex-4.2.3}/LICENSE +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/MANIFEST.in +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/README.md +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/.DS_Store +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__init__.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__main__.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__pycache__/__init__.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__pycache__/__main__.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__pycache__/execution_singleton.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__pycache__/global_vars.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/__pycache__/progress_bar.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/arguments.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/conf_behavex.cfg +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/conf_logging.cfg +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/conf_mgr.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/execution_singleton.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/global_vars.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/__init__.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/__pycache__/__init__.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/__pycache__/jinja_mgr.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/__pycache__/report_html.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/__pycache__/report_json.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/__pycache__/report_utils.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/__pycache__/report_xml.cpython-39.pyc +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/css/behavex.css +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/css/bootstrap-theme.css +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/css/bootstrap-theme.min.css +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/css/bootstrap-theme.min.css.map +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/css/bootstrap.css +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/css/bootstrap.min.css +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/css/bootstrap.min.css.map +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/css/pace-theme-loading-bar.min.css +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/fonts/glyphicons-halflings-regular.eot +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/fonts/glyphicons-halflings-regular.svg +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/fonts/glyphicons-halflings-regular.ttf +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/fonts/glyphicons-halflings-regular.woff +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/fonts/glyphicons-halflings-regular.woff2 +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/js/bootstrap.js +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/js/bootstrap.min.js +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/js/chart.js +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/js/jquery-1.11.0.min.js +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/js/jquery-ui.min.js +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/js/jquery.tablesorter.min.js +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/js/jquery.tooltipster.min.js +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/bootstrap/js/pace.min.js +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/formatter_manager.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/formatters/allure_behavex_formatter.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/jinja/base.jinja2 +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/jinja/main.jinja2 +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/jinja/manifest.jinja2 +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/jinja/xml.jinja2 +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/jinja/xml_json.jinja2 +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/jinja_mgr.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/report_html.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/report_json.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/report_utils.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/outputs/report_xml.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/progress_bar.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex/steps/__init__.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex.egg-info/dependency_links.txt +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex.egg-info/entry_points.txt +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex.egg-info/requires.txt +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/behavex.egg-info/top_level.txt +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/docs/conf.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/setup.cfg +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/crashing_features/environment.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/crashing_features/steps/__init__.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/crashing_features/steps/crashing_steps.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/environment.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/secondary_features/__init__.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/secondary_features/environment.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/secondary_features/steps/__init__.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/secondary_features/steps/allure_formatter_secondary_steps.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/secondary_features/steps/generic_secondary_steps.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/steps/__init__.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/steps/allure_formatter_steps.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/steps/allure_formatter_unit_steps.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/steps/execution_steps.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/tests/features/steps/install_steps.py +0 -0
- {behavex-4.2.2 → behavex-4.2.3}/venv/bin/activate_this.py +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -11,18 +11,18 @@ from datetime import datetime
|
|
|
11
11
|
|
|
12
12
|
from behave.contrib.scenario_autoretry import patch_scenario_with_autoretry
|
|
13
13
|
from behave.log_capture import capture
|
|
14
|
-
from behave.model import ScenarioOutline
|
|
14
|
+
from behave.model import ScenarioOutline # pyright: ignore[reportUnusedImport]
|
|
15
15
|
from behave.runner import Context, ModelRunner
|
|
16
16
|
|
|
17
17
|
from behavex import conf_mgr
|
|
18
18
|
from behavex.conf_mgr import get_env, get_param
|
|
19
19
|
from behavex.global_vars import global_vars
|
|
20
20
|
from behavex.outputs import report_json, report_xml
|
|
21
|
-
from behavex.outputs.report_utils import create_log_path,
|
|
21
|
+
from behavex.outputs.report_utils import (create_log_path, get_string_hash,
|
|
22
|
+
strip_ansi_codes)
|
|
22
23
|
from behavex.utils import (LOGGING_CFG, create_custom_log_when_called,
|
|
23
24
|
get_autoretry_attempts, get_logging_level,
|
|
24
|
-
get_scenario_tags, get_scenarios_instances
|
|
25
|
-
get_string_hash)
|
|
25
|
+
get_scenario_tags, get_scenarios_instances)
|
|
26
26
|
|
|
27
27
|
Context.__getattribute__ = create_custom_log_when_called
|
|
28
28
|
|
|
@@ -186,19 +186,19 @@ def before_scenario(context, scenario):
|
|
|
186
186
|
scenario.start = _get_current_timestamp_ms()
|
|
187
187
|
|
|
188
188
|
|
|
189
|
-
def before_step(context, step):
|
|
189
|
+
def before_step(context, step): # pyright: ignore[reportUnusedParameter]
|
|
190
190
|
step.start = _get_current_timestamp_ms()
|
|
191
191
|
|
|
192
192
|
|
|
193
|
-
def before_tag(context, tag):
|
|
193
|
+
def before_tag(context, tag): # pyright: ignore[reportUnusedParameter]
|
|
194
194
|
pass
|
|
195
195
|
|
|
196
196
|
|
|
197
|
-
def after_tag(context, tag):
|
|
197
|
+
def after_tag(context, tag): # pyright: ignore[reportUnusedParameter]
|
|
198
198
|
pass
|
|
199
199
|
|
|
200
200
|
|
|
201
|
-
def after_step(context, step):
|
|
201
|
+
def after_step(context, step): # pyright: ignore[reportUnusedParameter]
|
|
202
202
|
step.stop = _get_current_timestamp_ms()
|
|
203
203
|
try:
|
|
204
204
|
if step.exception:
|
|
@@ -230,7 +230,7 @@ def after_scenario(context, scenario):
|
|
|
230
230
|
|
|
231
231
|
|
|
232
232
|
# noinspection PyUnusedLocal
|
|
233
|
-
def after_feature(context, feature):
|
|
233
|
+
def after_feature(context, feature): # pyright: ignore[reportUnusedParameter]
|
|
234
234
|
try:
|
|
235
235
|
if get_env('multiprocessing') and get_param('parallel_scheme') == 'scenario':
|
|
236
236
|
return
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -45,8 +45,8 @@ TEXTS = {
|
|
|
45
45
|
'description': '',
|
|
46
46
|
'modal': {
|
|
47
47
|
'title': '',
|
|
48
|
-
'body': '<b>Test Automation Rate:</b> % of automated scenarios.<br>'
|
|
49
|
-
|
|
48
|
+
'body': ('<b>Test Automation Rate:</b> % of automated scenarios.<br>'
|
|
49
|
+
'<b>Pass Rate:</b>: % of passed scenarios.<br>'),
|
|
50
50
|
},
|
|
51
51
|
},
|
|
52
52
|
'joined': {'title': '', 'description': '', 'modal': {'title': '', 'modal': 'the'}},
|
|
@@ -61,9 +61,9 @@ TEXTS = {
|
|
|
61
61
|
'serial_execution': u'\n{0}\nRunning serial scenarios (tagged as @SERIAL).\n{0}\n'.format('*' * 60),
|
|
62
62
|
'running_parallels': u'\n{0}\nRunning parallel scenarios\n{0}\n'.format('*' * 60),
|
|
63
63
|
'run_behave': u"Running feature '{}' with scenario '{}'.",
|
|
64
|
-
'duplicated_scenarios': '{0}\nThere are duplicate scenario names to run.\n'
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
'duplicated_scenarios': ('{0}\nThere are duplicate scenario names to run.\n'
|
|
65
|
+
'Parallel test execution by scenario cannot be performed.\n'
|
|
66
|
+
'Duplicated scenario names: \n{1}.\n{0}\n').format('*' * 60, {}),
|
|
67
67
|
'execution_crashed': 'Execution crashed or was interrupted when executing the scenario. No outputs could be generated.'
|
|
68
68
|
},
|
|
69
69
|
'folder': {'run_behave': u"Running folder: '{}' and feature '{}'."},
|
|
@@ -77,6 +77,9 @@ TEXTS = {
|
|
|
77
77
|
'execution': {
|
|
78
78
|
'callback': {
|
|
79
79
|
'error': u'\nError occurred during execution callback: {}'
|
|
80
|
+
},
|
|
81
|
+
'dry_run': {
|
|
82
|
+
'completed': u'\nDry run completed. Please, see the report in {0} folder.\n\n'
|
|
80
83
|
}
|
|
81
84
|
},
|
|
82
85
|
'parallel': {
|
|
@@ -12,33 +12,33 @@ including setup, execution, and reporting.
|
|
|
12
12
|
from __future__ import absolute_import, print_function
|
|
13
13
|
|
|
14
14
|
import codecs
|
|
15
|
-
import concurrent
|
|
15
|
+
import concurrent # pyright: ignore[reportUnusedImport]
|
|
16
16
|
import copy
|
|
17
17
|
import io
|
|
18
18
|
import json
|
|
19
|
-
import logging.config
|
|
19
|
+
import logging.config # pyright: ignore[reportUnusedImport]
|
|
20
20
|
import multiprocessing
|
|
21
21
|
import os
|
|
22
22
|
import os.path
|
|
23
23
|
import platform
|
|
24
|
-
import re
|
|
25
24
|
import signal
|
|
26
25
|
import sys
|
|
27
26
|
import time
|
|
28
27
|
import traceback
|
|
29
28
|
from concurrent.futures import ProcessPoolExecutor
|
|
29
|
+
from concurrent.futures.process import BrokenProcessPool
|
|
30
30
|
from multiprocessing import active_children
|
|
31
31
|
from multiprocessing.managers import DictProxy
|
|
32
32
|
from tempfile import gettempdir
|
|
33
|
+
from typing import Any, Dict
|
|
33
34
|
|
|
34
35
|
from behave import __main__ as behave_script
|
|
35
36
|
from behave.model import Feature, Scenario, ScenarioOutline
|
|
36
37
|
|
|
37
38
|
# noinspection PyUnresolvedReferences
|
|
38
|
-
import behavex.outputs.report_json
|
|
39
39
|
from behavex import conf_mgr
|
|
40
40
|
from behavex.arguments import BEHAVE_ARGS, BEHAVEX_ARGS, parse_arguments
|
|
41
|
-
from behavex.conf_mgr import ConfigRun, get_env, get_param
|
|
41
|
+
from behavex.conf_mgr import ConfigRun, get_env, get_param
|
|
42
42
|
from behavex.environment import extend_behave_hooks
|
|
43
43
|
from behavex.execution_singleton import ExecutionSingleton
|
|
44
44
|
from behavex.global_vars import global_vars
|
|
@@ -53,13 +53,12 @@ from behavex.utils import (IncludeNameMatch, IncludePathsMatch, MatchInclude,
|
|
|
53
53
|
cleanup_folders, configure_logging,
|
|
54
54
|
copy_bootstrap_html_generator,
|
|
55
55
|
create_execution_complete_callback_function,
|
|
56
|
-
expand_paths, explore_features,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
print_env_variables, print_parallel,
|
|
56
|
+
expand_paths, explore_features, generate_reports,
|
|
57
|
+
get_feature_and_scenario_line, get_json_results,
|
|
58
|
+
get_logging_level, get_scenario_tags,
|
|
59
|
+
get_scenarios_instances, get_text,
|
|
60
|
+
join_feature_reports, join_scenario_reports,
|
|
61
|
+
len_scenarios, print_env_variables, print_parallel,
|
|
63
62
|
set_behave_tags, set_env_variable,
|
|
64
63
|
set_environ_config, set_system_paths)
|
|
65
64
|
|
|
@@ -136,8 +135,8 @@ def run(args):
|
|
|
136
135
|
# Handle include_paths parameter
|
|
137
136
|
if len(get_param('include_paths')) > 0:
|
|
138
137
|
include_paths = ",".join(expand_paths(get_param('include_paths'))).replace('\n', '')
|
|
139
|
-
features_path = os.environ.get('FEATURES_PATH')
|
|
140
|
-
if features_path == '' or
|
|
138
|
+
features_path = os.environ.get('FEATURES_PATH', '')
|
|
139
|
+
if features_path == '' or not os.path.exists(features_path):
|
|
141
140
|
os.environ['FEATURES_PATH'] = include_paths
|
|
142
141
|
else:
|
|
143
142
|
os.environ['FEATURES_PATH'] = features_path + ',' + include_paths
|
|
@@ -210,7 +209,7 @@ def launch_behavex():
|
|
|
210
209
|
execution_codes = []
|
|
211
210
|
results = None
|
|
212
211
|
config = conf_mgr.get_config()
|
|
213
|
-
features_path = os.environ.get('FEATURES_PATH')
|
|
212
|
+
features_path = os.environ.get('FEATURES_PATH', '')
|
|
214
213
|
parallel_scheme = get_param('parallel_scheme')
|
|
215
214
|
if get_param('dry_run'):
|
|
216
215
|
parallel_processes = 1
|
|
@@ -221,7 +220,7 @@ def launch_behavex():
|
|
|
221
220
|
show_progress_bar = get_param('show_progress_bar')
|
|
222
221
|
multiprocess = (
|
|
223
222
|
True
|
|
224
|
-
if
|
|
223
|
+
if parallel_processes > 1 and not get_param('dry_run')
|
|
225
224
|
else False
|
|
226
225
|
)
|
|
227
226
|
set_behave_tags()
|
|
@@ -283,11 +282,9 @@ def launch_behavex():
|
|
|
283
282
|
lock,
|
|
284
283
|
show_progress_bar)
|
|
285
284
|
wrap_up_process_pools(process_pool, json_reports, scenario)
|
|
286
|
-
time_end = global_vars.execution_end_time
|
|
287
285
|
|
|
288
286
|
if get_param('dry_run'):
|
|
289
|
-
|
|
290
|
-
print(msg.format(get_env('OUTPUT')))
|
|
287
|
+
print_parallel('execution.dry_run.completed', get_env('OUTPUT'))
|
|
291
288
|
|
|
292
289
|
remove_temporary_files(parallel_processes, json_reports)
|
|
293
290
|
|
|
@@ -397,7 +394,6 @@ def create_scenario_line_references(features):
|
|
|
397
394
|
updated_features = {}
|
|
398
395
|
for feature_path, scenarios in features.items():
|
|
399
396
|
for scenario in scenarios:
|
|
400
|
-
scenario_filename = text(scenario.filename)
|
|
401
397
|
if global_vars.rerun_failures or ".feature:" in feature_path:
|
|
402
398
|
if feature_path not in updated_features:
|
|
403
399
|
updated_features[feature_path] = []
|
|
@@ -502,8 +498,10 @@ def launch_by_feature(features,
|
|
|
502
498
|
for parallel_process in parallel_processes:
|
|
503
499
|
try:
|
|
504
500
|
parallel_process.result()
|
|
501
|
+
except (KeyboardInterrupt, SystemExit):
|
|
502
|
+
# Allow KeyboardInterrupt (Ctrl+C) and SystemExit to propagate to top level
|
|
503
|
+
raise
|
|
505
504
|
except:
|
|
506
|
-
from concurrent.futures.process import BrokenProcessPool
|
|
507
505
|
e = sys.exc_info()[1]
|
|
508
506
|
if isinstance(e, BrokenProcessPool):
|
|
509
507
|
print_parallel('process.pool.broken.main', str(e))
|
|
@@ -625,8 +623,10 @@ def launch_by_scenario(features,
|
|
|
625
623
|
for parallel_process in parallel_processes:
|
|
626
624
|
try:
|
|
627
625
|
parallel_process.result()
|
|
626
|
+
except (KeyboardInterrupt, SystemExit):
|
|
627
|
+
# Allow KeyboardInterrupt (Ctrl+C) and SystemExit to propagate to top level
|
|
628
|
+
raise
|
|
628
629
|
except:
|
|
629
|
-
from concurrent.futures.process import BrokenProcessPool
|
|
630
630
|
e = sys.exc_info()[1]
|
|
631
631
|
if isinstance(e, BrokenProcessPool):
|
|
632
632
|
print_parallel('process.pool.broken.main', str(e))
|
|
@@ -772,21 +772,57 @@ def _launch_behave(behave_args):
|
|
|
772
772
|
|
|
773
773
|
# Use a custom output capture class that mirrors to console and captures
|
|
774
774
|
class TeePrint:
|
|
775
|
+
"""A complete wrapper for stdout that captures output while maintaining all stdout functionality."""
|
|
776
|
+
|
|
775
777
|
def __init__(self, original_stdout):
|
|
776
|
-
|
|
777
|
-
self
|
|
778
|
+
# Use object.__setattr__ to avoid recursion with __setattr__
|
|
779
|
+
object.__setattr__(self, 'original_stdout', original_stdout)
|
|
780
|
+
object.__setattr__(self, 'captured', io.StringIO())
|
|
778
781
|
|
|
779
782
|
def write(self, data):
|
|
783
|
+
"""Override write to capture output while maintaining original behavior."""
|
|
780
784
|
self.original_stdout.write(data)
|
|
781
785
|
self.captured.write(data)
|
|
786
|
+
return len(data) if hasattr(data, '__len__') else None
|
|
782
787
|
|
|
783
788
|
def flush(self):
|
|
789
|
+
"""Override flush to flush both original and captured streams."""
|
|
784
790
|
self.original_stdout.flush()
|
|
785
791
|
self.captured.flush()
|
|
786
792
|
|
|
787
793
|
def getvalue(self):
|
|
794
|
+
"""Custom method to get captured output."""
|
|
788
795
|
return self.captured.getvalue()
|
|
789
796
|
|
|
797
|
+
def __getattr__(self, name):
|
|
798
|
+
"""Delegate all other attributes/methods to the original stdout."""
|
|
799
|
+
try:
|
|
800
|
+
return getattr(self.original_stdout, name)
|
|
801
|
+
except AttributeError:
|
|
802
|
+
raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{name}'")
|
|
803
|
+
|
|
804
|
+
def __setattr__(self, name, value):
|
|
805
|
+
"""Delegate attribute setting to original stdout (except for our internal attributes)."""
|
|
806
|
+
if name in ('original_stdout', 'captured'):
|
|
807
|
+
object.__setattr__(self, name, value)
|
|
808
|
+
else:
|
|
809
|
+
setattr(self.original_stdout, name, value)
|
|
810
|
+
|
|
811
|
+
def __getattribute__(self, name):
|
|
812
|
+
"""Handle attribute access with proper delegation."""
|
|
813
|
+
# Handle our own methods and attributes first
|
|
814
|
+
if name in ('original_stdout', 'captured', 'write', 'flush', 'getvalue',
|
|
815
|
+
'__class__', '__dict__', '__getattr__', '__setattr__'):
|
|
816
|
+
return object.__getattribute__(self, name)
|
|
817
|
+
|
|
818
|
+
# For common stdout properties, delegate to original_stdout
|
|
819
|
+
try:
|
|
820
|
+
original_stdout = object.__getattribute__(self, 'original_stdout')
|
|
821
|
+
return getattr(original_stdout, name)
|
|
822
|
+
except (AttributeError, KeyError):
|
|
823
|
+
# Fallback to our own implementation
|
|
824
|
+
return object.__getattribute__(self, name)
|
|
825
|
+
|
|
790
826
|
# Create the tee capture object
|
|
791
827
|
tee = TeePrint(sys.__stdout__)
|
|
792
828
|
|
|
@@ -867,7 +903,7 @@ def wrap_up_process_pools(process_pool,
|
|
|
867
903
|
output = os.path.join(get_env('OUTPUT'))
|
|
868
904
|
try:
|
|
869
905
|
process_pool.shutdown(wait=True)
|
|
870
|
-
except Exception
|
|
906
|
+
except Exception:
|
|
871
907
|
process_pool.shutdown(wait=False, cancel_futures=True)
|
|
872
908
|
if type(json_reports) is list:
|
|
873
909
|
if scenario:
|
|
@@ -1267,8 +1303,9 @@ def dump_json_results():
|
|
|
1267
1303
|
process_name = multiprocessing.current_process().name.split('-')[-1]
|
|
1268
1304
|
path_info = os.path.join(gettempdir(), 'result{}.tmp'.format(process_name))
|
|
1269
1305
|
|
|
1270
|
-
def _load_json():
|
|
1306
|
+
def _load_json() -> Dict[str, Any]:
|
|
1271
1307
|
"""this function load from file"""
|
|
1308
|
+
json_output_converted = {}
|
|
1272
1309
|
with open(path_info, 'r') as info_file:
|
|
1273
1310
|
json_output_file = info_file.read()
|
|
1274
1311
|
json_output_converted = json.loads(json_output_file)
|
|
@@ -20,6 +20,7 @@ import shutil
|
|
|
20
20
|
import sys
|
|
21
21
|
import time
|
|
22
22
|
import uuid
|
|
23
|
+
from concurrent.futures.process import BrokenProcessPool
|
|
23
24
|
from functools import reduce
|
|
24
25
|
from tempfile import gettempdir
|
|
25
26
|
|
|
@@ -55,13 +56,6 @@ def handle_execution_complete_callback(codes,
|
|
|
55
56
|
try:
|
|
56
57
|
tuple_values = future.result()
|
|
57
58
|
except: # isort:skip
|
|
58
|
-
# Handle BrokenProcessPool and other exceptions gracefully
|
|
59
|
-
from concurrent.futures.process import BrokenProcessPool
|
|
60
|
-
e = sys.exc_info()[1]
|
|
61
|
-
if isinstance(e, BrokenProcessPool):
|
|
62
|
-
print_parallel('process.pool.broken', str(e))
|
|
63
|
-
else:
|
|
64
|
-
print_parallel('execution.callback.error', str(e))
|
|
65
59
|
json_reports += []
|
|
66
60
|
codes.append(1)
|
|
67
61
|
if tuple_values:
|