testit-cli 2.10.3__tar.gz → 2.11.0__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.
- {testit_cli-2.10.3 → testit_cli-2.11.0}/PKG-INFO +29 -1
- {testit_cli-2.10.3 → testit_cli-2.11.0}/README.md +28 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/setup.py +1 -1
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_api_result.py +11 -17
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/layer_source.py +5 -4
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/apiclient.py +1 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/click_commands.py +17 -2
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/converter.py +43 -17
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/importer.py +2 -2
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/models/config.py +1 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli.egg-info/PKG-INFO +29 -1
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli.egg-info/SOURCES.txt +1 -0
- testit_cli-2.11.0/tests/test_autotest_layer.py +44 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/LICENSE +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/setup.cfg +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/__init__.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/__main__.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/__init__.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/__init__.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/attachments_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/auto_tests_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/configurations_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/custom_attributes_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/parameters_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/project_attributes_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/project_sections_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/project_work_items_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/projects_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/sections_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/test_results_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/test_runs_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/work_items_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/workflows_api.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api_client.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/apis/__init__.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/configuration.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/exceptions.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/__init__.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_auto_tests_id_work_items_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_auto_tests_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_auto_tests_put_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_auto_tests_search_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_configurations_search_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_custom_attributes_global_id_put_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_custom_attributes_global_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_custom_attributes_search_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_parameters_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_parameters_search_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_projects_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_projects_project_id_attributes_put_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_projects_project_id_attributes_search_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_projects_project_id_work_items_search_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_projects_search_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_sections_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_test_results_id_put_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_test_results_search_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_test_runs_id_reruns_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_test_runs_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_test_runs_put_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/adapters_work_items_post_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/assign_attachment_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/assign_auto_test_case_id_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/assign_iteration_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/attachment_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/attachment_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/attachment_put_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/attachment_put_model_auto_test_step_results_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/attachment_update_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_api_result_layer.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_case_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_create_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_create_api_model_layer.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_filter_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_id_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_model_last_test_result_configuration.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_model_last_test_result_status.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_result_reason_short.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_results_for_test_run_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_search_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_search_api_model_filter.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_search_api_model_includes.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_search_include_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_step.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_step_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_step_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_step_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_step_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_step_result_update_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_update_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_work_item_identifier_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/available_test_result_outcome.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/configuration_filter_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/configuration_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/configuration_short_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/create_empty_test_run_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/create_link_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/create_parameter_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/create_project_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/create_step_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/create_work_item_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_option_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_option_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_option_post_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_option_update_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_put_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_search_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_search_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_type.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/custom_attribute_types_enum.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/date_time_range_selector_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/deletion_state.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/detailed_project_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/detailed_project_api_result_workflow.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/failure_category_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/global_custom_attribute_post_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/global_custom_attribute_update_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/guid_extraction_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/image_resize_type.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/int32_range_selector_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/int64_range_selector_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/iteration_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/iteration_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/label_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/label_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/label_short_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/layer_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/layer_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/link_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/link_create_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/link_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/link_post_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/link_put_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/link_short_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/link_type.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/link_update_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/manual_rerun_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/manual_rerun_select_test_results_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/manual_rerun_select_test_results_api_model_extraction_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/manual_rerun_select_test_results_api_model_filter.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/manual_rerun_test_result_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/manual_rerun_test_result_api_model_test_result_ids.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/operation.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/parameter_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/parameter_iteration_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/parameter_short_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/parameter_short_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/parameters_filter_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/problem_details.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/project_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/project_attributes_filter_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/project_shortest_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/project_type_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/projects_filter_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/projects_filter_model_autotests_count.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/projects_filter_model_checklists_count.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/projects_filter_model_created_date.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/projects_filter_model_shared_steps_count.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/projects_filter_model_test_cases_count.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/section_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/section_post_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/section_shared_step.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/section_with_steps_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/shared_step_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/shared_step_result_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/step_comment_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/step_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/step_post_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/step_result_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/tag_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_result_link_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_result_outcome.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_result_response.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_result_short_response.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_result_short_response_status.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_result_step_comment_update_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_result_update_request.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_results_filter_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_results_filter_api_model_duration.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_run_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_run_api_result_status.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_run_state.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_status_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_status_api_type.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_status_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/test_status_type.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/update_empty_test_run_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/update_link_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/validation_problem_details.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_entity_type_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_filter_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_filter_api_model_duration.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_id_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_parameter_key_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_parameter_key_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_priority_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_priority_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_select_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_select_api_model_filter.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_short_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_source_type_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_state_api_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_states.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/work_item_type_model.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/workflow_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/workflow_status_api_result.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model_utils.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/models/__init__.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/rest.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/autotests_filter.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/dir_worker.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/file_worker.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/filter_factory.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/html_escape_utils.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/http_retry.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/logger.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/models/__init__.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/models/mode.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/models/status_type.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/models/testcase.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/models/testrun.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/models/testrun_link.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/parser.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/service.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/service_factory.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/testrun_metadata.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/validation.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli.egg-info/dependency_links.txt +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli.egg-info/entry_points.txt +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli.egg-info/requires.txt +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli.egg-info/top_level.txt +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/tests/test_click.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/tests/test_service.py +0 -0
- {testit_cli-2.10.3 → testit_cli-2.11.0}/tests/test_testrun_metadata.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: testit-cli
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.11.0
|
|
4
4
|
Summary: This tool is the command line wrapper of Test IT allowing you to upload the test results in real time to Test IT
|
|
5
5
|
Home-page: https://pypi.org/project/testit-cli/
|
|
6
6
|
Author: Integration team
|
|
@@ -145,3 +145,31 @@ Notes:
|
|
|
145
145
|
- Test run tags/links are independent from autotest/result tags and links.
|
|
146
146
|
- On an existing run, new tags/links are **merged** (existing values are kept; duplicates by tag name / link URL are skipped).
|
|
147
147
|
- Empty or omitted values mean “do not change tags/links”.
|
|
148
|
+
|
|
149
|
+
## Autotest layer (test pyramid)
|
|
150
|
+
|
|
151
|
+
When importing XML results, CLI can set the **autotest** pyramid layer for every upserted autotest (create/update).
|
|
152
|
+
This is a **run-level default** for file-based import; adapters still read layer from test code annotations.
|
|
153
|
+
|
|
154
|
+
| Intent | CLI | Env |
|
|
155
|
+
|--------|-----|-----|
|
|
156
|
+
| Default autotest layer | `--autotest-layer` / `-al` | `TMS_AUTOTEST_LAYER` |
|
|
157
|
+
|
|
158
|
+
Supported commands: `results import`, `results upload`.
|
|
159
|
+
|
|
160
|
+
Recommended values: `E2E`, `UI`, `API`, `Contract`, `Integration`, `Component`, `Unit`. Any other non-empty string is accepted.
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
export TMS_AUTOTEST_LAYER=API
|
|
164
|
+
testit results import \
|
|
165
|
+
--url "$TMS_URL" \
|
|
166
|
+
--token "$TMS_TOKEN" \
|
|
167
|
+
--project-id "$TMS_PROJECT_ID" \
|
|
168
|
+
--configuration-id "$TMS_CONFIGURATION_ID" \
|
|
169
|
+
--results ./results
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Behaviour (aligned with adapters API):
|
|
173
|
+
|
|
174
|
+
- Layer set → send `layer: { name, source: Run }` on create/update.
|
|
175
|
+
- Layer not set → do not send `layer`; on update always send `resetLayer: false`.
|
|
@@ -111,3 +111,31 @@ Notes:
|
|
|
111
111
|
- Test run tags/links are independent from autotest/result tags and links.
|
|
112
112
|
- On an existing run, new tags/links are **merged** (existing values are kept; duplicates by tag name / link URL are skipped).
|
|
113
113
|
- Empty or omitted values mean “do not change tags/links”.
|
|
114
|
+
|
|
115
|
+
## Autotest layer (test pyramid)
|
|
116
|
+
|
|
117
|
+
When importing XML results, CLI can set the **autotest** pyramid layer for every upserted autotest (create/update).
|
|
118
|
+
This is a **run-level default** for file-based import; adapters still read layer from test code annotations.
|
|
119
|
+
|
|
120
|
+
| Intent | CLI | Env |
|
|
121
|
+
|--------|-----|-----|
|
|
122
|
+
| Default autotest layer | `--autotest-layer` / `-al` | `TMS_AUTOTEST_LAYER` |
|
|
123
|
+
|
|
124
|
+
Supported commands: `results import`, `results upload`.
|
|
125
|
+
|
|
126
|
+
Recommended values: `E2E`, `UI`, `API`, `Contract`, `Integration`, `Component`, `Unit`. Any other non-empty string is accepted.
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
export TMS_AUTOTEST_LAYER=API
|
|
130
|
+
testit results import \
|
|
131
|
+
--url "$TMS_URL" \
|
|
132
|
+
--token "$TMS_TOKEN" \
|
|
133
|
+
--project-id "$TMS_PROJECT_ID" \
|
|
134
|
+
--configuration-id "$TMS_CONFIGURATION_ID" \
|
|
135
|
+
--results ./results
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Behaviour (aligned with adapters API):
|
|
139
|
+
|
|
140
|
+
- Layer set → send `layer: { name, source: Run }` on create/update.
|
|
141
|
+
- Layer not set → do not send `layer`; on update always send `resetLayer: false`.
|
|
@@ -90,9 +90,9 @@ class CustomAttributeApiResult(ModelNormal):
|
|
|
90
90
|
'is_enabled': (bool,), # noqa: E501
|
|
91
91
|
'is_required': (bool,), # noqa: E501
|
|
92
92
|
'is_global': (bool,), # noqa: E501
|
|
93
|
-
'is_read_only': (bool,
|
|
94
|
-
'is_system': (bool,
|
|
95
|
-
'targets': ([str],
|
|
93
|
+
'is_read_only': (bool,), # noqa: E501
|
|
94
|
+
'is_system': (bool,), # noqa: E501
|
|
95
|
+
'targets': ([str],), # noqa: E501
|
|
96
96
|
'code': (str, none_type,), # noqa: E501
|
|
97
97
|
}
|
|
98
98
|
|
|
@@ -123,7 +123,7 @@ class CustomAttributeApiResult(ModelNormal):
|
|
|
123
123
|
|
|
124
124
|
@classmethod
|
|
125
125
|
@convert_js_args_to_python_args
|
|
126
|
-
def _from_openapi_data(cls, id, options, type, is_deleted, name, is_enabled, is_required, is_global, *args, **kwargs): # noqa: E501
|
|
126
|
+
def _from_openapi_data(cls, id, options, type, is_deleted, name, is_enabled, is_required, is_global, is_read_only, is_system, targets, *args, **kwargs): # noqa: E501
|
|
127
127
|
"""CustomAttributeApiResult - a model defined in OpenAPI
|
|
128
128
|
|
|
129
129
|
Args:
|
|
@@ -135,11 +135,11 @@ class CustomAttributeApiResult(ModelNormal):
|
|
|
135
135
|
is_enabled (bool): Indicates if the attribute is enabled
|
|
136
136
|
is_required (bool): Indicates if the attribute value is mandatory to specify
|
|
137
137
|
is_global (bool): Indicates if the attribute is available across all projects
|
|
138
|
+
is_read_only (bool): Indicates if the attribute is read-only
|
|
139
|
+
is_system (bool): Indicates if the attribute is system
|
|
140
|
+
targets ([str]): Collection of the attribute targets Defines where the attribute can be used (e.g., TestCases, AutoTestCases, TestPlans)
|
|
138
141
|
|
|
139
142
|
Keyword Args:
|
|
140
|
-
is_read_only (bool): Indicates if the attribute is read-only. [optional] # noqa: E501
|
|
141
|
-
is_system (bool): Indicates if the attribute is system. [optional] # noqa: E501
|
|
142
|
-
targets ([str]): Collection of the attribute targets. [optional] # noqa: E501
|
|
143
143
|
_check_type (bool): if True, values for parameters in openapi_types
|
|
144
144
|
will be type checked and a TypeError will be
|
|
145
145
|
raised if the wrong type is input.
|
|
@@ -178,9 +178,6 @@ class CustomAttributeApiResult(ModelNormal):
|
|
|
178
178
|
_path_to_item = kwargs.pop('_path_to_item', ())
|
|
179
179
|
_configuration = kwargs.pop('_configuration', None)
|
|
180
180
|
_visited_composed_classes = kwargs.pop('_visited_composed_classes', ())
|
|
181
|
-
is_read_only = kwargs.pop('is_read_only', False)
|
|
182
|
-
is_system = kwargs.pop('is_system', False)
|
|
183
|
-
targets = kwargs.pop('targets', None)
|
|
184
181
|
|
|
185
182
|
self = super(OpenApiModel, cls).__new__(cls)
|
|
186
183
|
|
|
@@ -236,7 +233,7 @@ class CustomAttributeApiResult(ModelNormal):
|
|
|
236
233
|
])
|
|
237
234
|
|
|
238
235
|
@convert_js_args_to_python_args
|
|
239
|
-
def __init__(self, id, options, type, is_deleted, name, is_enabled, is_required, is_global, *args, **kwargs): # noqa: E501
|
|
236
|
+
def __init__(self, id, options, type, is_deleted, name, is_enabled, is_required, is_global, is_read_only, is_system, targets, *args, **kwargs): # noqa: E501
|
|
240
237
|
"""CustomAttributeApiResult - a model defined in OpenAPI
|
|
241
238
|
|
|
242
239
|
Args:
|
|
@@ -248,11 +245,11 @@ class CustomAttributeApiResult(ModelNormal):
|
|
|
248
245
|
is_enabled (bool): Indicates if the attribute is enabled
|
|
249
246
|
is_required (bool): Indicates if the attribute value is mandatory to specify
|
|
250
247
|
is_global (bool): Indicates if the attribute is available across all projects
|
|
248
|
+
is_read_only (bool): Indicates if the attribute is read-only
|
|
249
|
+
is_system (bool): Indicates if the attribute is system
|
|
250
|
+
targets ([str]): Collection of the attribute targets Defines where the attribute can be used (e.g., TestCases, AutoTestCases, TestPlans)
|
|
251
251
|
|
|
252
252
|
Keyword Args:
|
|
253
|
-
is_read_only (bool): Indicates if the attribute is read-only. [optional] # noqa: E501
|
|
254
|
-
is_system (bool): Indicates if the attribute is system. [optional] # noqa: E501
|
|
255
|
-
targets ([str]): Collection of the attribute targets. [optional] # noqa: E501
|
|
256
253
|
_check_type (bool): if True, values for parameters in openapi_types
|
|
257
254
|
will be type checked and a TypeError will be
|
|
258
255
|
raised if the wrong type is input.
|
|
@@ -291,9 +288,6 @@ class CustomAttributeApiResult(ModelNormal):
|
|
|
291
288
|
_path_to_item = kwargs.pop('_path_to_item', ())
|
|
292
289
|
_configuration = kwargs.pop('_configuration', None)
|
|
293
290
|
_visited_composed_classes = kwargs.pop('_visited_composed_classes', ())
|
|
294
|
-
is_read_only = kwargs.pop('is_read_only', False)
|
|
295
|
-
is_system = kwargs.pop('is_system', False)
|
|
296
|
-
targets = kwargs.pop('targets', None)
|
|
297
291
|
|
|
298
292
|
if args:
|
|
299
293
|
for arg in args:
|
|
@@ -53,6 +53,7 @@ class LayerSource(ModelSimple):
|
|
|
53
53
|
allowed_values = {
|
|
54
54
|
('value',): {
|
|
55
55
|
'MANUAL': "Manual",
|
|
56
|
+
'REPORT': "Report",
|
|
56
57
|
'RUN': "Run",
|
|
57
58
|
'RULE': "Rule",
|
|
58
59
|
},
|
|
@@ -106,10 +107,10 @@ class LayerSource(ModelSimple):
|
|
|
106
107
|
Note that value can be passed either in args or in kwargs, but not in both.
|
|
107
108
|
|
|
108
109
|
Args:
|
|
109
|
-
args[0] (str):, must be one of ["Manual", "Run", "Rule", ] # noqa: E501
|
|
110
|
+
args[0] (str):, must be one of ["Manual", "Report", "Run", "Rule", ] # noqa: E501
|
|
110
111
|
|
|
111
112
|
Keyword Args:
|
|
112
|
-
value (str):, must be one of ["Manual", "Run", "Rule", ] # noqa: E501
|
|
113
|
+
value (str):, must be one of ["Manual", "Report", "Run", "Rule", ] # noqa: E501
|
|
113
114
|
_check_type (bool): if True, values for parameters in openapi_types
|
|
114
115
|
will be type checked and a TypeError will be
|
|
115
116
|
raised if the wrong type is input.
|
|
@@ -200,10 +201,10 @@ class LayerSource(ModelSimple):
|
|
|
200
201
|
Note that value can be passed either in args or in kwargs, but not in both.
|
|
201
202
|
|
|
202
203
|
Args:
|
|
203
|
-
args[0] (str):, must be one of ["Manual", "Run", "Rule", ] # noqa: E501
|
|
204
|
+
args[0] (str):, must be one of ["Manual", "Report", "Run", "Rule", ] # noqa: E501
|
|
204
205
|
|
|
205
206
|
Keyword Args:
|
|
206
|
-
value (str):, must be one of ["Manual", "Run", "Rule", ] # noqa: E501
|
|
207
|
+
value (str):, must be one of ["Manual", "Report", "Run", "Rule", ] # noqa: E501
|
|
207
208
|
_check_type (bool): if True, values for parameters in openapi_types
|
|
208
209
|
will be type checked and a TypeError will be
|
|
209
210
|
raised if the wrong type is input.
|
|
@@ -212,6 +212,7 @@ class ApiClient:
|
|
|
212
212
|
def update_autotest(self, model: AdaptersAutoTestsPutRequest) -> None:
|
|
213
213
|
"""Function updates autotest"""
|
|
214
214
|
try:
|
|
215
|
+
model.reset_layer = False
|
|
215
216
|
escaped_model: AdaptersAutoTestsPutRequest = HtmlEscapeUtils.escape_html_in_object(model)
|
|
216
217
|
|
|
217
218
|
logging.debug(f"Updating autotest {escaped_model}")
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import typing
|
|
1
2
|
from itertools import chain
|
|
2
3
|
|
|
3
4
|
import click
|
|
@@ -71,6 +72,16 @@ _TESTRUN_LINKS_HELP = (
|
|
|
71
72
|
'([{"url":"https://ci.example/jobs/1","title":"CI Job","type":"Related"}]). '
|
|
72
73
|
"Types: Related, BlockedBy, Defect, Issue, Requirement, Repository"
|
|
73
74
|
)
|
|
75
|
+
_AUTOTEST_LAYER_HELP = (
|
|
76
|
+
"Default autotest pyramid layer for all imported tests "
|
|
77
|
+
"(E2E, UI, API, Contract, Integration, Component, Unit, or any string)"
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def _parse_autotest_layer(raw: typing.Optional[str]) -> typing.Optional[str]:
|
|
82
|
+
if raw is None or not str(raw).strip():
|
|
83
|
+
return None
|
|
84
|
+
return str(raw).strip()
|
|
74
85
|
|
|
75
86
|
|
|
76
87
|
@results.command("upload")
|
|
@@ -88,7 +99,8 @@ _TESTRUN_LINKS_HELP = (
|
|
|
88
99
|
@click.option("-d", "--debug", is_flag=True, help="Set debug logs")
|
|
89
100
|
@click.option("-dcv", "--disable-cert-validation", is_flag=True, help="Disables certificate validation")
|
|
90
101
|
@click.option("-iff", "--ignore-flaky-failure", is_flag=True, help="Ignore status flakyFailure in results")
|
|
91
|
-
|
|
102
|
+
@click.option("-al", "--autotest-layer", type=str, envvar='TMS_AUTOTEST_LAYER', default=None, help=_AUTOTEST_LAYER_HELP)
|
|
103
|
+
def upload_results(url, token, configuration_id, testrun_id, testruntags, testrunlinks, separator, namespace, classname, results, debug, attachments, disable_cert_validation, ignore_flaky_failure, autotest_layer):
|
|
92
104
|
"""Uploading results from different streams"""
|
|
93
105
|
config = Config(
|
|
94
106
|
url=url,
|
|
@@ -105,6 +117,7 @@ def upload_results(url, token, configuration_id, testrun_id, testruntags, testru
|
|
|
105
117
|
paths_to_attachments=list(chain.from_iterable(attachments)),
|
|
106
118
|
disable_cert_validation=disable_cert_validation,
|
|
107
119
|
ignore_flaky_failure=ignore_flaky_failure,
|
|
120
|
+
autotest_layer=_parse_autotest_layer(autotest_layer),
|
|
108
121
|
)
|
|
109
122
|
service = ServiceFactory().get(config)
|
|
110
123
|
|
|
@@ -128,8 +141,9 @@ def upload_results(url, token, configuration_id, testrun_id, testruntags, testru
|
|
|
128
141
|
@click.option("-d", "--debug", is_flag=True, help="Set debug logs")
|
|
129
142
|
@click.option("-dcv", "--disable-cert-validation", is_flag=True, help="Disables certificate validation")
|
|
130
143
|
@click.option("-iff", "--ignore-flaky-failure", is_flag=True, help="Ignore status flakyFailure in results")
|
|
144
|
+
@click.option("-al", "--autotest-layer", type=str, envvar='TMS_AUTOTEST_LAYER', default=None, help=_AUTOTEST_LAYER_HELP)
|
|
131
145
|
def import_results(url, token, project_id, configuration_id, testrun_id, testrun_name, testruntags, testrunlinks, separator, namespace, classname, results, debug,
|
|
132
|
-
attachments, disable_cert_validation, ignore_flaky_failure):
|
|
146
|
+
attachments, disable_cert_validation, ignore_flaky_failure, autotest_layer):
|
|
133
147
|
"""Uploading the first test results"""
|
|
134
148
|
if testrun_id is not None and testrun_name is not None:
|
|
135
149
|
click.echo("Illegal usage: `{}` are mutually exclusive arguments.".format(', '.join(["--testrun-id", "--testrun-name"])), err=True)
|
|
@@ -151,6 +165,7 @@ def import_results(url, token, project_id, configuration_id, testrun_id, testrun
|
|
|
151
165
|
paths_to_attachments=list(chain.from_iterable(attachments)),
|
|
152
166
|
disable_cert_validation=disable_cert_validation,
|
|
153
167
|
ignore_flaky_failure=ignore_flaky_failure,
|
|
168
|
+
autotest_layer=_parse_autotest_layer(autotest_layer),
|
|
154
169
|
)
|
|
155
170
|
service = ServiceFactory().get(config)
|
|
156
171
|
|
|
@@ -9,9 +9,11 @@ from adapters_api.model.assign_attachment_api_model import AssignAttachmentApiMo
|
|
|
9
9
|
from adapters_api.model.attachment_api_result import AttachmentApiResult
|
|
10
10
|
from adapters_api.model.attachment_put_model import AttachmentPutModel
|
|
11
11
|
from adapters_api.model.auto_test_api_result import AutoTestApiResult
|
|
12
|
+
from adapters_api.model.auto_test_create_api_model_layer import AutoTestCreateApiModelLayer
|
|
12
13
|
from adapters_api.model.auto_test_results_for_test_run_model import AutoTestResultsForTestRunModel
|
|
13
14
|
from adapters_api.model.auto_test_search_api_model_filter import AutoTestSearchApiModelFilter
|
|
14
15
|
from adapters_api.model.auto_test_search_api_model_includes import AutoTestSearchApiModelIncludes
|
|
16
|
+
from adapters_api.model.layer_source import LayerSource
|
|
15
17
|
from adapters_api.model.link_api_result import LinkApiResult
|
|
16
18
|
from adapters_api.model.test_result_short_response import TestResultShortResponse
|
|
17
19
|
from adapters_api.model.test_run_api_result import TestRunApiResult
|
|
@@ -23,6 +25,15 @@ from .models.testrun import TestRun
|
|
|
23
25
|
|
|
24
26
|
|
|
25
27
|
class Converter:
|
|
28
|
+
@staticmethod
|
|
29
|
+
def layer_to_api_model(layer_name: typing.Optional[str]) -> typing.Optional[AutoTestCreateApiModelLayer]:
|
|
30
|
+
if layer_name is None or not str(layer_name).strip():
|
|
31
|
+
return None
|
|
32
|
+
return AutoTestCreateApiModelLayer(
|
|
33
|
+
name=str(layer_name).strip(),
|
|
34
|
+
source=LayerSource("Run"),
|
|
35
|
+
)
|
|
36
|
+
|
|
26
37
|
@staticmethod
|
|
27
38
|
def project_id_and_external_id_to_autotests_search_post_request(
|
|
28
39
|
project_id: str, external_id: str) -> AdaptersAutoTestsSearchPostRequest:
|
|
@@ -85,26 +96,41 @@ class Converter:
|
|
|
85
96
|
|
|
86
97
|
@staticmethod
|
|
87
98
|
def test_result_to_create_autotest_request(
|
|
88
|
-
result: TestCase,
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
99
|
+
result: TestCase,
|
|
100
|
+
external_id: str,
|
|
101
|
+
project_id: str,
|
|
102
|
+
layer: typing.Optional[str] = None) -> AdaptersAutoTestsPostRequest:
|
|
103
|
+
request_kwargs = {
|
|
104
|
+
"external_id": external_id,
|
|
105
|
+
"project_id": project_id,
|
|
106
|
+
"name": result.get_name(),
|
|
107
|
+
"namespace": result.get_name_space(),
|
|
108
|
+
"classname": result.get_class_name(),
|
|
109
|
+
}
|
|
110
|
+
api_layer = Converter.layer_to_api_model(layer)
|
|
111
|
+
if api_layer is not None:
|
|
112
|
+
request_kwargs["layer"] = api_layer
|
|
113
|
+
return AdaptersAutoTestsPostRequest(**request_kwargs)
|
|
96
114
|
|
|
97
115
|
@staticmethod
|
|
98
116
|
def test_result_to_update_autotest_request(
|
|
99
|
-
result: TestCase,
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
117
|
+
result: TestCase,
|
|
118
|
+
external_id: str,
|
|
119
|
+
project_id: str,
|
|
120
|
+
layer: typing.Optional[str] = None) -> AdaptersAutoTestsPutRequest:
|
|
121
|
+
request_kwargs = {
|
|
122
|
+
"external_id": external_id,
|
|
123
|
+
"project_id": project_id,
|
|
124
|
+
"name": result.get_name(),
|
|
125
|
+
"namespace": result.get_name_space(),
|
|
126
|
+
"classname": result.get_class_name(),
|
|
127
|
+
"is_flaky": result.get_is_flaky(),
|
|
128
|
+
"reset_layer": False,
|
|
129
|
+
}
|
|
130
|
+
api_layer = Converter.layer_to_api_model(layer)
|
|
131
|
+
if api_layer is not None:
|
|
132
|
+
request_kwargs["layer"] = api_layer
|
|
133
|
+
return AdaptersAutoTestsPutRequest(**request_kwargs)
|
|
108
134
|
|
|
109
135
|
@staticmethod
|
|
110
136
|
def test_result_to_testrun_result_post_model(
|
|
@@ -34,7 +34,7 @@ class Importer:
|
|
|
34
34
|
if not autotests:
|
|
35
35
|
self.__api_client.create_autotest(
|
|
36
36
|
Converter.test_result_to_create_autotest_request(
|
|
37
|
-
result, external_id, self.__config.project_id
|
|
37
|
+
result, external_id, self.__config.project_id, self.__config.autotest_layer
|
|
38
38
|
)
|
|
39
39
|
)
|
|
40
40
|
else:
|
|
@@ -42,7 +42,7 @@ class Importer:
|
|
|
42
42
|
|
|
43
43
|
self.__api_client.update_autotest(
|
|
44
44
|
Converter.test_result_to_update_autotest_request(
|
|
45
|
-
result, external_id, self.__config.project_id
|
|
45
|
+
result, external_id, self.__config.project_id, self.__config.autotest_layer
|
|
46
46
|
)
|
|
47
47
|
)
|
|
48
48
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: testit-cli
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.11.0
|
|
4
4
|
Summary: This tool is the command line wrapper of Test IT allowing you to upload the test results in real time to Test IT
|
|
5
5
|
Home-page: https://pypi.org/project/testit-cli/
|
|
6
6
|
Author: Integration team
|
|
@@ -145,3 +145,31 @@ Notes:
|
|
|
145
145
|
- Test run tags/links are independent from autotest/result tags and links.
|
|
146
146
|
- On an existing run, new tags/links are **merged** (existing values are kept; duplicates by tag name / link URL are skipped).
|
|
147
147
|
- Empty or omitted values mean “do not change tags/links”.
|
|
148
|
+
|
|
149
|
+
## Autotest layer (test pyramid)
|
|
150
|
+
|
|
151
|
+
When importing XML results, CLI can set the **autotest** pyramid layer for every upserted autotest (create/update).
|
|
152
|
+
This is a **run-level default** for file-based import; adapters still read layer from test code annotations.
|
|
153
|
+
|
|
154
|
+
| Intent | CLI | Env |
|
|
155
|
+
|--------|-----|-----|
|
|
156
|
+
| Default autotest layer | `--autotest-layer` / `-al` | `TMS_AUTOTEST_LAYER` |
|
|
157
|
+
|
|
158
|
+
Supported commands: `results import`, `results upload`.
|
|
159
|
+
|
|
160
|
+
Recommended values: `E2E`, `UI`, `API`, `Contract`, `Integration`, `Component`, `Unit`. Any other non-empty string is accepted.
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
export TMS_AUTOTEST_LAYER=API
|
|
164
|
+
testit results import \
|
|
165
|
+
--url "$TMS_URL" \
|
|
166
|
+
--token "$TMS_TOKEN" \
|
|
167
|
+
--project-id "$TMS_PROJECT_ID" \
|
|
168
|
+
--configuration-id "$TMS_CONFIGURATION_ID" \
|
|
169
|
+
--results ./results
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
Behaviour (aligned with adapters API):
|
|
173
|
+
|
|
174
|
+
- Layer set → send `layer: { name, source: Run }` on create/update.
|
|
175
|
+
- Layer not set → do not send `layer`; on update always send `resetLayer: false`.
|
|
@@ -230,6 +230,7 @@ src/testit_cli/models/status_type.py
|
|
|
230
230
|
src/testit_cli/models/testcase.py
|
|
231
231
|
src/testit_cli/models/testrun.py
|
|
232
232
|
src/testit_cli/models/testrun_link.py
|
|
233
|
+
tests/test_autotest_layer.py
|
|
233
234
|
tests/test_click.py
|
|
234
235
|
tests/test_service.py
|
|
235
236
|
tests/test_testrun_metadata.py
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
from src.testit_cli.converter import Converter
|
|
3
|
+
from src.testit_cli.models.testcase import TestCase
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@pytest.mark.parametrize("raw", [None, "", " "])
|
|
7
|
+
def test_layer_to_api_model_omits_when_empty(raw):
|
|
8
|
+
assert Converter.layer_to_api_model(raw) is None
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_layer_to_api_model_maps_name_and_run_source():
|
|
12
|
+
layer = Converter.layer_to_api_model("API")
|
|
13
|
+
assert layer is not None
|
|
14
|
+
assert layer.name == "API"
|
|
15
|
+
assert str(layer.source) == "Run"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def test_create_autotest_request_includes_layer_when_set():
|
|
19
|
+
result = TestCase("test", "ns", "cls", 1)
|
|
20
|
+
request = Converter.test_result_to_create_autotest_request(
|
|
21
|
+
result, "ext-id", "proj-id", layer="E2E"
|
|
22
|
+
)
|
|
23
|
+
assert request.layer is not None
|
|
24
|
+
assert request.layer.name == "E2E"
|
|
25
|
+
assert str(request.layer.source) == "Run"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_create_autotest_request_omits_layer_when_not_set():
|
|
29
|
+
result = TestCase("test", "ns", "cls", 1)
|
|
30
|
+
request = Converter.test_result_to_create_autotest_request(
|
|
31
|
+
result, "ext-id", "proj-id"
|
|
32
|
+
)
|
|
33
|
+
assert "layer" not in request.to_dict()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_update_autotest_request_always_resets_layer_false_and_sets_layer_when_given():
|
|
37
|
+
result = TestCase("test", "ns", "cls", 1)
|
|
38
|
+
result.set_is_flaky(False)
|
|
39
|
+
request = Converter.test_result_to_update_autotest_request(
|
|
40
|
+
result, "ext-id", "proj-id", layer="API"
|
|
41
|
+
)
|
|
42
|
+
assert request.reset_layer is False
|
|
43
|
+
assert request.layer is not None
|
|
44
|
+
assert request.layer.name == "API"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/configurations_api.py
RENAMED
|
File without changes
|
{testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/custom_attributes_api.py
RENAMED
|
File without changes
|
|
File without changes
|
{testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/project_attributes_api.py
RENAMED
|
File without changes
|
{testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/project_sections_api.py
RENAMED
|
File without changes
|
{testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/api/project_work_items_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/attachment_api_result.py
RENAMED
|
File without changes
|
{testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/attachment_model.py
RENAMED
|
File without changes
|
{testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/attachment_put_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{testit_cli-2.10.3 → testit_cli-2.11.0}/src/testit_cli/adapters_api/model/auto_test_api_result.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|