diff --git a/sdk/loadtesting/azure-developer-loadtesting/_meta.json b/sdk/loadtesting/azure-developer-loadtesting/_meta.json new file mode 100644 index 000000000000..e9e60fabadaf --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/_meta.json @@ -0,0 +1,6 @@ +{ + "commit": "ce46dc3e04b0bc3a7b04d9c715c1107186978a5c", + "repository_url": "https://github.com/Azure/azure-rest-api-specs", + "typespec_src": "specification/loadtestservice/LoadTestService", + "@azure-tools/typespec-python": "0.37.1" +} \ No newline at end of file diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/__init__.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/__init__.py index c9943fbd0915..d19564faeddf 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/__init__.py +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/__init__.py @@ -1,10 +1,38 @@ -# ------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from ._client import LoadTestAdministrationClient, LoadTestRunClient +# pylint: disable=wrong-import-position + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._client import LoadTestAdministrationClient # type: ignore +from ._client import LoadTestRunClient # type: ignore +from ._client import LoadTestAdministrationClient # type: ignore +from ._client import LoadTestRunClient # type: ignore from ._version import VERSION __version__ = VERSION -__all__ = ["LoadTestAdministrationClient", "LoadTestRunClient"] + +try: + from ._patch import __all__ as _patch_all + from ._patch import * +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk + +__all__ = [ + "LoadTestAdministrationClient", + "LoadTestRunClient", + "LoadTestAdministrationClient", + "LoadTestRunClient", +] +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore + +_patch_sdk() diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_client.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_client.py index c5c9808f7ed4..ffd4ab6b46b7 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_client.py +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_client.py @@ -1,34 +1,67 @@ -# ------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- + from copy import deepcopy from typing import Any, TYPE_CHECKING +from typing_extensions import Self from azure.core import PipelineClient +from azure.core.pipeline import policies from azure.core.rest import HttpRequest, HttpResponse -from ._generated._configuration import LoadTestingClientConfiguration -from ._generated._serialization import Deserializer, Serializer -from ._generated.operations import AdministrationOperations, TestRunOperations +from ._configuration import LoadTestAdministrationClientConfiguration, LoadTestRunClientConfiguration +from ._operations import LoadTestAdministrationClientOperationsMixin, LoadTestRunClientOperationsMixin +from ._serialization import Deserializer, Serializer if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports from azure.core.credentials import TokenCredential -class _BaseClient: + +class LoadTestAdministrationClient(LoadTestAdministrationClientOperationsMixin): + """LoadTestAdministrationClient. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: - _endpoint = "https://{Endpoint}" - self._config = LoadTestingClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) - self._client = PipelineClient(base_url=_endpoint, config=self._config, **kwargs) + _endpoint = "https://{endpoint}" + self._config = LoadTestAdministrationClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) self._serialize = Serializer() self._deserialize = Deserializer() self._serialize.client_side_validation = False - super().__init__(self._client, self._config, self._serialize, self._deserialize) - def send_request(self, request: HttpRequest, **kwargs: Any) -> HttpResponse: + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: """Runs the network request through the client's chained policies. >>> from azure.core.rest import HttpRequest @@ -48,50 +81,246 @@ def send_request(self, request: HttpRequest, **kwargs: Any) -> HttpResponse: request_copy = deepcopy(request) path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), } request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) - return self._client.send_request(request_copy, **kwargs) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore - def close(self): - # type: () -> None + def close(self) -> None: self._client.close() - def __exit__(self, *exc_details): - # type: (Any) -> None + def __enter__(self) -> Self: + self._client.__enter__() + return self + + def __exit__(self, *exc_details: Any) -> None: self._client.__exit__(*exc_details) -class LoadTestAdministrationClient(_BaseClient, AdministrationOperations): # pylint: disable=client-accepts-api-version-keyword - """These APIs allow end users to do various administrative operations on Azure Load Test Service. +class LoadTestRunClient(LoadTestRunClientOperationsMixin): + """LoadTestRunClient. - :param endpoint: URL to perform data plane API operations on the resource. Required. + :param endpoint: Required. :type endpoint: str - :param credential: Credential needed for the client to connect to Azure. Required. + :param credential: Credential used to authenticate requests to the service. Required. :type credential: ~azure.core.credentials.TokenCredential - :keyword api_version: Api Version. Default value is "2022-11-01". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. :paramtype api_version: str """ - def __enter__(self) -> "LoadTestAdministrationClient": + def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "https://{endpoint}" + self._config = LoadTestRunClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> Self: self._client.__enter__() return self -class LoadTestRunClient(_BaseClient, TestRunOperations): # pylint: disable=client-accepts-api-version-keyword - """These APIs allow end users to run Azure Load Test and manage test run. + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) + + +class LoadTestAdministrationClient(LoadTestAdministrationClientOperationsMixin): + """LoadTestAdministrationClient. - :param endpoint: URL to perform data plane API operations on the resource. Required. + :param endpoint: Required. :type endpoint: str - :param credential: Credential needed for the client to connect to Azure. Required. + :param credential: Credential used to authenticate requests to the service. Required. :type credential: ~azure.core.credentials.TokenCredential - :keyword api_version: Api Version. Default value is "2022-11-01". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. :paramtype api_version: str """ - def __enter__(self) -> "LoadTestRunClient": + def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "https://{endpoint}" + self._config = LoadTestAdministrationClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> Self: + self._client.__enter__() + return self + + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) + + +class LoadTestRunClient(LoadTestRunClientOperationsMixin): + """LoadTestRunClient. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: + _endpoint = "https://{endpoint}" + self._config = LoadTestRunClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: PipelineClient = PipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + def close(self) -> None: + self._client.close() + + def __enter__(self) -> Self: self._client.__enter__() return self + def __exit__(self, *exc_details: Any) -> None: + self._client.__exit__(*exc_details) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_configuration.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_configuration.py new file mode 100644 index 000000000000..49af22147e74 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_configuration.py @@ -0,0 +1,208 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, TYPE_CHECKING + +from azure.core.pipeline import policies + +from ._version import VERSION + +if TYPE_CHECKING: + from azure.core.credentials import TokenCredential + + +class LoadTestAdministrationClientConfiguration: # pylint: disable=too-many-instance-attributes,name-too-long + """Configuration for LoadTestAdministrationClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: + api_version: str = kwargs.pop("api_version", "2024-12-01-preview") + + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.endpoint = endpoint + self.credential = credential + self.api_version = api_version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class LoadTestRunClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for LoadTestRunClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: + api_version: str = kwargs.pop("api_version", "2024-12-01-preview") + + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.endpoint = endpoint + self.credential = credential + self.api_version = api_version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class LoadTestAdministrationClientConfiguration: # pylint: disable=too-many-instance-attributes,name-too-long + """Configuration for LoadTestAdministrationClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: + api_version: str = kwargs.pop("api_version", "2024-12-01-preview") + + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.endpoint = endpoint + self.credential = credential + self.api_version = api_version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class LoadTestRunClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for LoadTestRunClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials.TokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: + api_version: str = kwargs.pop("api_version", "2024-12-01-preview") + + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.endpoint = endpoint + self.credential = credential + self.api_version = api_version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/__init__.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/__init__.py deleted file mode 100644 index 8e63d39f5980..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from ._client import LoadTestingClient -from ._version import VERSION - -__version__ = VERSION - -try: - from ._patch import __all__ as _patch_all - from ._patch import * # pylint: disable=unused-wildcard-import -except ImportError: - _patch_all = [] -from ._patch import patch_sdk as _patch_sdk - -__all__ = [ - "LoadTestingClient", -] -__all__.extend([p for p in _patch_all if p not in __all__]) - -_patch_sdk() diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_client.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_client.py deleted file mode 100644 index 6512a5c6b7bd..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_client.py +++ /dev/null @@ -1,88 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from copy import deepcopy -from typing import Any, TYPE_CHECKING - -from azure.core import PipelineClient -from azure.core.rest import HttpRequest, HttpResponse - -from ._configuration import LoadTestingClientConfiguration -from ._serialization import Deserializer, Serializer -from .operations import AdministrationOperations, TestRunOperations - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials import TokenCredential - - -class LoadTestingClient: # pylint: disable=client-accepts-api-version-keyword - """These APIs allow end users to create, view and run load tests using Azure Load Test Service. - - :ivar administration: AdministrationOperations operations - :vartype administration: - azure.developer.loadtesting._generated.operations.AdministrationOperations - :ivar test_run: TestRunOperations operations - :vartype test_run: azure.developer.loadtesting._generated.operations.TestRunOperations - :param endpoint: URL to perform data plane API operations on the resource. Required. - :type endpoint: str - :param credential: Credential needed for the client to connect to Azure. Required. - :type credential: ~azure.core.credentials.TokenCredential - :keyword api_version: Api Version. Default value is "2022-11-01". Note that overriding this - default value may result in unsupported behavior. - :paramtype api_version: str - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - """ - - def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: - _endpoint = "https://{Endpoint}" - self._config = LoadTestingClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) - self._client = PipelineClient(base_url=_endpoint, config=self._config, **kwargs) - - self._serialize = Serializer() - self._deserialize = Deserializer() - self._serialize.client_side_validation = False - self.administration = AdministrationOperations(self._client, self._config, self._serialize, self._deserialize) - self.test_run = TestRunOperations(self._client, self._config, self._serialize, self._deserialize) - - def send_request(self, request: HttpRequest, **kwargs: Any) -> HttpResponse: - """Runs the network request through the client's chained policies. - - >>> from azure.core.rest import HttpRequest - >>> request = HttpRequest("GET", "https://www.example.org/") - - >>> response = client.send_request(request) - - - For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request - - :param request: The network request you want to make. Required. - :type request: ~azure.core.rest.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.HttpResponse - """ - - request_copy = deepcopy(request) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - - request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) - return self._client.send_request(request_copy, **kwargs) - - def close(self) -> None: - self._client.close() - - def __enter__(self) -> "LoadTestingClient": - self._client.__enter__() - return self - - def __exit__(self, *exc_details: Any) -> None: - self._client.__exit__(*exc_details) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_configuration.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_configuration.py deleted file mode 100644 index 8731e1db8e0c..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_configuration.py +++ /dev/null @@ -1,71 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -import sys -from typing import Any, TYPE_CHECKING - -from azure.core.configuration import Configuration -from azure.core.pipeline import policies - -from ._version import VERSION - -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials import TokenCredential - - -class LoadTestingClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes - """Configuration for LoadTestingClient. - - Note that all parameters used to create this instance are saved as instance - attributes. - - :param endpoint: URL to perform data plane API operations on the resource. Required. - :type endpoint: str - :param credential: Credential needed for the client to connect to Azure. Required. - :type credential: ~azure.core.credentials.TokenCredential - :keyword api_version: Api Version. Default value is "2022-11-01". Note that overriding this - default value may result in unsupported behavior. - :paramtype api_version: str - """ - - def __init__(self, endpoint: str, credential: "TokenCredential", **kwargs: Any) -> None: - super(LoadTestingClientConfiguration, self).__init__(**kwargs) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", "2022-11-01") - - if endpoint is None: - raise ValueError("Parameter 'endpoint' must not be None.") - if credential is None: - raise ValueError("Parameter 'credential' must not be None.") - - self.endpoint = endpoint - self.credential = credential - self.api_version = api_version - self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) - kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) - self._configure(**kwargs) - - def _configure(self, **kwargs: Any) -> None: - self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) - self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) - self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) - self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) - self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) - self.retry_policy = kwargs.get("retry_policy") or policies.RetryPolicy(**kwargs) - self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) - self.redirect_policy = kwargs.get("redirect_policy") or policies.RedirectPolicy(**kwargs) - self.authentication_policy = kwargs.get("authentication_policy") - if self.credential and not self.authentication_policy: - self.authentication_policy = policies.BearerTokenCredentialPolicy( - self.credential, *self.credential_scopes, **kwargs - ) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_vendor.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_vendor.py deleted file mode 100644 index 8598d2b74592..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_vendor.py +++ /dev/null @@ -1,20 +0,0 @@ -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from typing import List, cast - - -def _format_url_section(template, **kwargs): - components = template.split("/") - while components: - try: - return template.format(**kwargs) - except KeyError as key: - # Need the cast, as for some reasons "split" is typed as list[str | Any] - formatted_components = cast(List[str], template.split("/")) - components = [c for c in formatted_components if "{}".format(key.args[0]) not in c] - template = "/".join(components) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_version.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_version.py deleted file mode 100644 index c47f66669f1b..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_version.py +++ /dev/null @@ -1,9 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -VERSION = "1.0.0" diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/__init__.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/__init__.py deleted file mode 100644 index 0f9a8d5b46a5..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/__init__.py +++ /dev/null @@ -1,23 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from ._client import LoadTestingClient - -try: - from ._patch import __all__ as _patch_all - from ._patch import * # pylint: disable=unused-wildcard-import -except ImportError: - _patch_all = [] -from ._patch import patch_sdk as _patch_sdk - -__all__ = [ - "LoadTestingClient", -] -__all__.extend([p for p in _patch_all if p not in __all__]) - -_patch_sdk() diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_client.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_client.py deleted file mode 100644 index 15aa827f8da7..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_client.py +++ /dev/null @@ -1,88 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from copy import deepcopy -from typing import Any, Awaitable, TYPE_CHECKING - -from azure.core import AsyncPipelineClient -from azure.core.rest import AsyncHttpResponse, HttpRequest - -from .._serialization import Deserializer, Serializer -from ._configuration import LoadTestingClientConfiguration -from .operations import AdministrationOperations, TestRunOperations - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials_async import AsyncTokenCredential - - -class LoadTestingClient: # pylint: disable=client-accepts-api-version-keyword - """These APIs allow end users to create, view and run load tests using Azure Load Test Service. - - :ivar administration: AdministrationOperations operations - :vartype administration: - azure.developer.loadtesting._generated.aio.operations.AdministrationOperations - :ivar test_run: TestRunOperations operations - :vartype test_run: azure.developer.loadtesting._generated.aio.operations.TestRunOperations - :param endpoint: URL to perform data plane API operations on the resource. Required. - :type endpoint: str - :param credential: Credential needed for the client to connect to Azure. Required. - :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: Api Version. Default value is "2022-11-01". Note that overriding this - default value may result in unsupported behavior. - :paramtype api_version: str - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - """ - - def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: - _endpoint = "https://{Endpoint}" - self._config = LoadTestingClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) - self._client = AsyncPipelineClient(base_url=_endpoint, config=self._config, **kwargs) - - self._serialize = Serializer() - self._deserialize = Deserializer() - self._serialize.client_side_validation = False - self.administration = AdministrationOperations(self._client, self._config, self._serialize, self._deserialize) - self.test_run = TestRunOperations(self._client, self._config, self._serialize, self._deserialize) - - def send_request(self, request: HttpRequest, **kwargs: Any) -> Awaitable[AsyncHttpResponse]: - """Runs the network request through the client's chained policies. - - >>> from azure.core.rest import HttpRequest - >>> request = HttpRequest("GET", "https://www.example.org/") - - >>> response = await client.send_request(request) - - - For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request - - :param request: The network request you want to make. Required. - :type request: ~azure.core.rest.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.AsyncHttpResponse - """ - - request_copy = deepcopy(request) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - - request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) - return self._client.send_request(request_copy, **kwargs) - - async def close(self) -> None: - await self._client.close() - - async def __aenter__(self) -> "LoadTestingClient": - await self._client.__aenter__() - return self - - async def __aexit__(self, *exc_details: Any) -> None: - await self._client.__aexit__(*exc_details) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_configuration.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_configuration.py deleted file mode 100644 index c6e58b2592e7..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_configuration.py +++ /dev/null @@ -1,71 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -import sys -from typing import Any, TYPE_CHECKING - -from azure.core.configuration import Configuration -from azure.core.pipeline import policies - -from .._version import VERSION - -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials_async import AsyncTokenCredential - - -class LoadTestingClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes - """Configuration for LoadTestingClient. - - Note that all parameters used to create this instance are saved as instance - attributes. - - :param endpoint: URL to perform data plane API operations on the resource. Required. - :type endpoint: str - :param credential: Credential needed for the client to connect to Azure. Required. - :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: Api Version. Default value is "2022-11-01". Note that overriding this - default value may result in unsupported behavior. - :paramtype api_version: str - """ - - def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: - super(LoadTestingClientConfiguration, self).__init__(**kwargs) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", "2022-11-01") - - if endpoint is None: - raise ValueError("Parameter 'endpoint' must not be None.") - if credential is None: - raise ValueError("Parameter 'credential' must not be None.") - - self.endpoint = endpoint - self.credential = credential - self.api_version = api_version - self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) - kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) - self._configure(**kwargs) - - def _configure(self, **kwargs: Any) -> None: - self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) - self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) - self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) - self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) - self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) - self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) - self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) - self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) - self.authentication_policy = kwargs.get("authentication_policy") - if self.credential and not self.authentication_policy: - self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( - self.credential, *self.credential_scopes, **kwargs - ) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_vendor.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_vendor.py deleted file mode 100644 index 3e21ea6effcb..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_vendor.py +++ /dev/null @@ -1,17 +0,0 @@ -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - - -def raise_if_not_implemented(cls, abstract_methods): - not_implemented = [f for f in abstract_methods if not callable(getattr(cls, f, None))] - if not_implemented: - raise NotImplementedError( - "The following methods on operation group '{}' are not implemented: '{}'." - " Please refer to https://aka.ms/azsdk/python/dpcodegen/python/customize to learn how to customize.".format( - cls.__name__, "', '".join(not_implemented) - ) - ) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/operations/__init__.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/operations/__init__.py deleted file mode 100644 index 499aa580cf02..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/operations/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from ._operations import AdministrationOperations -from ._operations import TestRunOperations - -from ._patch import __all__ as _patch_all -from ._patch import * # pylint: disable=unused-wildcard-import -from ._patch import patch_sdk as _patch_sdk - -__all__ = [ - "AdministrationOperations", - "TestRunOperations", -] -__all__.extend([p for p in _patch_all if p not in __all__]) -_patch_sdk() diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/operations/_operations.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/operations/_operations.py deleted file mode 100644 index 4c7b50088133..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/operations/_operations.py +++ /dev/null @@ -1,6517 +0,0 @@ -# pylint: disable=too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -import datetime -import sys -from typing import Any, AsyncIterable, Callable, Dict, IO, Optional, TypeVar, Union, cast, overload -import urllib.parse - -from azure.core.async_paging import AsyncItemPaged, AsyncList -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - map_error, -) -from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpResponse -from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod -from azure.core.polling.async_base_polling import AsyncLROBasePolling -from azure.core.rest import HttpRequest -from azure.core.tracing.decorator import distributed_trace -from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.utils import case_insensitive_dict - -from ...operations._operations import ( - build_administration_begin_upload_test_file_request, - build_administration_create_or_update_app_components_request, - build_administration_create_or_update_server_metrics_config_request, - build_administration_create_or_update_test_request, - build_administration_delete_test_file_request, - build_administration_delete_test_request, - build_administration_get_app_components_request, - build_administration_get_server_metrics_config_request, - build_administration_get_test_file_request, - build_administration_get_test_request, - build_administration_list_test_files_request, - build_administration_list_tests_request, - build_test_run_create_or_update_app_components_request, - build_test_run_create_or_update_server_metrics_config_request, - build_test_run_delete_test_run_request, - build_test_run_get_app_components_request, - build_test_run_get_metric_definitions_request, - build_test_run_get_metric_namespaces_request, - build_test_run_get_server_metrics_config_request, - build_test_run_get_test_run_file_request, - build_test_run_get_test_run_request, - build_test_run_list_metric_dimension_values_request, - build_test_run_list_metrics_request, - build_test_run_list_test_runs_request, - build_test_run_stop_test_run_request, - build_test_run_test_run_request, -) - -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore # pylint: disable=ungrouped-imports -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] - - -class AdministrationOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.developer.loadtesting._generated.aio.LoadTestingClient`'s - :attr:`administration` attribute. - """ - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @overload - async def create_or_update_test( - self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Create a new test or update an existing test. - - Create a new test or update an existing test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Load test model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - - @overload - async def create_or_update_test( - self, test_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Create a new test or update an existing test. - - Create a new test or update an existing test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Load test model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - - @distributed_trace_async - async def create_or_update_test(self, test_id: str, body: Union[JSON, IO], **kwargs: Any) -> JSON: - """Create a new test or update an existing test. - - Create a new test or update an existing test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Load test model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_administration_create_or_update_test_request( - test_id=test_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace_async - async def delete_test(self, test_id: str, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-statements - """Delete a test by its name. - - Delete a test by its name. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: None - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - request = build_administration_delete_test_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if cls: - return cls(pipeline_response, None, {}) - - @distributed_trace_async - async def get_test(self, test_id: str, **kwargs: Any) -> JSON: - """Get load test details by test name. - - Get load test details by test name. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_administration_get_test_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace - def list_tests( - self, - *, - orderby: Optional[str] = None, - search: Optional[str] = None, - last_modified_start_time: Optional[datetime.datetime] = None, - last_modified_end_time: Optional[datetime.datetime] = None, - **kwargs: Any - ) -> AsyncIterable[JSON]: - """Get all load tests by the fully qualified resource Id e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - - Get all load tests by the fully qualified resource Id e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - - :keyword orderby: Sort on the supported fields in (field asc/desc) format. eg: - lastModifiedDateTime asc. Supported fields - lastModifiedDateTime. Default value is None. - :paramtype orderby: str - :keyword search: Prefix based, case sensitive search on searchable fields - displayName, - createdBy. For example, to search for a test, with display name is Login Test, the search - parameter can be Login. Default value is None. - :paramtype search: str - :keyword last_modified_start_time: Start DateTime(ISO 8601 literal format) of the last updated - time range to filter tests. Default value is None. - :paramtype last_modified_start_time: ~datetime.datetime - :keyword last_modified_end_time: End DateTime(ISO 8601 literal format) of the last updated time - range to filter tests. Default value is None. - :paramtype last_modified_end_time: ~datetime.datetime - :return: An iterator like instance of JSON object - :rtype: ~azure.core.async_paging.AsyncItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - request = build_administration_list_tests_request( - orderby=orderby, - search=search, - last_modified_start_time=last_modified_start_time, - last_modified_end_time=last_modified_end_time, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - async def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, AsyncList(list_of_elem) - - async def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return AsyncItemPaged(get_next, extract_data) - - @distributed_trace_async - async def begin_upload_test_file( - self, test_id: str, file_name: str, body: IO, *, file_type: Optional[str] = None, **kwargs: Any - ) -> JSON: - """Upload input file for a given test name. File size can't be more than 50 MB. Existing file with - same name for the given test will be overwritten. File should be provided in the request body - as application/octet-stream. - - Upload input file for a given test name. File size can't be more than 50 MB. Existing file with - same name for the given test will be overwritten. File should be provided in the request body - as application/octet-stream. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param file_name: Unique name for test file with file extension like : App.jmx. Required. - :type file_name: str - :param body: The file content as application/octet-stream. Required. - :type body: IO - :keyword file_type: File type. Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". Default value is None. - :paramtype file_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 201 - response == { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry time of the file - (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: "JMX_FILE", - "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation failure error - details. - "validationStatus": "str" # Optional. Validation status of the file. Known - values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - _content = body - - request = build_administration_begin_upload_test_file_request( - test_id=test_id, - file_name=file_name, - file_type=file_type, - content_type=content_type, - api_version=self._config.api_version, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace_async - async def get_test_file(self, test_id: str, file_name: str, **kwargs: Any) -> JSON: - """Get test file by the file name. - - Get test file by the file name. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param file_name: File name with file extension like app.jmx. Required. - :type file_name: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry time of the file - (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: "JMX_FILE", - "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation failure error - details. - "validationStatus": "str" # Optional. Validation status of the file. Known - values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_administration_get_test_file_request( - test_id=test_id, - file_name=file_name, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace_async - async def delete_test_file( # pylint: disable=inconsistent-return-statements - self, test_id: str, file_name: str, **kwargs: Any - ) -> None: - """Delete file by the file name for a test. - - Delete file by the file name for a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param file_name: File name with file extension like app.jmx. Required. - :type file_name: str - :return: None - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - request = build_administration_delete_test_file_request( - test_id=test_id, - file_name=file_name, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if cls: - return cls(pipeline_response, None, {}) - - @distributed_trace - def list_test_files(self, test_id: str, **kwargs: Any) -> AsyncIterable[JSON]: - """Get all test files. - - Get all test files. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.async_paging.AsyncItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry time of the file - (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: "JMX_FILE", - "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation failure error - details. - "validationStatus": "str" # Optional. Validation status of the file. Known - values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - request = build_administration_list_test_files_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - async def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, AsyncList(list_of_elem) - - async def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return AsyncItemPaged(get_next, extract_data) - - @overload - async def create_or_update_app_components( - self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Associate an app component (collection of azure resources) to a test. - - Associate an app component (collection of azure resources) to a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: App Component model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - """ - - @overload - async def create_or_update_app_components( - self, test_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Associate an app component (collection of azure resources) to a test. - - Associate an app component (collection of azure resources) to a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: App Component model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - """ - - @distributed_trace_async - async def create_or_update_app_components(self, test_id: str, body: Union[JSON, IO], **kwargs: Any) -> JSON: - """Associate an app component (collection of azure resources) to a test. - - Associate an app component (collection of azure resources) to a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: App Component model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_administration_create_or_update_app_components_request( - test_id=test_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace_async - async def get_app_components(self, test_id: str, **kwargs: Any) -> JSON: - """Get associated app component (collection of azure resources) for the given test. - - Get associated app component (collection of azure resources) for the given test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_administration_get_app_components_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @overload - async def create_or_update_server_metrics_config( - self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Configure server metrics for a test. - - Configure server metrics for a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Server metric configuration model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - """ - - @overload - async def create_or_update_server_metrics_config( - self, test_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Configure server metrics for a test. - - Configure server metrics for a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Server metric configuration model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - """ - - @distributed_trace_async - async def create_or_update_server_metrics_config(self, test_id: str, body: Union[JSON, IO], **kwargs: Any) -> JSON: - """Configure server metrics for a test. - - Configure server metrics for a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Server metric configuration model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_administration_create_or_update_server_metrics_config_request( - test_id=test_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace_async - async def get_server_metrics_config(self, test_id: str, **kwargs: Any) -> JSON: - """List server metrics configuration for the given test. - - List server metrics configuration for the given test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_administration_get_server_metrics_config_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - -class TestRunOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.developer.loadtesting._generated.aio.LoadTestingClient`'s - :attr:`test_run` attribute. - """ - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - async def _test_run_initial( - self, test_run_id: str, body: Union[JSON, IO], *, old_test_run_id: Optional[str] = None, **kwargs: Any - ) -> JSON: - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_test_run_test_run_request( - test_run_id=test_run_id, - old_test_run_id=old_test_run_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @overload - async def begin_test_run( - self, - test_run_id: str, - body: JSON, - *, - old_test_run_id: Optional[str] = None, - content_type: str = "application/merge-patch+json", - **kwargs: Any - ) -> AsyncLROPoller[JSON]: - """Create and start a new test run with the given name. - - Create and start a new test run with the given name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Load test run model. Required. - :type body: JSON - :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is - provided, the test will run with the JMX file, configuration and app components from the - existing test run. You can override the configuration values for new test run in the request - body. Default value is None. - :paramtype old_test_run_id: str - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be AsyncLROBasePolling. Pass in False - for this operation to not poll, or pass in your own initialized polling object for a personal - polling strategy. - :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of AsyncLROPoller that returns JSON object - :rtype: ~azure.core.polling.AsyncLROPoller[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - - @overload - async def begin_test_run( - self, - test_run_id: str, - body: IO, - *, - old_test_run_id: Optional[str] = None, - content_type: str = "application/merge-patch+json", - **kwargs: Any - ) -> AsyncLROPoller[JSON]: - """Create and start a new test run with the given name. - - Create and start a new test run with the given name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Load test run model. Required. - :type body: IO - :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is - provided, the test will run with the JMX file, configuration and app components from the - existing test run. You can override the configuration values for new test run in the request - body. Default value is None. - :paramtype old_test_run_id: str - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be AsyncLROBasePolling. Pass in False - for this operation to not poll, or pass in your own initialized polling object for a personal - polling strategy. - :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of AsyncLROPoller that returns JSON object - :rtype: ~azure.core.polling.AsyncLROPoller[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - - @distributed_trace_async - async def begin_test_run( - self, test_run_id: str, body: Union[JSON, IO], *, old_test_run_id: Optional[str] = None, **kwargs: Any - ) -> AsyncLROPoller[JSON]: - """Create and start a new test run with the given name. - - Create and start a new test run with the given name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Load test run model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is - provided, the test will run with the JMX file, configuration and app components from the - existing test run. You can override the configuration values for new test run in the request - body. Default value is None. - :paramtype old_test_run_id: str - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be AsyncLROBasePolling. Pass in False - for this operation to not poll, or pass in your own initialized polling object for a personal - polling strategy. - :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of AsyncLROPoller that returns JSON object - :rtype: ~azure.core.polling.AsyncLROPoller[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = await self._test_run_initial( - test_run_id=test_run_id, - body=body, - old_test_run_id=old_test_run_id, - content_type=content_type, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - kwargs.pop("error_map", None) - - def get_long_running_output(pipeline_response): - response = pipeline_response.http_response - if response.content: - deserialized = response.json() - else: - deserialized = None - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - - if polling is True: - polling_method: AsyncPollingMethod = cast( - AsyncPollingMethod, - AsyncLROBasePolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs), - ) - elif polling is False: - polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) - else: - polling_method = polling - if cont_token: - return AsyncLROPoller.from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) # type: ignore - - @distributed_trace_async - async def get_test_run(self, test_run_id: str, **kwargs: Any) -> JSON: - """Get test run details by name. - - Get test run details by name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_test_run_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace_async - async def delete_test_run( # pylint: disable=inconsistent-return-statements - self, test_run_id: str, **kwargs: Any - ) -> None: - """Delete a test run by its name. - - Delete a test run by its name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: None - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - request = build_test_run_delete_test_run_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if cls: - return cls(pipeline_response, None, {}) - - @distributed_trace_async - async def get_test_run_file(self, test_run_id: str, file_name: str, **kwargs: Any) -> JSON: - """Get test run file by file name. - - Get test run file by file name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param file_name: Test run file name with file extension. Required. - :type file_name: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry time of the file - (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: "JMX_FILE", - "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation failure error - details. - "validationStatus": "str" # Optional. Validation status of the file. Known - values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_test_run_file_request( - test_run_id=test_run_id, - file_name=file_name, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace - def list_test_runs( - self, - *, - orderby: Optional[str] = None, - search: Optional[str] = None, - test_id: Optional[str] = None, - execution_from: Optional[datetime.datetime] = None, - execution_to: Optional[datetime.datetime] = None, - status: Optional[str] = None, - **kwargs: Any - ) -> AsyncIterable[JSON]: - """Get all test runs with given filters. - - Get all test runs with given filters. - - :keyword orderby: Sort on the supported fields in (field asc/desc) format. eg: executedDateTime - asc. Supported fields - executedDateTime. Default value is None. - :paramtype orderby: str - :keyword search: Prefix based, case sensitive search on searchable fields - description, - executedUser. For example, to search for a test run, with description 500 VUs, the search - parameter can be 500. Default value is None. - :paramtype search: str - :keyword test_id: Unique name of an existing load test. Default value is None. - :paramtype test_id: str - :keyword execution_from: Start DateTime(ISO 8601 literal format) of test-run execution time - filter range. Default value is None. - :paramtype execution_from: ~datetime.datetime - :keyword execution_to: End DateTime(ISO 8601 literal format) of test-run execution time filter - range. Default value is None. - :paramtype execution_to: ~datetime.datetime - :keyword status: Comma separated list of test run status. Default value is None. - :paramtype status: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.async_paging.AsyncItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - request = build_test_run_list_test_runs_request( - orderby=orderby, - search=search, - test_id=test_id, - execution_from=execution_from, - execution_to=execution_to, - status=status, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - async def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, AsyncList(list_of_elem) - - async def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return AsyncItemPaged(get_next, extract_data) - - @distributed_trace_async - async def stop_test_run(self, test_run_id: str, **kwargs: Any) -> JSON: - """Stop test run by name. - - Stop test run by name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_stop_test_run_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace_async - async def get_metric_namespaces(self, test_run_id: str, **kwargs: Any) -> JSON: - """List the metric namespaces for a load test run. - - List the metric namespaces for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "value": [ - { - "description": "str", # Optional. The namespace description. - "name": "str" # Optional. The metric namespace name. - } - ] - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_metric_namespaces_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace_async - async def get_metric_definitions(self, test_run_id: str, *, metric_namespace: str, **kwargs: Any) -> JSON: - """List the metric definitions for a load test run. - - List the metric definitions for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "value": [ - { - "description": "str", # Optional. The metric description. - "dimensions": [ - { - "description": "str", # Optional. The - description. - "name": "str" # Optional. The name. - } - ], - "metricAvailabilities": [ - { - "timeGrain": "str" # Optional. The time - grain specifies the aggregation interval for the metric. - Expressed as a duration 'PT1M', 'PT1H', etc. Known values are: - "PT5S", "PT10S", "PT1M", "PT5M", and "PT1H". - } - ], - "name": "str", # Optional. The metric name. - "namespace": "str", # Optional. The namespace the metric - belongs to. - "primaryAggregationType": "str", # Optional. The primary - aggregation type value defining how to use the values for display. Known - values are: "Average", "Count", "None", "Total", "Percentile90", - "Percentile95", and "Percentile99". - "supportedAggregationTypes": [ - "str" # Optional. The collection of what all - aggregation types are supported. - ], - "unit": "str" # Optional. The unit of the metric. Known - values are: "NotSpecified", "Percent", "Count", "Seconds", - "Milliseconds", "Bytes", "BytesPerSecond", and "CountPerSecond". - } - ] - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_metric_definitions_request( - test_run_id=test_run_id, - metric_namespace=metric_namespace, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @overload - def list_metrics( - self, - test_run_id: str, - body: Optional[JSON] = None, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - aggregation: Optional[str] = None, - interval: Optional[str] = None, - content_type: str = "application/json", - **kwargs: Any - ) -> AsyncIterable[JSON]: - """List the metric values for a load test run. - - List the metric values for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Metric dimension filter. Default value is None. - :type body: JSON - :keyword metric_name: Metric name. Required. - :paramtype metric_name: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :keyword time_interval: The timespan of the query. It is a string with the following format - 'startDateTime_ISO/endDateTime_ISO'. Required. - :paramtype time_interval: str - :keyword aggregation: The aggregation. Default value is None. - :paramtype aggregation: str - :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", - "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. - :paramtype interval: str - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.async_paging.AsyncItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "filters": [ - { - "name": "str", # Optional. The dimension name. - "values": [ - "str" # Optional. The dimension values. Maximum - values can be 20. - ] - } - ] - } - - # response body for status code(s): 200 - response == { - "data": [ - { - "timestamp": "str", # Optional. The timestamp for the metric - value in ISO 8601 format. - "value": 0.0 # Optional. The metric value. - } - ], - "dimensionValues": [ - { - "name": "str", # Optional. The name of the dimension. - "value": "str" # Optional. The value of the dimension. - } - ] - } - """ - - @overload - def list_metrics( - self, - test_run_id: str, - body: Optional[IO] = None, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - aggregation: Optional[str] = None, - interval: Optional[str] = None, - content_type: str = "application/json", - **kwargs: Any - ) -> AsyncIterable[JSON]: - """List the metric values for a load test run. - - List the metric values for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Metric dimension filter. Default value is None. - :type body: IO - :keyword metric_name: Metric name. Required. - :paramtype metric_name: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :keyword time_interval: The timespan of the query. It is a string with the following format - 'startDateTime_ISO/endDateTime_ISO'. Required. - :paramtype time_interval: str - :keyword aggregation: The aggregation. Default value is None. - :paramtype aggregation: str - :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", - "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. - :paramtype interval: str - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". - :paramtype content_type: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.async_paging.AsyncItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "data": [ - { - "timestamp": "str", # Optional. The timestamp for the metric - value in ISO 8601 format. - "value": 0.0 # Optional. The metric value. - } - ], - "dimensionValues": [ - { - "name": "str", # Optional. The name of the dimension. - "value": "str" # Optional. The value of the dimension. - } - ] - } - """ - - @distributed_trace - def list_metrics( - self, - test_run_id: str, - body: Optional[Union[JSON, IO]] = None, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - aggregation: Optional[str] = None, - interval: Optional[str] = None, - **kwargs: Any - ) -> AsyncIterable[JSON]: - """List the metric values for a load test run. - - List the metric values for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Metric dimension filter. Is either a JSON type or a IO type. Default value is - None. - :type body: JSON or IO - :keyword metric_name: Metric name. Required. - :paramtype metric_name: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :keyword time_interval: The timespan of the query. It is a string with the following format - 'startDateTime_ISO/endDateTime_ISO'. Required. - :paramtype time_interval: str - :keyword aggregation: The aggregation. Default value is None. - :paramtype aggregation: str - :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", - "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. - :paramtype interval: str - :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. - Default value is None. - :paramtype content_type: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.async_paging.AsyncItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "filters": [ - { - "name": "str", # Optional. The dimension name. - "values": [ - "str" # Optional. The dimension values. Maximum - values can be 20. - ] - } - ] - } - - # response body for status code(s): 200 - response == { - "data": [ - { - "timestamp": "str", # Optional. The timestamp for the metric - value in ISO 8601 format. - "value": 0.0 # Optional. The metric value. - } - ], - "dimensionValues": [ - { - "name": "str", # Optional. The name of the dimension. - "value": "str" # Optional. The value of the dimension. - } - ] - } - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - content_type = content_type or "application/json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - if body is not None: - _json = body - else: - _json = None - - def prepare_request(next_link=None): - if not next_link: - - request = build_test_run_list_metrics_request( - test_run_id=test_run_id, - metric_name=metric_name, - metric_namespace=metric_namespace, - time_interval=time_interval, - aggregation=aggregation, - interval=interval, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - async def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, AsyncList(list_of_elem) - - async def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return AsyncItemPaged(get_next, extract_data) - - @distributed_trace - def list_metric_dimension_values( - self, - test_run_id: str, - name: str, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - interval: Optional[str] = None, - **kwargs: Any - ) -> AsyncIterable[str]: - """List the dimension values for the given metric dimension name. - - List the dimension values for the given metric dimension name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param name: Dimension name. Required. - :type name: str - :keyword metric_name: Metric name. Required. - :paramtype metric_name: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :keyword time_interval: The timespan of the query. It is a string with the following format - 'startDateTime_ISO/endDateTime_ISO'. Required. - :paramtype time_interval: str - :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", - "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. - :paramtype interval: str - :return: An iterator like instance of str - :rtype: ~azure.core.async_paging.AsyncItemPaged[str] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == "str" # Optional. - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - request = build_test_run_list_metric_dimension_values_request( - test_run_id=test_run_id, - name=name, - metric_name=metric_name, - metric_namespace=metric_namespace, - time_interval=time_interval, - interval=interval, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - async def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, AsyncList(list_of_elem) - - async def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return AsyncItemPaged(get_next, extract_data) - - @overload - async def create_or_update_app_components( - self, test_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Associate an app component (collection of azure resources) to a test run. - - Associate an app component (collection of azure resources) to a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: App Component model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - """ - - @overload - async def create_or_update_app_components( - self, test_run_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Associate an app component (collection of azure resources) to a test run. - - Associate an app component (collection of azure resources) to a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: App Component model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - """ - - @distributed_trace_async - async def create_or_update_app_components(self, test_run_id: str, body: Union[JSON, IO], **kwargs: Any) -> JSON: - """Associate an app component (collection of azure resources) to a test run. - - Associate an app component (collection of azure resources) to a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: App Component model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_test_run_create_or_update_app_components_request( - test_run_id=test_run_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace_async - async def get_app_components(self, test_run_id: str, **kwargs: Any) -> JSON: - """Get associated app component (collection of azure resources) for the given test run. - - Get associated app component (collection of azure resources) for the given test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_app_components_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @overload - async def create_or_update_server_metrics_config( - self, test_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Configure server metrics for a test run. - - Configure server metrics for a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Server metric configuration model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - """ - - @overload - async def create_or_update_server_metrics_config( - self, test_run_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Configure server metrics for a test run. - - Configure server metrics for a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Server metric configuration model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - """ - - @distributed_trace_async - async def create_or_update_server_metrics_config( - self, test_run_id: str, body: Union[JSON, IO], **kwargs: Any - ) -> JSON: - """Configure server metrics for a test run. - - Configure server metrics for a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Server metric configuration model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_test_run_create_or_update_server_metrics_config_request( - test_run_id=test_run_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace_async - async def get_server_metrics_config(self, test_run_id: str, **kwargs: Any) -> JSON: - """List server metrics configuration for the given test run. - - List server metrics configuration for the given test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_server_metrics_config_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/operations/_patch.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/operations/_patch.py deleted file mode 100644 index ad612d4baeaf..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/operations/_patch.py +++ /dev/null @@ -1,186 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -import asyncio -import logging -from functools import partial -from typing import List, Optional, Any, IO, Union, Callable, overload, Generic, TypeVar - -from azure.core.polling import AsyncPollingMethod, AsyncLROPoller -from azure.core.tracing.decorator import distributed_trace - -from ._operations import AdministrationOperations as AdministrationOperationsGenerated, JSON -from ._operations import TestRunOperations as TestRunOperationsGenerated - -logger = logging.getLogger(__name__) - - -class AsyncLoadTestingPollingMethod(AsyncPollingMethod): - """Base class for custom async polling methods.""" - - def _update_status(self) -> None: - raise NotImplementedError("This method needs to be implemented") - - async def _update_resource(self) -> None: - self._resource = await self._command() - - def initialize(self, client, initial_response, deserialization_callback) -> None: - self._command = client - self._initial_response = initial_response - self._resource = initial_response - - def status(self) -> str: - return self._status - - def finished(self) -> bool: - return self._status in self._termination_statuses - - def resource(self) -> JSON: - return self._resource - - async def run(self) -> None: - try: - while not self.finished(): - await self._update_resource() - self._update_status() - - if not self.finished(): - await asyncio.sleep(self._polling_interval) - except Exception as e: - logger.error(e) - raise e - - -class AsyncValidationCheckPoller(AsyncLoadTestingPollingMethod): - def __init__(self, interval=5) -> None: - self._resource = None - self._command = None - self._initial_response = None - self._polling_interval = interval - self._status = None - self._termination_statuses = ["VALIDATION_SUCCESS", "VALIDATION_FAILED", "VALIDATION_NOT_REQUIRED"] - - def _update_status(self) -> None: - self._status = self._resource["validationStatus"] - - -class AsyncTestRunStatusPoller(AsyncLoadTestingPollingMethod): - def __init__(self, interval=5) -> None: - self._resource = None - self._command = None - self._initial_response = None - self._polling_interval = interval - self._status = None - self._termination_statuses = ["DONE", "FAILED", "CANCELLED"] - - def _update_status(self) -> None: - self._status = self._resource["status"] - - -class AdministrationOperations(AdministrationOperationsGenerated): - """ - for performing the operations on test - """ - - def __init__(self, *args, **kwargs): - super(AdministrationOperations, self).__init__(*args, **kwargs) - - @distributed_trace - async def begin_upload_test_file( - self, test_id: str, file_name: str, body: IO, *, file_type: Optional[str] = None, **kwargs: Any - ) -> AsyncLROPoller[JSON]: - """Upload file to the test - - :param test_id: Unique id for the test - :type test_id: str - :param file_name: Name of the file to be uploaded - :type file_name: str - :param body: File content to be uploaded - :type body: IO - :param file_type: Type of the file to be uploaded - :type file_type: str - :return: An instance of LROPoller object to check the validation status of file - :rtype: ~azure.core.polling.LROPoller - :raises ~azure.core.exceptions.HttpResponseError: - :raises ~azure.core.exceptions.ResourceNotFoundError: - """ - - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 5 - upload_test_file_operation = await super().begin_upload_test_file( - test_id=test_id, file_name=file_name, body=body, file_type=file_type, **kwargs - ) - - command = partial(self.get_test_file, test_id=test_id, file_name=file_name) - - create_validation_status_polling = AsyncValidationCheckPoller(interval=polling_interval) - return AsyncLROPoller(command, upload_test_file_operation, lambda *_: None, create_validation_status_polling) - - -class TestRunOperations(TestRunOperationsGenerated): - """ - class to perform operations on TestRun - """ - - def __init__(self, *args, **kwargs): - super(TestRunOperations, self).__init__(*args, **kwargs) - - @distributed_trace - async def begin_test_run( - self, test_run_id: str, body: Union[JSON, IO], *, old_test_run_id: Optional[str] = None, **kwargs: Any - ) -> AsyncLROPoller[JSON]: - """Create and start a new test run with the given name. - - Create and start a new test run with the given name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Load test run model. Is either a model type or a IO type. Required. - :type body: JSON or IO - :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is - provided, the test will run with the JMX file, configuration and app components from the - existing test run. You can override the configuration values for new test run in the request - body. Default value is None. - :paramtype old_test_run_id: str - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - - :rtype: ~azure.developer.loadtesting._polling.LoadTestingLROPoller - :raises ~azure.core.exceptions.HttpResponseError: - :raises ~azure.core.exceptions.ResourceNotFoundError: - """ - - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 5 - create_or_update_test_run_operation = await super()._test_run_initial( - test_run_id, body, old_test_run_id=old_test_run_id, **kwargs - ) - - command = partial(self.get_test_run, test_run_id=test_run_id) - - create_test_run_polling = AsyncTestRunStatusPoller(interval=polling_interval) - return AsyncLROPoller(command, create_or_update_test_run_operation, lambda *_: None, create_test_run_polling) - - -__all__: List[str] = ["AdministrationOperations", "TestRunOperations"] - - -# Add all objects you want publicly available to users at this package level - - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/operations/__init__.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/operations/__init__.py deleted file mode 100644 index 499aa580cf02..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/operations/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- - -from ._operations import AdministrationOperations -from ._operations import TestRunOperations - -from ._patch import __all__ as _patch_all -from ._patch import * # pylint: disable=unused-wildcard-import -from ._patch import patch_sdk as _patch_sdk - -__all__ = [ - "AdministrationOperations", - "TestRunOperations", -] -__all__.extend([p for p in _patch_all if p not in __all__]) -_patch_sdk() diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/operations/_operations.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/operations/_operations.py deleted file mode 100644 index bdec8bddcb53..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/operations/_operations.py +++ /dev/null @@ -1,7242 +0,0 @@ -# pylint: disable=too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is regenerated. -# -------------------------------------------------------------------------- -import datetime -import sys -from typing import Any, Callable, Dict, IO, Iterable, Optional, TypeVar, Union, cast, overload -import urllib.parse - -from azure.core.exceptions import ( - ClientAuthenticationError, - HttpResponseError, - ResourceExistsError, - ResourceNotFoundError, - ResourceNotModifiedError, - map_error, -) -from azure.core.paging import ItemPaged -from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpResponse -from azure.core.polling import LROPoller, NoPolling, PollingMethod -from azure.core.polling.base_polling import LROBasePolling -from azure.core.rest import HttpRequest -from azure.core.tracing.decorator import distributed_trace -from azure.core.utils import case_insensitive_dict - -from .._serialization import Serializer -from .._vendor import _format_url_section - -if sys.version_info >= (3, 9): - from collections.abc import MutableMapping -else: - from typing import MutableMapping # type: ignore # pylint: disable=ungrouped-imports -if sys.version_info >= (3, 8): - from typing import Literal # pylint: disable=no-name-in-module, ungrouped-imports -else: - from typing_extensions import Literal # type: ignore # pylint: disable=ungrouped-imports -JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object -T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - - -def build_administration_create_or_update_test_request(test_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_delete_test_request(test_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_get_test_request(test_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_list_tests_request( - *, - orderby: Optional[str] = None, - search: Optional[str] = None, - last_modified_start_time: Optional[datetime.datetime] = None, - last_modified_end_time: Optional[datetime.datetime] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests" - - # Construct parameters - if orderby is not None: - _params["orderby"] = _SERIALIZER.query("orderby", orderby, "str") - if search is not None: - _params["search"] = _SERIALIZER.query("search", search, "str") - if last_modified_start_time is not None: - _params["lastModifiedStartTime"] = _SERIALIZER.query( - "last_modified_start_time", last_modified_start_time, "iso-8601" - ) - if last_modified_end_time is not None: - _params["lastModifiedEndTime"] = _SERIALIZER.query("last_modified_end_time", last_modified_end_time, "iso-8601") - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_begin_upload_test_file_request( - test_id: str, file_name: str, *, content: IO, file_type: Optional[str] = None, **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}/files/{fileName}" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - "fileName": _SERIALIZER.url("file_name", file_name, "str"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - if file_type is not None: - _params["fileType"] = _SERIALIZER.query("file_type", file_type, "str") - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, content=content, **kwargs) - - -def build_administration_get_test_file_request(test_id: str, file_name: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}/files/{fileName}" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - "fileName": _SERIALIZER.url("file_name", file_name, "str"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_delete_test_file_request(test_id: str, file_name: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}/files/{fileName}" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - "fileName": _SERIALIZER.url("file_name", file_name, "str"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_list_test_files_request(test_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}/files" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_create_or_update_app_components_request(test_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}/app-components" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_get_app_components_request(test_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}/app-components" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_create_or_update_server_metrics_config_request(test_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}/server-metrics-config" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_administration_get_server_metrics_config_request(test_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/tests/{testId}/server-metrics-config" - path_format_arguments = { - "testId": _SERIALIZER.url("test_id", test_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_test_run_request( - test_run_id: str, *, old_test_run_id: Optional[str] = None, **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - if old_test_run_id is not None: - _params["oldTestRunId"] = _SERIALIZER.query("old_test_run_id", old_test_run_id, "str") - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_get_test_run_request(test_run_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_delete_test_run_request(test_run_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_get_test_run_file_request(test_run_id: str, file_name: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}/files/{fileName}" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - "fileName": _SERIALIZER.url("file_name", file_name, "str"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_list_test_runs_request( - *, - orderby: Optional[str] = None, - search: Optional[str] = None, - test_id: Optional[str] = None, - execution_from: Optional[datetime.datetime] = None, - execution_to: Optional[datetime.datetime] = None, - status: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs" - - # Construct parameters - if orderby is not None: - _params["orderby"] = _SERIALIZER.query("orderby", orderby, "str") - if search is not None: - _params["search"] = _SERIALIZER.query("search", search, "str") - if test_id is not None: - _params["testId"] = _SERIALIZER.query("test_id", test_id, "str") - if execution_from is not None: - _params["executionFrom"] = _SERIALIZER.query("execution_from", execution_from, "iso-8601") - if execution_to is not None: - _params["executionTo"] = _SERIALIZER.query("execution_to", execution_to, "iso-8601") - if status is not None: - _params["status"] = _SERIALIZER.query("status", status, "str") - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_stop_test_run_request(test_run_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}:stop" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_get_metric_namespaces_request(test_run_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}/metric-namespaces" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_get_metric_definitions_request( - test_run_id: str, *, metric_namespace: str, **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}/metric-definitions" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["metricNamespace"] = _SERIALIZER.query("metric_namespace", metric_namespace, "str") - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_list_metrics_request( - test_run_id: str, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - aggregation: Optional[str] = None, - interval: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}/metrics" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - if aggregation is not None: - _params["aggregation"] = _SERIALIZER.query("aggregation", aggregation, "str") - if interval is not None: - _params["interval"] = _SERIALIZER.query("interval", interval, "str") - _params["metricname"] = _SERIALIZER.query("metric_name", metric_name, "str") - _params["metricNamespace"] = _SERIALIZER.query("metric_namespace", metric_namespace, "str") - _params["timespan"] = _SERIALIZER.query("time_interval", time_interval, "str") - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_list_metric_dimension_values_request( - test_run_id: str, - name: str, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - interval: Optional[str] = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}/metric-dimensions/{name}/values" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - "name": _SERIALIZER.url("name", name, "str"), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - if interval is not None: - _params["interval"] = _SERIALIZER.query("interval", interval, "str") - _params["metricname"] = _SERIALIZER.query("metric_name", metric_name, "str") - _params["metricNamespace"] = _SERIALIZER.query("metric_namespace", metric_namespace, "str") - _params["timespan"] = _SERIALIZER.query("time_interval", time_interval, "str") - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_create_or_update_app_components_request(test_run_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}/app-components" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_get_app_components_request(test_run_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}/app-components" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_create_or_update_server_metrics_config_request(test_run_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}/server-metrics-config" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - if content_type is not None: - _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) - - -def build_test_run_get_server_metrics_config_request(test_run_id: str, **kwargs: Any) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version: Literal["2022-11-01"] = kwargs.pop("api_version", _params.pop("api-version", "2022-11-01")) - accept = _headers.pop("Accept", "application/json") - - # Construct URL - _url = "/test-runs/{testRunId}/server-metrics-config" - path_format_arguments = { - "testRunId": _SERIALIZER.url( - "test_run_id", test_run_id, "str", max_length=50, min_length=2, pattern=r"^[a-z0-9_-]*$" - ), - } - - _url: str = _format_url_section(_url, **path_format_arguments) # type: ignore - - # Construct parameters - _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - - -class AdministrationOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.developer.loadtesting._generated.LoadTestingClient`'s - :attr:`administration` attribute. - """ - - def __init__(self, *args, **kwargs): - input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - @overload - def create_or_update_test( - self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Create a new test or update an existing test. - - Create a new test or update an existing test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Load test model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - - @overload - def create_or_update_test( - self, test_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Create a new test or update an existing test. - - Create a new test or update an existing test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Load test model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - - @distributed_trace - def create_or_update_test(self, test_id: str, body: Union[JSON, IO], **kwargs: Any) -> JSON: - """Create a new test or update an existing test. - - Create a new test or update an existing test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Load test model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_administration_create_or_update_test_request( - test_id=test_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace - def delete_test(self, test_id: str, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-statements - """Delete a test by its name. - - Delete a test by its name. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: None - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - request = build_administration_delete_test_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if cls: - return cls(pipeline_response, None, {}) - - @distributed_trace - def get_test(self, test_id: str, **kwargs: Any) -> JSON: - """Get load test details by test name. - - Get load test details by test name. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_administration_get_test_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace - def list_tests( - self, - *, - orderby: Optional[str] = None, - search: Optional[str] = None, - last_modified_start_time: Optional[datetime.datetime] = None, - last_modified_end_time: Optional[datetime.datetime] = None, - **kwargs: Any - ) -> Iterable[JSON]: - """Get all load tests by the fully qualified resource Id e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - - Get all load tests by the fully qualified resource Id e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - - :keyword orderby: Sort on the supported fields in (field asc/desc) format. eg: - lastModifiedDateTime asc. Supported fields - lastModifiedDateTime. Default value is None. - :paramtype orderby: str - :keyword search: Prefix based, case sensitive search on searchable fields - displayName, - createdBy. For example, to search for a test, with display name is Login Test, the search - parameter can be Login. Default value is None. - :paramtype search: str - :keyword last_modified_start_time: Start DateTime(ISO 8601 literal format) of the last updated - time range to filter tests. Default value is None. - :paramtype last_modified_start_time: ~datetime.datetime - :keyword last_modified_end_time: End DateTime(ISO 8601 literal format) of the last updated time - range to filter tests. Default value is None. - :paramtype last_modified_end_time: ~datetime.datetime - :return: An iterator like instance of JSON object - :rtype: ~azure.core.paging.ItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test description. - "displayName": "str", # Optional. Display name of a test. - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry - time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: - "JMX_FILE", "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation - failure error details. - "validationStatus": "str" # Optional. Validation status of - the file. Known values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", - "VALIDATION_FAILURE", "VALIDATION_INITIATED", and - "VALIDATION_NOT_REQUIRED". - } - }, - "keyvaultReferenceIdentityId": "str", # Optional. Resource Id of the managed - identity referencing the Key vault. - "keyvaultReferenceIdentityType": "str", # Optional. Type of the managed - identity referencing the Key vault. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testId": "str" # Optional. Unique test name as identifier. - } - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - request = build_administration_list_tests_request( - orderby=orderby, - search=search, - last_modified_start_time=last_modified_start_time, - last_modified_end_time=last_modified_end_time, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @distributed_trace - def begin_upload_test_file( - self, test_id: str, file_name: str, body: IO, *, file_type: Optional[str] = None, **kwargs: Any - ) -> JSON: - """Upload input file for a given test name. File size can't be more than 50 MB. Existing file with - same name for the given test will be overwritten. File should be provided in the request body - as application/octet-stream. - - Upload input file for a given test name. File size can't be more than 50 MB. Existing file with - same name for the given test will be overwritten. File should be provided in the request body - as application/octet-stream. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param file_name: Unique name for test file with file extension like : App.jmx. Required. - :type file_name: str - :param body: The file content as application/octet-stream. Required. - :type body: IO - :keyword file_type: File type. Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". Default value is None. - :paramtype file_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 201 - response == { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry time of the file - (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: "JMX_FILE", - "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation failure error - details. - "validationStatus": "str" # Optional. Validation status of the file. Known - values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: str = kwargs.pop("content_type", _headers.pop("Content-Type", "application/octet-stream")) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - _content = body - - request = build_administration_begin_upload_test_file_request( - test_id=test_id, - file_name=file_name, - file_type=file_type, - content_type=content_type, - api_version=self._config.api_version, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace - def get_test_file(self, test_id: str, file_name: str, **kwargs: Any) -> JSON: - """Get test file by the file name. - - Get test file by the file name. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param file_name: File name with file extension like app.jmx. Required. - :type file_name: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry time of the file - (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: "JMX_FILE", - "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation failure error - details. - "validationStatus": "str" # Optional. Validation status of the file. Known - values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_administration_get_test_file_request( - test_id=test_id, - file_name=file_name, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace - def delete_test_file( # pylint: disable=inconsistent-return-statements - self, test_id: str, file_name: str, **kwargs: Any - ) -> None: - """Delete file by the file name for a test. - - Delete file by the file name for a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param file_name: File name with file extension like app.jmx. Required. - :type file_name: str - :return: None - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - request = build_administration_delete_test_file_request( - test_id=test_id, - file_name=file_name, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if cls: - return cls(pipeline_response, None, {}) - - @distributed_trace - def list_test_files(self, test_id: str, **kwargs: Any) -> Iterable[JSON]: - """Get all test files. - - Get all test files. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.paging.ItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry time of the file - (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: "JMX_FILE", - "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation failure error - details. - "validationStatus": "str" # Optional. Validation status of the file. Known - values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - request = build_administration_list_test_files_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @overload - def create_or_update_app_components( - self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Associate an app component (collection of azure resources) to a test. - - Associate an app component (collection of azure resources) to a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: App Component model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - """ - - @overload - def create_or_update_app_components( - self, test_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Associate an app component (collection of azure resources) to a test. - - Associate an app component (collection of azure resources) to a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: App Component model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - """ - - @distributed_trace - def create_or_update_app_components(self, test_id: str, body: Union[JSON, IO], **kwargs: Any) -> JSON: - """Associate an app component (collection of azure resources) to a test. - - Associate an app component (collection of azure resources) to a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: App Component model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_administration_create_or_update_app_components_request( - test_id=test_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace - def get_app_components(self, test_id: str, **kwargs: Any) -> JSON: - """Get associated app component (collection of azure resources) for the given test. - - Get associated app component (collection of azure resources) for the given test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testId": "str" # Optional. Test identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_administration_get_app_components_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @overload - def create_or_update_server_metrics_config( - self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Configure server metrics for a test. - - Configure server metrics for a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Server metric configuration model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - """ - - @overload - def create_or_update_server_metrics_config( - self, test_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Configure server metrics for a test. - - Configure server metrics for a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Server metric configuration model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - """ - - @distributed_trace - def create_or_update_server_metrics_config(self, test_id: str, body: Union[JSON, IO], **kwargs: Any) -> JSON: - """Configure server metrics for a test. - - Configure server metrics for a test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :param body: Server metric configuration model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_administration_create_or_update_server_metrics_config_request( - test_id=test_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace - def get_server_metrics_config(self, test_id: str, **kwargs: Any) -> JSON: - """List server metrics configuration for the given test. - - List server metrics configuration for the given test. - - :param test_id: Unique name for the load test, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testId": "str" # Optional. Test identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_administration_get_server_metrics_config_request( - test_id=test_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - -class TestRunOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.developer.loadtesting._generated.LoadTestingClient`'s - :attr:`test_run` attribute. - """ - - def __init__(self, *args, **kwargs): - input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - def _test_run_initial( - self, test_run_id: str, body: Union[JSON, IO], *, old_test_run_id: Optional[str] = None, **kwargs: Any - ) -> JSON: - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_test_run_test_run_request( - test_run_id=test_run_id, - old_test_run_id=old_test_run_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @overload - def begin_test_run( - self, - test_run_id: str, - body: JSON, - *, - old_test_run_id: Optional[str] = None, - content_type: str = "application/merge-patch+json", - **kwargs: Any - ) -> LROPoller[JSON]: - """Create and start a new test run with the given name. - - Create and start a new test run with the given name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Load test run model. Required. - :type body: JSON - :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is - provided, the test will run with the JMX file, configuration and app components from the - existing test run. You can override the configuration values for new test run in the request - body. Default value is None. - :paramtype old_test_run_id: str - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be LROBasePolling. Pass in False for - this operation to not poll, or pass in your own initialized polling object for a personal - polling strategy. - :paramtype polling: bool or ~azure.core.polling.PollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of LROPoller that returns JSON object - :rtype: ~azure.core.polling.LROPoller[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - - @overload - def begin_test_run( - self, - test_run_id: str, - body: IO, - *, - old_test_run_id: Optional[str] = None, - content_type: str = "application/merge-patch+json", - **kwargs: Any - ) -> LROPoller[JSON]: - """Create and start a new test run with the given name. - - Create and start a new test run with the given name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Load test run model. Required. - :type body: IO - :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is - provided, the test will run with the JMX file, configuration and app components from the - existing test run. You can override the configuration values for new test run in the request - body. Default value is None. - :paramtype old_test_run_id: str - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be LROBasePolling. Pass in False for - this operation to not poll, or pass in your own initialized polling object for a personal - polling strategy. - :paramtype polling: bool or ~azure.core.polling.PollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of LROPoller that returns JSON object - :rtype: ~azure.core.polling.LROPoller[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - - @distributed_trace - def begin_test_run( - self, test_run_id: str, body: Union[JSON, IO], *, old_test_run_id: Optional[str] = None, **kwargs: Any - ) -> LROPoller[JSON]: - """Create and start a new test run with the given name. - - Create and start a new test run with the given name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Load test run model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is - provided, the test will run with the JMX file, configuration and app components from the - existing test run. You can override the configuration values for new test run in the request - body. Default value is None. - :paramtype old_test_run_id: str - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be LROBasePolling. Pass in False for - this operation to not poll, or pass in your own initialized polling object for a personal - polling strategy. - :paramtype polling: bool or ~azure.core.polling.PollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of LROPoller that returns JSON object - :rtype: ~azure.core.polling.LROPoller[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - - # response body for status code(s): 200, 201 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = self._test_run_initial( - test_run_id=test_run_id, - body=body, - old_test_run_id=old_test_run_id, - content_type=content_type, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - kwargs.pop("error_map", None) - - def get_long_running_output(pipeline_response): - response = pipeline_response.http_response - if response.content: - deserialized = response.json() - else: - deserialized = None - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized - - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - - if polling is True: - polling_method: PollingMethod = cast( - PollingMethod, LROBasePolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) - ) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) - else: - polling_method = polling - if cont_token: - return LROPoller.from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return LROPoller(self._client, raw_result, get_long_running_output, polling_method) # type: ignore - - @distributed_trace - def get_test_run(self, test_run_id: str, **kwargs: Any) -> JSON: - """Get test run details by name. - - Get test run details by name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_test_run_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace - def delete_test_run( # pylint: disable=inconsistent-return-statements - self, test_run_id: str, **kwargs: Any - ) -> None: - """Delete a test run by its name. - - Delete a test run by its name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: None - :rtype: None - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[None] = kwargs.pop("cls", None) - - request = build_test_run_delete_test_run_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if cls: - return cls(pipeline_response, None, {}) - - @distributed_trace - def get_test_run_file(self, test_run_id: str, file_name: str, **kwargs: Any) -> JSON: - """Get test run file by file name. - - Get test run file by file name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param file_name: Test run file name with file extension. Required. - :type file_name: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "expireDateTime": "2020-02-20 00:00:00", # Optional. Expiry time of the file - (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known values are: "JMX_FILE", - "USER_PROPERTIES", and "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. Validation failure error - details. - "validationStatus": "str" # Optional. Validation status of the file. Known - values are: "NOT_VALIDATED", "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_test_run_file_request( - test_run_id=test_run_id, - file_name=file_name, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace - def list_test_runs( - self, - *, - orderby: Optional[str] = None, - search: Optional[str] = None, - test_id: Optional[str] = None, - execution_from: Optional[datetime.datetime] = None, - execution_to: Optional[datetime.datetime] = None, - status: Optional[str] = None, - **kwargs: Any - ) -> Iterable[JSON]: - """Get all test runs with given filters. - - Get all test runs with given filters. - - :keyword orderby: Sort on the supported fields in (field asc/desc) format. eg: executedDateTime - asc. Supported fields - executedDateTime. Default value is None. - :paramtype orderby: str - :keyword search: Prefix based, case sensitive search on searchable fields - description, - executedUser. For example, to search for a test run, with description 500 VUs, the search - parameter can be 500. Default value is None. - :paramtype search: str - :keyword test_id: Unique name of an existing load test. Default value is None. - :paramtype test_id: str - :keyword execution_from: Start DateTime(ISO 8601 literal format) of test-run execution time - filter range. Default value is None. - :paramtype execution_from: ~datetime.datetime - :keyword execution_to: End DateTime(ISO 8601 literal format) of test-run execution time filter - range. Default value is None. - :paramtype execution_to: ~datetime.datetime - :keyword status: Comma separated list of test run status. Default value is None. - :paramtype status: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.paging.ItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - request = build_test_run_list_test_runs_request( - orderby=orderby, - search=search, - test_id=test_id, - execution_from=execution_from, - execution_to=execution_to, - status=status, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @distributed_trace - def stop_test_run(self, test_run_id: str, **kwargs: Any) -> JSON: - """Stop test run by name. - - Stop test run by name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "certificate": { - "name": "str", # Optional. Name of the certificate. - "type": "str", # Optional. Type of certificate. "AKV_CERT_URI" - "value": "str" # Optional. The value of the certificate for - respective type. - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "description": "str", # Optional. The test run description. - "displayName": "str", # Optional. Display name of a testRun. - "duration": 0, # Optional. Test run duration in milliseconds. - "endDateTime": "2020-02-20 00:00:00", # Optional. The test run end - DateTime(ISO 8601 literal format). - "environmentVariables": { - "str": "str" # Optional. Environment variables which are defined as - a set of pairs. - }, - "errorDetails": [ - { - "message": "str" # Optional. Error details in case test run - was not successfully run. - } - ], - "executedDateTime": "2020-02-20 00:00:00", # Optional. Test run initiated - time. - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "loadTestConfiguration": { - "engineInstances": 0, # Optional. The number of engine instances to - execute load test. Supported values are in range of 1-45. Required for - creating a new test. - "optionalLoadTestConfig": { - "duration": 0, # Optional. Test run duration. - "endpointUrl": "str", # Optional. Test URL. Provide the - complete HTTP URL. For example, - http://contoso-app.azurewebsites.net/login. - "rampUpTime": 0, # Optional. Ramp up time. - "virtualUsers": 0 # Optional. No of concurrent virtual - users. - }, - "quickStartTest": False, # Optional. Default value is False. If - true, optionalLoadTestConfig is required and JMX script for the load test is - not required to upload. - "splitAllCSVs": False # Optional. Default value is False. If false, - Azure Load Testing copies and processes your input files unmodified across - all test engine instances. If true, Azure Load Testing splits the CSV input - data evenly across all engine instances. If you provide multiple CSV files, - each file will be split evenly. - }, - "passFailCriteria": { - "passFailMetrics": { - "str": { - "action": "continue", # Optional. Default value is - "continue". Action taken after the threshold is met. Default is - "u2018continue"u2019. Known values are: "continue" and "stop". - "actualValue": 0.0, # Optional. The actual value of - the client metric for the test run. - "aggregate": "str", # Optional. The aggregation - function to be applied on the client metric. Allowed functions - - "u2018percentage"u2019 - for error metric , "u2018avg"u2019, - "u2018p50"u2019, "u2018p90"u2019, "u2018p95"u2019, "u2018p99"u2019, - "u2018min"u2019, "u2018max"u2019 - for response_time_ms and latency - metric, "u2018avg"u2019 - for requests_per_sec, "u2018count"u2019 - - for requests. Known values are: "count", "percentage", "avg", "p50", - "p90", "p95", "p99", "min", and "max". - "clientMetric": "str", # Optional. The client metric - on which the criteria should be applied. Known values are: - "response_time_ms", "latency", "error", "requests", and - "requests_per_sec". - "condition": "str", # Optional. The comparison - operator. Supported types "u2018>"u2019, "u2018<"u2019. - "requestName": "str", # Optional. Request name for - which the Pass fail criteria has to be applied. - "result": "str", # Optional. Outcome of the test - run. Known values are: "passed", "undetermined", and "failed". - "value": 0.0 # Optional. The value to compare with - the client metric. Allowed values - "u2018error : [0.0 , 100.0] unit- - % "u2019, response_time_ms and latency : any integer value unit- ms. - } - } - }, - "portalUrl": "str", # Optional. Portal url. - "secrets": { - "str": { - "type": "str", # Optional. Type of secret. Known values are: - "AKV_SECRET_URI" and "SECRET_VALUE". - "value": "str" # Optional. The value of the secret for the - respective type. - } - }, - "startDateTime": "2020-02-20 00:00:00", # Optional. The test run start - DateTime(ISO 8601 literal format). - "status": "str", # Optional. The test run status. Known values are: - "ACCEPTED", "NOTSTARTED", "PROVISIONING", "PROVISIONED", "CONFIGURING", - "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", "DEPROVISIONED", "DONE", - "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and - "VALIDATION_FAILURE". - "subnetId": "str", # Optional. Subnet ID on which the load test instances - should run. - "testArtifacts": { - "inputArtifacts": { - "additionalFileInfo": [ - { - "expireDateTime": "2020-02-20 00:00:00", # - Optional. Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the - file. - "fileType": "str", # Optional. File type. - Known values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # - Optional. Validation failure error details. - "validationStatus": "str" # Optional. - Validation status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", - "VALIDATION_INITIATED", and "VALIDATION_NOT_REQUIRED". - } - ], - "configFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "inputArtifactsZipFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "testScriptFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "userPropFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - }, - "outputArtifacts": { - "logsFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - }, - "resultFileInfo": { - "expireDateTime": "2020-02-20 00:00:00", # Optional. - Expiry time of the file (ISO 8601 literal format). - "fileName": "str", # Optional. Name of the file. - "fileType": "str", # Optional. File type. Known - values are: "JMX_FILE", "USER_PROPERTIES", and - "ADDITIONAL_ARTIFACTS". - "url": "str", # Optional. File URL. - "validationFailureDetails": "str", # Optional. - Validation failure error details. - "validationStatus": "str" # Optional. Validation - status of the file. Known values are: "NOT_VALIDATED", - "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", - and "VALIDATION_NOT_REQUIRED". - } - } - }, - "testId": "str", # Optional. Associated test Id. - "testResult": "str", # Optional. Test result for pass/Fail criteria used - during the test run. Known values are: "PASSED", "NOT_APPLICABLE", and "FAILED". - "testRunId": "str", # Optional. Unique test run name as identifier. - "testRunStatistics": { - "str": { - "errorCount": 0.0, # Optional. Error count. - "errorPct": 0.0, # Optional. Error percentage. - "maxResTime": 0.0, # Optional. Max response time. - "meanResTime": 0.0, # Optional. Mean response time. - "medianResTime": 0.0, # Optional. Median response time. - "minResTime": 0.0, # Optional. Minimum response time. - "pct1ResTime": 0.0, # Optional. 90 percentile response time. - "pct2ResTime": 0.0, # Optional. 95 percentile response time. - "pct3ResTime": 0.0, # Optional. 99 percentile response time. - "receivedKBytesPerSec": 0.0, # Optional. Received network - bytes. - "sampleCount": 0.0, # Optional. Sampler count. - "sentKBytesPerSec": 0.0, # Optional. Send network bytes. - "throughput": 0.0, # Optional. Throughput. - "transaction": "str" # Optional. Transaction name. - } - }, - "virtualUsers": 0 # Optional. Number of virtual users, for which test has - been run. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_stop_test_run_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace - def get_metric_namespaces(self, test_run_id: str, **kwargs: Any) -> JSON: - """List the metric namespaces for a load test run. - - List the metric namespaces for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "value": [ - { - "description": "str", # Optional. The namespace description. - "name": "str" # Optional. The metric namespace name. - } - ] - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_metric_namespaces_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @distributed_trace - def get_metric_definitions(self, test_run_id: str, *, metric_namespace: str, **kwargs: Any) -> JSON: - """List the metric definitions for a load test run. - - List the metric definitions for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "value": [ - { - "description": "str", # Optional. The metric description. - "dimensions": [ - { - "description": "str", # Optional. The - description. - "name": "str" # Optional. The name. - } - ], - "metricAvailabilities": [ - { - "timeGrain": "str" # Optional. The time - grain specifies the aggregation interval for the metric. - Expressed as a duration 'PT1M', 'PT1H', etc. Known values are: - "PT5S", "PT10S", "PT1M", "PT5M", and "PT1H". - } - ], - "name": "str", # Optional. The metric name. - "namespace": "str", # Optional. The namespace the metric - belongs to. - "primaryAggregationType": "str", # Optional. The primary - aggregation type value defining how to use the values for display. Known - values are: "Average", "Count", "None", "Total", "Percentile90", - "Percentile95", and "Percentile99". - "supportedAggregationTypes": [ - "str" # Optional. The collection of what all - aggregation types are supported. - ], - "unit": "str" # Optional. The unit of the metric. Known - values are: "NotSpecified", "Percent", "Count", "Seconds", - "Milliseconds", "Bytes", "BytesPerSecond", and "CountPerSecond". - } - ] - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_metric_definitions_request( - test_run_id=test_run_id, - metric_namespace=metric_namespace, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @overload - def list_metrics( - self, - test_run_id: str, - body: Optional[JSON] = None, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - aggregation: Optional[str] = None, - interval: Optional[str] = None, - content_type: str = "application/json", - **kwargs: Any - ) -> Iterable[JSON]: - """List the metric values for a load test run. - - List the metric values for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Metric dimension filter. Default value is None. - :type body: JSON - :keyword metric_name: Metric name. Required. - :paramtype metric_name: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :keyword time_interval: The timespan of the query. It is a string with the following format - 'startDateTime_ISO/endDateTime_ISO'. Required. - :paramtype time_interval: str - :keyword aggregation: The aggregation. Default value is None. - :paramtype aggregation: str - :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", - "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. - :paramtype interval: str - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.paging.ItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "filters": [ - { - "name": "str", # Optional. The dimension name. - "values": [ - "str" # Optional. The dimension values. Maximum - values can be 20. - ] - } - ] - } - - # response body for status code(s): 200 - response == { - "data": [ - { - "timestamp": "str", # Optional. The timestamp for the metric - value in ISO 8601 format. - "value": 0.0 # Optional. The metric value. - } - ], - "dimensionValues": [ - { - "name": "str", # Optional. The name of the dimension. - "value": "str" # Optional. The value of the dimension. - } - ] - } - """ - - @overload - def list_metrics( - self, - test_run_id: str, - body: Optional[IO] = None, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - aggregation: Optional[str] = None, - interval: Optional[str] = None, - content_type: str = "application/json", - **kwargs: Any - ) -> Iterable[JSON]: - """List the metric values for a load test run. - - List the metric values for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Metric dimension filter. Default value is None. - :type body: IO - :keyword metric_name: Metric name. Required. - :paramtype metric_name: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :keyword time_interval: The timespan of the query. It is a string with the following format - 'startDateTime_ISO/endDateTime_ISO'. Required. - :paramtype time_interval: str - :keyword aggregation: The aggregation. Default value is None. - :paramtype aggregation: str - :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", - "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. - :paramtype interval: str - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". - :paramtype content_type: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.paging.ItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "data": [ - { - "timestamp": "str", # Optional. The timestamp for the metric - value in ISO 8601 format. - "value": 0.0 # Optional. The metric value. - } - ], - "dimensionValues": [ - { - "name": "str", # Optional. The name of the dimension. - "value": "str" # Optional. The value of the dimension. - } - ] - } - """ - - @distributed_trace - def list_metrics( - self, - test_run_id: str, - body: Optional[Union[JSON, IO]] = None, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - aggregation: Optional[str] = None, - interval: Optional[str] = None, - **kwargs: Any - ) -> Iterable[JSON]: - """List the metric values for a load test run. - - List the metric values for a load test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Metric dimension filter. Is either a JSON type or a IO type. Default value is - None. - :type body: JSON or IO - :keyword metric_name: Metric name. Required. - :paramtype metric_name: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :keyword time_interval: The timespan of the query. It is a string with the following format - 'startDateTime_ISO/endDateTime_ISO'. Required. - :paramtype time_interval: str - :keyword aggregation: The aggregation. Default value is None. - :paramtype aggregation: str - :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", - "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. - :paramtype interval: str - :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. - Default value is None. - :paramtype content_type: str - :return: An iterator like instance of JSON object - :rtype: ~azure.core.paging.ItemPaged[JSON] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "filters": [ - { - "name": "str", # Optional. The dimension name. - "values": [ - "str" # Optional. The dimension values. Maximum - values can be 20. - ] - } - ] - } - - # response body for status code(s): 200 - response == { - "data": [ - { - "timestamp": "str", # Optional. The timestamp for the metric - value in ISO 8601 format. - "value": 0.0 # Optional. The metric value. - } - ], - "dimensionValues": [ - { - "name": "str", # Optional. The name of the dimension. - "value": "str" # Optional. The value of the dimension. - } - ] - } - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - content_type = content_type or "application/json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - if body is not None: - _json = body - else: - _json = None - - def prepare_request(next_link=None): - if not next_link: - - request = build_test_run_list_metrics_request( - test_run_id=test_run_id, - metric_name=metric_name, - metric_namespace=metric_namespace, - time_interval=time_interval, - aggregation=aggregation, - interval=interval, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @distributed_trace - def list_metric_dimension_values( - self, - test_run_id: str, - name: str, - *, - metric_name: str, - metric_namespace: str, - time_interval: str, - interval: Optional[str] = None, - **kwargs: Any - ) -> Iterable[str]: - """List the dimension values for the given metric dimension name. - - List the dimension values for the given metric dimension name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param name: Dimension name. Required. - :type name: str - :keyword metric_name: Metric name. Required. - :paramtype metric_name: str - :keyword metric_namespace: Metric namespace to query metric definitions for. Required. - :paramtype metric_namespace: str - :keyword time_interval: The timespan of the query. It is a string with the following format - 'startDateTime_ISO/endDateTime_ISO'. Required. - :paramtype time_interval: str - :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", - "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. - :paramtype interval: str - :return: An iterator like instance of str - :rtype: ~azure.core.paging.ItemPaged[str] - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == "str" # Optional. - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - request = build_test_run_list_metric_dimension_values_request( - test_run_id=test_run_id, - name=name, - metric_name=metric_name, - metric_namespace=metric_namespace, - time_interval=time_interval, - interval=interval, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "Endpoint": self._serialize.url( - "self._config.endpoint", self._config.endpoint, "str", skip_quote=True - ), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - return request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = deserialized["value"] - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @overload - def create_or_update_app_components( - self, test_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Associate an app component (collection of azure resources) to a test run. - - Associate an app component (collection of azure resources) to a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: App Component model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - """ - - @overload - def create_or_update_app_components( - self, test_run_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Associate an app component (collection of azure resources) to a test run. - - Associate an app component (collection of azure resources) to a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: App Component model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - """ - - @distributed_trace - def create_or_update_app_components(self, test_run_id: str, body: Union[JSON, IO], **kwargs: Any) -> JSON: - """Associate an app component (collection of azure resources) to a test run. - - Associate an app component (collection of azure resources) to a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: App Component model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - - # response body for status code(s): 200, 201 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_test_run_create_or_update_app_components_request( - test_run_id=test_run_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace - def get_app_components(self, test_run_id: str, **kwargs: Any) -> JSON: - """Get associated app component (collection of azure resources) for the given test run. - - Get associated app component (collection of azure resources) for the given test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "components": { - "str": { - "displayName": "str", # Optional. Azure resource display - name. - "kind": "str", # Optional. Kind of Azure resource type. - "resourceGroup": "str", # Optional. Resource group name of - the Azure resource. - "resourceId": "str", # Optional. fully qualified resource Id - e.g - subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. - "resourceName": "str", # Optional. Azure resource name, - required while creating the app component. - "resourceType": "str", # Optional. Azure resource type, - required while creating the app component. - "subscriptionId": "str" # Optional. Subscription Id of the - Azure resource. - } - }, - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "testRunId": "str" # Optional. Test run identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_app_components_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) - - @overload - def create_or_update_server_metrics_config( - self, test_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Configure server metrics for a test run. - - Configure server metrics for a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Server metric configuration model. Required. - :type body: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - """ - - @overload - def create_or_update_server_metrics_config( - self, test_run_id: str, body: IO, *, content_type: str = "application/merge-patch+json", **kwargs: Any - ) -> JSON: - """Configure server metrics for a test run. - - Configure server metrics for a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Server metric configuration model. Required. - :type body: IO - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/merge-patch+json". - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - """ - - @distributed_trace - def create_or_update_server_metrics_config(self, test_run_id: str, body: Union[JSON, IO], **kwargs: Any) -> JSON: - """Configure server metrics for a test run. - - Configure server metrics for a test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Server metric configuration model. Is either a JSON type or a IO type. Required. - :type body: JSON or IO - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # JSON input template you can fill out and use as your body input. - body = { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - - # response body for status code(s): 200, 201 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[JSON] = kwargs.pop("cls", None) - - content_type = content_type or "application/merge-patch+json" - _json = None - _content = None - if isinstance(body, (IO, bytes)): - _content = body - else: - _json = body - - request = build_test_run_create_or_update_server_metrics_config_request( - test_run_id=test_run_id, - content_type=content_type, - api_version=self._config.api_version, - json=_json, - content=_content, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.status_code == 200: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if response.status_code == 201: - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) # type: ignore - - return cast(JSON, deserialized) # type: ignore - - @distributed_trace - def get_server_metrics_config(self, test_run_id: str, **kwargs: Any) -> JSON: - """List server metrics configuration for the given test run. - - List server metrics configuration for the given test run. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :return: JSON object - :rtype: JSON - :raises ~azure.core.exceptions.HttpResponseError: - - Example: - .. code-block:: python - - # response body for status code(s): 200 - response == { - "createdBy": "str", # Optional. The user that created. - "createdDateTime": "2020-02-20 00:00:00", # Optional. The creation - datetime(ISO 8601 literal format). - "lastModifiedBy": "str", # Optional. The user that last modified. - "lastModifiedDateTime": "2020-02-20 00:00:00", # Optional. The last Modified - datetime(ISO 8601 literal format). - "metrics": { - "str": { - "aggregation": "str", # Metric aggregation. Required. - "metricNamespace": "str", # Metric name space. Required. - "name": "str", # The invariant value of metric name. - Required. - "resourceId": "str", # Azure resource id. Required. - "resourceType": "str", # Azure resource type. Required. - "displayDescription": "str", # Optional. Metric description. - "id": "str", # Optional. Unique name for metric. - "unit": "str" # Optional. Metric unit. - } - }, - "testRunId": "str" # Optional. Test run identifier. - } - """ - error_map = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[JSON] = kwargs.pop("cls", None) - - request = build_test_run_get_server_metrics_config_request( - test_run_id=test_run_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), - } - request.url = self._client.format_url(request.url, **path_format_arguments) - - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - request, stream=False, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response) - - if response.content: - deserialized = response.json() - else: - deserialized = None - - if cls: - return cls(pipeline_response, cast(JSON, deserialized), {}) - - return cast(JSON, deserialized) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/operations/_patch.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/operations/_patch.py deleted file mode 100644 index f79e48ae6ffe..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/operations/_patch.py +++ /dev/null @@ -1,193 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -import logging -import time -from functools import partial -from typing import List, IO, Optional, Any, Union, overload, Generic, TypeVar - -from azure.core.polling import PollingMethod -from azure.core.tracing.decorator import distributed_trace -from azure.core.polling import LROPoller - -from ._operations import AdministrationOperations as AdministrationOperationsGenerated, JSON -from ._operations import TestRunOperations as TestRunOperationsGenerated -from .._serialization import Serializer - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - -logger = logging.getLogger(__name__) - - -class LoadTestingPollingMethod(PollingMethod): - """Base class for custom sync polling methods.""" - - def _update_status(self) -> None: - raise NotImplementedError("This method needs to be implemented") - - def _update_resource(self) -> None: - self._resource = self._command() - - def initialize(self, client, initial_response, deserialization_callback) -> None: - self._command = client - self._initial_response = initial_response - self._resource = initial_response - - def status(self) -> str: - return self._status - - def finished(self) -> bool: - return self._status in self._termination_statuses - - def resource(self) -> JSON: - return self._resource - - def run(self) -> None: - try: - while not self.finished(): - self._update_resource() - self._update_status() - - if not self.finished(): - time.sleep(self._polling_interval) - except Exception as e: - logger.error(e) - raise e - - -class ValidationCheckPoller(LoadTestingPollingMethod): - """polling method for long-running validation check operation.""" - - def __init__(self, interval=5) -> None: - self._resource = None - self._command = None - self._initial_response = None - self._polling_interval = interval - self._status = None - self._termination_statuses = ["VALIDATION_SUCCESS", "VALIDATION_FAILED", "VALIDATION_NOT_REQUIRED"] - - def _update_status(self) -> None: - self._status = self._resource["validationStatus"] - - -class TestRunStatusPoller(LoadTestingPollingMethod): - def __init__(self, interval=5) -> None: - self._resource = None - self._command = None - self._initial_response = None - self._polling_interval = interval - self._status = None - self._termination_statuses = ["DONE", "FAILED", "CANCELLED"] - - def _update_status(self) -> None: - self._status = self._resource["status"] - - -class AdministrationOperations(AdministrationOperationsGenerated): - """ - for performing the operations on the Administration Subclient - """ - - def __init__(self, *args, **kwargs): - super(AdministrationOperations, self).__init__(*args, **kwargs) - - @distributed_trace - def begin_upload_test_file( - self, test_id: str, file_name: str, body: IO, *, file_type: Optional[str] = None, **kwargs: Any - ) -> LROPoller[JSON]: - """Upload file to the test - - :param test_id: Unique id for the test - :type test_id: str - :param file_name: Name of the file to be uploaded - :type file_name: str - :param body: File content to be uploaded - :type body: IO - :param file_type: Type of the file to be uploaded - :type file_type: str - :return: An instance of LROPoller object to check the validation status of file - :rtype: ~azure.developer.loadtesting._polling.LoadTestingLROPoller - :raises ~azure.core.exceptions.HttpResponseError: - :raises ~azure.core.exceptions.ResourceNotFoundError: - """ - - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 5 - upload_test_file_operation = super().begin_upload_test_file( - test_id=test_id, file_name=file_name, body=body, file_type=file_type, **kwargs - ) - - command = partial(self.get_test_file, test_id=test_id, file_name=file_name) - - create_validation_status_polling = ValidationCheckPoller(interval=polling_interval) - return LROPoller(command, upload_test_file_operation, lambda *_: None, create_validation_status_polling) - - -class TestRunOperations(TestRunOperationsGenerated): - """ - class to perform operations on TestRun - """ - - def __init__(self, *args, **kwargs): - super(TestRunOperations, self).__init__(*args, **kwargs) - - @distributed_trace - def begin_test_run( - self, test_run_id: str, body: Union[JSON, IO], *, old_test_run_id: Optional[str] = None, **kwargs: Any - ) -> LROPoller[JSON]: - """Create and start a new test run with the given name. - - Create and start a new test run with the given name. - - :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, - numeric, underscore or hyphen characters. Required. - :type test_run_id: str - :param body: Load test run model. Is either a model type or a IO type. Required. - :type body: JSON or IO - :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is - provided, the test will run with the JMX file, configuration and app components from the - existing test run. You can override the configuration values for new test run in the request - body. Default value is None. - :paramtype old_test_run_id: str - :keyword content_type: Body Parameter content-type. Known values are: - 'application/merge-patch+json'. Default value is None. - :paramtype content_type: str - - :rtype: ~azure.developer.loadtesting._polling.LoadTestingLROPoller - :raises ~azure.core.exceptions.HttpResponseError: - :raises ~azure.core.exceptions.ResourceNotFoundError: - """ - - polling_interval = kwargs.pop("_polling_interval", None) - if polling_interval is None: - polling_interval = 5 - create_or_update_test_run_operation = super()._test_run_initial( - test_run_id, body, old_test_run_id=old_test_run_id, **kwargs - ) - - command = partial(self.get_test_run, test_run_id=test_run_id) - - create_test_run_polling = TestRunStatusPoller(interval=polling_interval) - return LROPoller(command, create_or_update_test_run_operation, lambda *_: None, create_test_run_polling) - - -__all__: List[str] = ["AdministrationOperations", "TestRunOperations"] - - -# Add all objects you want publicly available to users at this package level - - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/py.typed b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/py.typed deleted file mode 100644 index e5aff4f83af8..000000000000 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/py.typed +++ /dev/null @@ -1 +0,0 @@ -# Marker file for PEP 561. \ No newline at end of file diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_model_base.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_model_base.py new file mode 100644 index 000000000000..7f73b97b23ef --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_model_base.py @@ -0,0 +1,1175 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# -------------------------------------------------------------------------- +# pylint: disable=protected-access, broad-except + +import copy +import calendar +import decimal +import functools +import sys +import logging +import base64 +import re +import typing +import enum +import email.utils +from datetime import datetime, date, time, timedelta, timezone +from json import JSONEncoder +import xml.etree.ElementTree as ET +from typing_extensions import Self +import isodate +from azure.core.exceptions import DeserializationError +from azure.core import CaseInsensitiveEnumMeta +from azure.core.pipeline import PipelineResponse +from azure.core.serialization import _Null + +if sys.version_info >= (3, 9): + from collections.abc import MutableMapping +else: + from typing import MutableMapping + +_LOGGER = logging.getLogger(__name__) + +__all__ = ["SdkJSONEncoder", "Model", "rest_field", "rest_discriminator"] + +TZ_UTC = timezone.utc +_T = typing.TypeVar("_T") + + +def _timedelta_as_isostr(td: timedelta) -> str: + """Converts a datetime.timedelta object into an ISO 8601 formatted string, e.g. 'P4DT12H30M05S' + + Function adapted from the Tin Can Python project: https://github.com/RusticiSoftware/TinCanPython + + :param timedelta td: The timedelta to convert + :rtype: str + :return: ISO8601 version of this timedelta + """ + + # Split seconds to larger units + seconds = td.total_seconds() + minutes, seconds = divmod(seconds, 60) + hours, minutes = divmod(minutes, 60) + days, hours = divmod(hours, 24) + + days, hours, minutes = list(map(int, (days, hours, minutes))) + seconds = round(seconds, 6) + + # Build date + date_str = "" + if days: + date_str = "%sD" % days + + if hours or minutes or seconds: + # Build time + time_str = "T" + + # Hours + bigger_exists = date_str or hours + if bigger_exists: + time_str += "{:02}H".format(hours) + + # Minutes + bigger_exists = bigger_exists or minutes + if bigger_exists: + time_str += "{:02}M".format(minutes) + + # Seconds + try: + if seconds.is_integer(): + seconds_string = "{:02}".format(int(seconds)) + else: + # 9 chars long w/ leading 0, 6 digits after decimal + seconds_string = "%09.6f" % seconds + # Remove trailing zeros + seconds_string = seconds_string.rstrip("0") + except AttributeError: # int.is_integer() raises + seconds_string = "{:02}".format(seconds) + + time_str += "{}S".format(seconds_string) + else: + time_str = "" + + return "P" + date_str + time_str + + +def _serialize_bytes(o, format: typing.Optional[str] = None) -> str: + encoded = base64.b64encode(o).decode() + if format == "base64url": + return encoded.strip("=").replace("+", "-").replace("/", "_") + return encoded + + +def _serialize_datetime(o, format: typing.Optional[str] = None): + if hasattr(o, "year") and hasattr(o, "hour"): + if format == "rfc7231": + return email.utils.format_datetime(o, usegmt=True) + if format == "unix-timestamp": + return int(calendar.timegm(o.utctimetuple())) + + # astimezone() fails for naive times in Python 2.7, so make make sure o is aware (tzinfo is set) + if not o.tzinfo: + iso_formatted = o.replace(tzinfo=TZ_UTC).isoformat() + else: + iso_formatted = o.astimezone(TZ_UTC).isoformat() + # Replace the trailing "+00:00" UTC offset with "Z" (RFC 3339: https://www.ietf.org/rfc/rfc3339.txt) + return iso_formatted.replace("+00:00", "Z") + # Next try datetime.date or datetime.time + return o.isoformat() + + +def _is_readonly(p): + try: + return p._visibility == ["read"] + except AttributeError: + return False + + +class SdkJSONEncoder(JSONEncoder): + """A JSON encoder that's capable of serializing datetime objects and bytes.""" + + def __init__(self, *args, exclude_readonly: bool = False, format: typing.Optional[str] = None, **kwargs): + super().__init__(*args, **kwargs) + self.exclude_readonly = exclude_readonly + self.format = format + + def default(self, o): # pylint: disable=too-many-return-statements + if _is_model(o): + if self.exclude_readonly: + readonly_props = [p._rest_name for p in o._attr_to_rest_field.values() if _is_readonly(p)] + return {k: v for k, v in o.items() if k not in readonly_props} + return dict(o.items()) + try: + return super(SdkJSONEncoder, self).default(o) + except TypeError: + if isinstance(o, _Null): + return None + if isinstance(o, decimal.Decimal): + return float(o) + if isinstance(o, (bytes, bytearray)): + return _serialize_bytes(o, self.format) + try: + # First try datetime.datetime + return _serialize_datetime(o, self.format) + except AttributeError: + pass + # Last, try datetime.timedelta + try: + return _timedelta_as_isostr(o) + except AttributeError: + # This will be raised when it hits value.total_seconds in the method above + pass + return super(SdkJSONEncoder, self).default(o) + + +_VALID_DATE = re.compile(r"\d{4}[-]\d{2}[-]\d{2}T\d{2}:\d{2}:\d{2}" + r"\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") +_VALID_RFC7231 = re.compile( + r"(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s\d{2}\s" + r"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT" +) + + +def _deserialize_datetime(attr: typing.Union[str, datetime]) -> datetime: + """Deserialize ISO-8601 formatted string into Datetime object. + + :param str attr: response string to be deserialized. + :rtype: ~datetime.datetime + :returns: The datetime object from that input + """ + if isinstance(attr, datetime): + # i'm already deserialized + return attr + attr = attr.upper() + match = _VALID_DATE.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + check_decimal = attr.split(".") + if len(check_decimal) > 1: + decimal_str = "" + for digit in check_decimal[1]: + if digit.isdigit(): + decimal_str += digit + else: + break + if len(decimal_str) > 6: + attr = attr.replace(decimal_str, decimal_str[0:6]) + + date_obj = isodate.parse_datetime(attr) + test_utc = date_obj.utctimetuple() + if test_utc.tm_year > 9999 or test_utc.tm_year < 1: + raise OverflowError("Hit max or min date") + return date_obj + + +def _deserialize_datetime_rfc7231(attr: typing.Union[str, datetime]) -> datetime: + """Deserialize RFC7231 formatted string into Datetime object. + + :param str attr: response string to be deserialized. + :rtype: ~datetime.datetime + :returns: The datetime object from that input + """ + if isinstance(attr, datetime): + # i'm already deserialized + return attr + match = _VALID_RFC7231.match(attr) + if not match: + raise ValueError("Invalid datetime string: " + attr) + + return email.utils.parsedate_to_datetime(attr) + + +def _deserialize_datetime_unix_timestamp(attr: typing.Union[float, datetime]) -> datetime: + """Deserialize unix timestamp into Datetime object. + + :param str attr: response string to be deserialized. + :rtype: ~datetime.datetime + :returns: The datetime object from that input + """ + if isinstance(attr, datetime): + # i'm already deserialized + return attr + return datetime.fromtimestamp(attr, TZ_UTC) + + +def _deserialize_date(attr: typing.Union[str, date]) -> date: + """Deserialize ISO-8601 formatted string into Date object. + :param str attr: response string to be deserialized. + :rtype: date + :returns: The date object from that input + """ + # This must NOT use defaultmonth/defaultday. Using None ensure this raises an exception. + if isinstance(attr, date): + return attr + return isodate.parse_date(attr, defaultmonth=None, defaultday=None) # type: ignore + + +def _deserialize_time(attr: typing.Union[str, time]) -> time: + """Deserialize ISO-8601 formatted string into time object. + + :param str attr: response string to be deserialized. + :rtype: datetime.time + :returns: The time object from that input + """ + if isinstance(attr, time): + return attr + return isodate.parse_time(attr) + + +def _deserialize_bytes(attr): + if isinstance(attr, (bytes, bytearray)): + return attr + return bytes(base64.b64decode(attr)) + + +def _deserialize_bytes_base64(attr): + if isinstance(attr, (bytes, bytearray)): + return attr + padding = "=" * (3 - (len(attr) + 3) % 4) # type: ignore + attr = attr + padding # type: ignore + encoded = attr.replace("-", "+").replace("_", "/") + return bytes(base64.b64decode(encoded)) + + +def _deserialize_duration(attr): + if isinstance(attr, timedelta): + return attr + return isodate.parse_duration(attr) + + +def _deserialize_decimal(attr): + if isinstance(attr, decimal.Decimal): + return attr + return decimal.Decimal(str(attr)) + + +def _deserialize_int_as_str(attr): + if isinstance(attr, int): + return attr + return int(attr) + + +_DESERIALIZE_MAPPING = { + datetime: _deserialize_datetime, + date: _deserialize_date, + time: _deserialize_time, + bytes: _deserialize_bytes, + bytearray: _deserialize_bytes, + timedelta: _deserialize_duration, + typing.Any: lambda x: x, + decimal.Decimal: _deserialize_decimal, +} + +_DESERIALIZE_MAPPING_WITHFORMAT = { + "rfc3339": _deserialize_datetime, + "rfc7231": _deserialize_datetime_rfc7231, + "unix-timestamp": _deserialize_datetime_unix_timestamp, + "base64": _deserialize_bytes, + "base64url": _deserialize_bytes_base64, +} + + +def get_deserializer(annotation: typing.Any, rf: typing.Optional["_RestField"] = None): + if annotation is int and rf and rf._format == "str": + return _deserialize_int_as_str + if rf and rf._format: + return _DESERIALIZE_MAPPING_WITHFORMAT.get(rf._format) + return _DESERIALIZE_MAPPING.get(annotation) # pyright: ignore + + +def _get_type_alias_type(module_name: str, alias_name: str): + types = { + k: v + for k, v in sys.modules[module_name].__dict__.items() + if isinstance(v, typing._GenericAlias) # type: ignore + } + if alias_name not in types: + return alias_name + return types[alias_name] + + +def _get_model(module_name: str, model_name: str): + models = {k: v for k, v in sys.modules[module_name].__dict__.items() if isinstance(v, type)} + module_end = module_name.rsplit(".", 1)[0] + models.update({k: v for k, v in sys.modules[module_end].__dict__.items() if isinstance(v, type)}) + if isinstance(model_name, str): + model_name = model_name.split(".")[-1] + if model_name not in models: + return model_name + return models[model_name] + + +_UNSET = object() + + +class _MyMutableMapping(MutableMapping[str, typing.Any]): # pylint: disable=unsubscriptable-object + def __init__(self, data: typing.Dict[str, typing.Any]) -> None: + self._data = data + + def __contains__(self, key: typing.Any) -> bool: + return key in self._data + + def __getitem__(self, key: str) -> typing.Any: + return self._data.__getitem__(key) + + def __setitem__(self, key: str, value: typing.Any) -> None: + self._data.__setitem__(key, value) + + def __delitem__(self, key: str) -> None: + self._data.__delitem__(key) + + def __iter__(self) -> typing.Iterator[typing.Any]: + return self._data.__iter__() + + def __len__(self) -> int: + return self._data.__len__() + + def __ne__(self, other: typing.Any) -> bool: + return not self.__eq__(other) + + def keys(self) -> typing.KeysView[str]: + return self._data.keys() + + def values(self) -> typing.ValuesView[typing.Any]: + return self._data.values() + + def items(self) -> typing.ItemsView[str, typing.Any]: + return self._data.items() + + def get(self, key: str, default: typing.Any = None) -> typing.Any: + try: + return self[key] + except KeyError: + return default + + @typing.overload + def pop(self, key: str) -> typing.Any: ... + + @typing.overload + def pop(self, key: str, default: _T) -> _T: ... + + @typing.overload + def pop(self, key: str, default: typing.Any) -> typing.Any: ... + + def pop(self, key: str, default: typing.Any = _UNSET) -> typing.Any: + if default is _UNSET: + return self._data.pop(key) + return self._data.pop(key, default) + + def popitem(self) -> typing.Tuple[str, typing.Any]: + return self._data.popitem() + + def clear(self) -> None: + self._data.clear() + + def update(self, *args: typing.Any, **kwargs: typing.Any) -> None: + self._data.update(*args, **kwargs) + + @typing.overload + def setdefault(self, key: str, default: None = None) -> None: ... + + @typing.overload + def setdefault(self, key: str, default: typing.Any) -> typing.Any: ... + + def setdefault(self, key: str, default: typing.Any = _UNSET) -> typing.Any: + if default is _UNSET: + return self._data.setdefault(key) + return self._data.setdefault(key, default) + + def __eq__(self, other: typing.Any) -> bool: + try: + other_model = self.__class__(other) + except Exception: + return False + return self._data == other_model._data + + def __repr__(self) -> str: + return str(self._data) + + +def _is_model(obj: typing.Any) -> bool: + return getattr(obj, "_is_model", False) + + +def _serialize(o, format: typing.Optional[str] = None): # pylint: disable=too-many-return-statements + if isinstance(o, list): + return [_serialize(x, format) for x in o] + if isinstance(o, dict): + return {k: _serialize(v, format) for k, v in o.items()} + if isinstance(o, set): + return {_serialize(x, format) for x in o} + if isinstance(o, tuple): + return tuple(_serialize(x, format) for x in o) + if isinstance(o, (bytes, bytearray)): + return _serialize_bytes(o, format) + if isinstance(o, decimal.Decimal): + return float(o) + if isinstance(o, enum.Enum): + return o.value + if isinstance(o, int): + if format == "str": + return str(o) + return o + try: + # First try datetime.datetime + return _serialize_datetime(o, format) + except AttributeError: + pass + # Last, try datetime.timedelta + try: + return _timedelta_as_isostr(o) + except AttributeError: + # This will be raised when it hits value.total_seconds in the method above + pass + return o + + +def _get_rest_field( + attr_to_rest_field: typing.Dict[str, "_RestField"], rest_name: str +) -> typing.Optional["_RestField"]: + try: + return next(rf for rf in attr_to_rest_field.values() if rf._rest_name == rest_name) + except StopIteration: + return None + + +def _create_value(rf: typing.Optional["_RestField"], value: typing.Any) -> typing.Any: + if not rf: + return _serialize(value, None) + if rf._is_multipart_file_input: + return value + if rf._is_model: + return _deserialize(rf._type, value) + if isinstance(value, ET.Element): + value = _deserialize(rf._type, value) + return _serialize(value, rf._format) + + +class Model(_MyMutableMapping): + _is_model = True + # label whether current class's _attr_to_rest_field has been calculated + # could not see _attr_to_rest_field directly because subclass inherits it from parent class + _calculated: typing.Set[str] = set() + + def __init__(self, *args: typing.Any, **kwargs: typing.Any) -> None: + class_name = self.__class__.__name__ + if len(args) > 1: + raise TypeError(f"{class_name}.__init__() takes 2 positional arguments but {len(args) + 1} were given") + dict_to_pass = { + rest_field._rest_name: rest_field._default + for rest_field in self._attr_to_rest_field.values() + if rest_field._default is not _UNSET + } + if args: # pylint: disable=too-many-nested-blocks + if isinstance(args[0], ET.Element): + existed_attr_keys = [] + model_meta = getattr(self, "_xml", {}) + + for rf in self._attr_to_rest_field.values(): + prop_meta = getattr(rf, "_xml", {}) + xml_name = prop_meta.get("name", rf._rest_name) + xml_ns = prop_meta.get("ns", model_meta.get("ns", None)) + if xml_ns: + xml_name = "{" + xml_ns + "}" + xml_name + + # attribute + if prop_meta.get("attribute", False) and args[0].get(xml_name) is not None: + existed_attr_keys.append(xml_name) + dict_to_pass[rf._rest_name] = _deserialize(rf._type, args[0].get(xml_name)) + continue + + # unwrapped element is array + if prop_meta.get("unwrapped", False): + # unwrapped array could either use prop items meta/prop meta + if prop_meta.get("itemsName"): + xml_name = prop_meta.get("itemsName") + xml_ns = prop_meta.get("itemNs") + if xml_ns: + xml_name = "{" + xml_ns + "}" + xml_name + items = args[0].findall(xml_name) # pyright: ignore + if len(items) > 0: + existed_attr_keys.append(xml_name) + dict_to_pass[rf._rest_name] = _deserialize(rf._type, items) + continue + + # text element is primitive type + if prop_meta.get("text", False): + if args[0].text is not None: + dict_to_pass[rf._rest_name] = _deserialize(rf._type, args[0].text) + continue + + # wrapped element could be normal property or array, it should only have one element + item = args[0].find(xml_name) + if item is not None: + existed_attr_keys.append(xml_name) + dict_to_pass[rf._rest_name] = _deserialize(rf._type, item) + + # rest thing is additional properties + for e in args[0]: + if e.tag not in existed_attr_keys: + dict_to_pass[e.tag] = _convert_element(e) + else: + dict_to_pass.update( + {k: _create_value(_get_rest_field(self._attr_to_rest_field, k), v) for k, v in args[0].items()} + ) + else: + non_attr_kwargs = [k for k in kwargs if k not in self._attr_to_rest_field] + if non_attr_kwargs: + # actual type errors only throw the first wrong keyword arg they see, so following that. + raise TypeError(f"{class_name}.__init__() got an unexpected keyword argument '{non_attr_kwargs[0]}'") + dict_to_pass.update( + { + self._attr_to_rest_field[k]._rest_name: _create_value(self._attr_to_rest_field[k], v) + for k, v in kwargs.items() + if v is not None + } + ) + super().__init__(dict_to_pass) + + def copy(self) -> "Model": + return Model(self.__dict__) + + def __new__(cls, *args: typing.Any, **kwargs: typing.Any) -> Self: + if f"{cls.__module__}.{cls.__qualname__}" not in cls._calculated: + # we know the last nine classes in mro are going to be 'Model', '_MyMutableMapping', 'MutableMapping', + # 'Mapping', 'Collection', 'Sized', 'Iterable', 'Container' and 'object' + mros = cls.__mro__[:-9][::-1] # ignore parents, and reverse the mro order + attr_to_rest_field: typing.Dict[str, _RestField] = { # map attribute name to rest_field property + k: v for mro_class in mros for k, v in mro_class.__dict__.items() if k[0] != "_" and hasattr(v, "_type") + } + annotations = { + k: v + for mro_class in mros + if hasattr(mro_class, "__annotations__") + for k, v in mro_class.__annotations__.items() + } + for attr, rf in attr_to_rest_field.items(): + rf._module = cls.__module__ + if not rf._type: + rf._type = rf._get_deserialize_callable_from_annotation(annotations.get(attr, None)) + if not rf._rest_name_input: + rf._rest_name_input = attr + cls._attr_to_rest_field: typing.Dict[str, _RestField] = dict(attr_to_rest_field.items()) + cls._calculated.add(f"{cls.__module__}.{cls.__qualname__}") + + return super().__new__(cls) # pylint: disable=no-value-for-parameter + + def __init_subclass__(cls, discriminator: typing.Optional[str] = None) -> None: + for base in cls.__bases__: + if hasattr(base, "__mapping__"): + base.__mapping__[discriminator or cls.__name__] = cls # type: ignore + + @classmethod + def _get_discriminator(cls, exist_discriminators) -> typing.Optional["_RestField"]: + for v in cls.__dict__.values(): + if isinstance(v, _RestField) and v._is_discriminator and v._rest_name not in exist_discriminators: + return v + return None + + @classmethod + def _deserialize(cls, data, exist_discriminators): + if not hasattr(cls, "__mapping__"): + return cls(data) + discriminator = cls._get_discriminator(exist_discriminators) + if discriminator is None: + return cls(data) + exist_discriminators.append(discriminator._rest_name) + if isinstance(data, ET.Element): + model_meta = getattr(cls, "_xml", {}) + prop_meta = getattr(discriminator, "_xml", {}) + xml_name = prop_meta.get("name", discriminator._rest_name) + xml_ns = prop_meta.get("ns", model_meta.get("ns", None)) + if xml_ns: + xml_name = "{" + xml_ns + "}" + xml_name + + if data.get(xml_name) is not None: + discriminator_value = data.get(xml_name) + else: + discriminator_value = data.find(xml_name).text # pyright: ignore + else: + discriminator_value = data.get(discriminator._rest_name) + mapped_cls = cls.__mapping__.get(discriminator_value, cls) # pyright: ignore + return mapped_cls._deserialize(data, exist_discriminators) + + def as_dict(self, *, exclude_readonly: bool = False) -> typing.Dict[str, typing.Any]: + """Return a dict that can be turned into json using json.dump. + + :keyword bool exclude_readonly: Whether to remove the readonly properties. + :returns: A dict JSON compatible object + :rtype: dict + """ + + result = {} + readonly_props = [] + if exclude_readonly: + readonly_props = [p._rest_name for p in self._attr_to_rest_field.values() if _is_readonly(p)] + for k, v in self.items(): + if exclude_readonly and k in readonly_props: # pyright: ignore + continue + is_multipart_file_input = False + try: + is_multipart_file_input = next( + rf for rf in self._attr_to_rest_field.values() if rf._rest_name == k + )._is_multipart_file_input + except StopIteration: + pass + result[k] = v if is_multipart_file_input else Model._as_dict_value(v, exclude_readonly=exclude_readonly) + return result + + @staticmethod + def _as_dict_value(v: typing.Any, exclude_readonly: bool = False) -> typing.Any: + if v is None or isinstance(v, _Null): + return None + if isinstance(v, (list, tuple, set)): + return type(v)(Model._as_dict_value(x, exclude_readonly=exclude_readonly) for x in v) + if isinstance(v, dict): + return {dk: Model._as_dict_value(dv, exclude_readonly=exclude_readonly) for dk, dv in v.items()} + return v.as_dict(exclude_readonly=exclude_readonly) if hasattr(v, "as_dict") else v + + +def _deserialize_model(model_deserializer: typing.Optional[typing.Callable], obj): + if _is_model(obj): + return obj + return _deserialize(model_deserializer, obj) + + +def _deserialize_with_optional(if_obj_deserializer: typing.Optional[typing.Callable], obj): + if obj is None: + return obj + return _deserialize_with_callable(if_obj_deserializer, obj) + + +def _deserialize_with_union(deserializers, obj): + for deserializer in deserializers: + try: + return _deserialize(deserializer, obj) + except DeserializationError: + pass + raise DeserializationError() + + +def _deserialize_dict( + value_deserializer: typing.Optional[typing.Callable], + module: typing.Optional[str], + obj: typing.Dict[typing.Any, typing.Any], +): + if obj is None: + return obj + if isinstance(obj, ET.Element): + obj = {child.tag: child for child in obj} + return {k: _deserialize(value_deserializer, v, module) for k, v in obj.items()} + + +def _deserialize_multiple_sequence( + entry_deserializers: typing.List[typing.Optional[typing.Callable]], + module: typing.Optional[str], + obj, +): + if obj is None: + return obj + return type(obj)(_deserialize(deserializer, entry, module) for entry, deserializer in zip(obj, entry_deserializers)) + + +def _deserialize_sequence( + deserializer: typing.Optional[typing.Callable], + module: typing.Optional[str], + obj, +): + if obj is None: + return obj + if isinstance(obj, ET.Element): + obj = list(obj) + return type(obj)(_deserialize(deserializer, entry, module) for entry in obj) + + +def _sorted_annotations(types: typing.List[typing.Any]) -> typing.List[typing.Any]: + return sorted( + types, + key=lambda x: hasattr(x, "__name__") and x.__name__.lower() in ("str", "float", "int", "bool"), + ) + + +def _get_deserialize_callable_from_annotation( # pylint: disable=too-many-return-statements, too-many-branches + annotation: typing.Any, + module: typing.Optional[str], + rf: typing.Optional["_RestField"] = None, +) -> typing.Optional[typing.Callable[[typing.Any], typing.Any]]: + if not annotation: + return None + + # is it a type alias? + if isinstance(annotation, str): + if module is not None: + annotation = _get_type_alias_type(module, annotation) + + # is it a forward ref / in quotes? + if isinstance(annotation, (str, typing.ForwardRef)): + try: + model_name = annotation.__forward_arg__ # type: ignore + except AttributeError: + model_name = annotation + if module is not None: + annotation = _get_model(module, model_name) # type: ignore + + try: + if module and _is_model(annotation): + if rf: + rf._is_model = True + + return functools.partial(_deserialize_model, annotation) # pyright: ignore + except Exception: + pass + + # is it a literal? + try: + if annotation.__origin__ is typing.Literal: # pyright: ignore + return None + except AttributeError: + pass + + # is it optional? + try: + if any(a for a in annotation.__args__ if a == type(None)): # pyright: ignore + if len(annotation.__args__) <= 2: # pyright: ignore + if_obj_deserializer = _get_deserialize_callable_from_annotation( + next(a for a in annotation.__args__ if a != type(None)), module, rf # pyright: ignore + ) + + return functools.partial(_deserialize_with_optional, if_obj_deserializer) + # the type is Optional[Union[...]], we need to remove the None type from the Union + annotation_copy = copy.copy(annotation) + annotation_copy.__args__ = [a for a in annotation_copy.__args__ if a != type(None)] # pyright: ignore + return _get_deserialize_callable_from_annotation(annotation_copy, module, rf) + except AttributeError: + pass + + # is it union? + if getattr(annotation, "__origin__", None) is typing.Union: + # initial ordering is we make `string` the last deserialization option, because it is often them most generic + deserializers = [ + _get_deserialize_callable_from_annotation(arg, module, rf) + for arg in _sorted_annotations(annotation.__args__) # pyright: ignore + ] + + return functools.partial(_deserialize_with_union, deserializers) + + try: + if annotation._name == "Dict": # pyright: ignore + value_deserializer = _get_deserialize_callable_from_annotation( + annotation.__args__[1], module, rf # pyright: ignore + ) + + return functools.partial( + _deserialize_dict, + value_deserializer, + module, + ) + except (AttributeError, IndexError): + pass + try: + if annotation._name in ["List", "Set", "Tuple", "Sequence"]: # pyright: ignore + if len(annotation.__args__) > 1: # pyright: ignore + entry_deserializers = [ + _get_deserialize_callable_from_annotation(dt, module, rf) + for dt in annotation.__args__ # pyright: ignore + ] + return functools.partial(_deserialize_multiple_sequence, entry_deserializers, module) + deserializer = _get_deserialize_callable_from_annotation( + annotation.__args__[0], module, rf # pyright: ignore + ) + + return functools.partial(_deserialize_sequence, deserializer, module) + except (TypeError, IndexError, AttributeError, SyntaxError): + pass + + def _deserialize_default( + deserializer, + obj, + ): + if obj is None: + return obj + try: + return _deserialize_with_callable(deserializer, obj) + except Exception: + pass + return obj + + if get_deserializer(annotation, rf): + return functools.partial(_deserialize_default, get_deserializer(annotation, rf)) + + return functools.partial(_deserialize_default, annotation) + + +def _deserialize_with_callable( + deserializer: typing.Optional[typing.Callable[[typing.Any], typing.Any]], + value: typing.Any, +): # pylint: disable=too-many-return-statements + try: + if value is None or isinstance(value, _Null): + return None + if isinstance(value, ET.Element): + if deserializer is str: + return value.text or "" + if deserializer is int: + return int(value.text) if value.text else None + if deserializer is float: + return float(value.text) if value.text else None + if deserializer is bool: + return value.text == "true" if value.text else None + if deserializer is None: + return value + if deserializer in [int, float, bool]: + return deserializer(value) + if isinstance(deserializer, CaseInsensitiveEnumMeta): + try: + return deserializer(value) + except ValueError: + # for unknown value, return raw value + return value + if isinstance(deserializer, type) and issubclass(deserializer, Model): + return deserializer._deserialize(value, []) + return typing.cast(typing.Callable[[typing.Any], typing.Any], deserializer)(value) + except Exception as e: + raise DeserializationError() from e + + +def _deserialize( + deserializer: typing.Any, + value: typing.Any, + module: typing.Optional[str] = None, + rf: typing.Optional["_RestField"] = None, + format: typing.Optional[str] = None, +) -> typing.Any: + if isinstance(value, PipelineResponse): + value = value.http_response.json() + if rf is None and format: + rf = _RestField(format=format) + if not isinstance(deserializer, functools.partial): + deserializer = _get_deserialize_callable_from_annotation(deserializer, module, rf) + return _deserialize_with_callable(deserializer, value) + + +def _failsafe_deserialize( + deserializer: typing.Any, + value: typing.Any, + module: typing.Optional[str] = None, + rf: typing.Optional["_RestField"] = None, + format: typing.Optional[str] = None, +) -> typing.Any: + try: + return _deserialize(deserializer, value, module, rf, format) + except DeserializationError: + _LOGGER.warning( + "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True + ) + return None + + +class _RestField: + def __init__( + self, + *, + name: typing.Optional[str] = None, + type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin + is_discriminator: bool = False, + visibility: typing.Optional[typing.List[str]] = None, + default: typing.Any = _UNSET, + format: typing.Optional[str] = None, + is_multipart_file_input: bool = False, + xml: typing.Optional[typing.Dict[str, typing.Any]] = None, + ): + self._type = type + self._rest_name_input = name + self._module: typing.Optional[str] = None + self._is_discriminator = is_discriminator + self._visibility = visibility + self._is_model = False + self._default = default + self._format = format + self._is_multipart_file_input = is_multipart_file_input + self._xml = xml if xml is not None else {} + + @property + def _class_type(self) -> typing.Any: + return getattr(self._type, "args", [None])[0] + + @property + def _rest_name(self) -> str: + if self._rest_name_input is None: + raise ValueError("Rest name was never set") + return self._rest_name_input + + def __get__(self, obj: Model, type=None): # pylint: disable=redefined-builtin + # by this point, type and rest_name will have a value bc we default + # them in __new__ of the Model class + item = obj.get(self._rest_name) + if item is None: + return item + if self._is_model: + return item + return _deserialize(self._type, _serialize(item, self._format), rf=self) + + def __set__(self, obj: Model, value) -> None: + if value is None: + # we want to wipe out entries if users set attr to None + try: + obj.__delitem__(self._rest_name) + except KeyError: + pass + return + if self._is_model: + if not _is_model(value): + value = _deserialize(self._type, value) + obj.__setitem__(self._rest_name, value) + return + obj.__setitem__(self._rest_name, _serialize(value, self._format)) + + def _get_deserialize_callable_from_annotation( + self, annotation: typing.Any + ) -> typing.Optional[typing.Callable[[typing.Any], typing.Any]]: + return _get_deserialize_callable_from_annotation(annotation, self._module, self) + + +def rest_field( + *, + name: typing.Optional[str] = None, + type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin + visibility: typing.Optional[typing.List[str]] = None, + default: typing.Any = _UNSET, + format: typing.Optional[str] = None, + is_multipart_file_input: bool = False, + xml: typing.Optional[typing.Dict[str, typing.Any]] = None, +) -> typing.Any: + return _RestField( + name=name, + type=type, + visibility=visibility, + default=default, + format=format, + is_multipart_file_input=is_multipart_file_input, + xml=xml, + ) + + +def rest_discriminator( + *, + name: typing.Optional[str] = None, + type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin + visibility: typing.Optional[typing.List[str]] = None, + xml: typing.Optional[typing.Dict[str, typing.Any]] = None, +) -> typing.Any: + return _RestField(name=name, type=type, is_discriminator=True, visibility=visibility, xml=xml) + + +def serialize_xml(model: Model, exclude_readonly: bool = False) -> str: + """Serialize a model to XML. + + :param Model model: The model to serialize. + :param bool exclude_readonly: Whether to exclude readonly properties. + :returns: The XML representation of the model. + :rtype: str + """ + return ET.tostring(_get_element(model, exclude_readonly), encoding="unicode") # type: ignore + + +def _get_element( + o: typing.Any, + exclude_readonly: bool = False, + parent_meta: typing.Optional[typing.Dict[str, typing.Any]] = None, + wrapped_element: typing.Optional[ET.Element] = None, +) -> typing.Union[ET.Element, typing.List[ET.Element]]: + if _is_model(o): + model_meta = getattr(o, "_xml", {}) + + # if prop is a model, then use the prop element directly, else generate a wrapper of model + if wrapped_element is None: + wrapped_element = _create_xml_element( + model_meta.get("name", o.__class__.__name__), + model_meta.get("prefix"), + model_meta.get("ns"), + ) + + readonly_props = [] + if exclude_readonly: + readonly_props = [p._rest_name for p in o._attr_to_rest_field.values() if _is_readonly(p)] + + for k, v in o.items(): + # do not serialize readonly properties + if exclude_readonly and k in readonly_props: + continue + + prop_rest_field = _get_rest_field(o._attr_to_rest_field, k) + if prop_rest_field: + prop_meta = getattr(prop_rest_field, "_xml").copy() + # use the wire name as xml name if no specific name is set + if prop_meta.get("name") is None: + prop_meta["name"] = k + else: + # additional properties will not have rest field, use the wire name as xml name + prop_meta = {"name": k} + + # if no ns for prop, use model's + if prop_meta.get("ns") is None and model_meta.get("ns"): + prop_meta["ns"] = model_meta.get("ns") + prop_meta["prefix"] = model_meta.get("prefix") + + if prop_meta.get("unwrapped", False): + # unwrapped could only set on array + wrapped_element.extend(_get_element(v, exclude_readonly, prop_meta)) + elif prop_meta.get("text", False): + # text could only set on primitive type + wrapped_element.text = _get_primitive_type_value(v) + elif prop_meta.get("attribute", False): + xml_name = prop_meta.get("name", k) + if prop_meta.get("ns"): + ET.register_namespace(prop_meta.get("prefix"), prop_meta.get("ns")) # pyright: ignore + xml_name = "{" + prop_meta.get("ns") + "}" + xml_name # pyright: ignore + # attribute should be primitive type + wrapped_element.set(xml_name, _get_primitive_type_value(v)) + else: + # other wrapped prop element + wrapped_element.append(_get_wrapped_element(v, exclude_readonly, prop_meta)) + return wrapped_element + if isinstance(o, list): + return [_get_element(x, exclude_readonly, parent_meta) for x in o] # type: ignore + if isinstance(o, dict): + result = [] + for k, v in o.items(): + result.append( + _get_wrapped_element( + v, + exclude_readonly, + { + "name": k, + "ns": parent_meta.get("ns") if parent_meta else None, + "prefix": parent_meta.get("prefix") if parent_meta else None, + }, + ) + ) + return result + + # primitive case need to create element based on parent_meta + if parent_meta: + return _get_wrapped_element( + o, + exclude_readonly, + { + "name": parent_meta.get("itemsName", parent_meta.get("name")), + "prefix": parent_meta.get("itemsPrefix", parent_meta.get("prefix")), + "ns": parent_meta.get("itemsNs", parent_meta.get("ns")), + }, + ) + + raise ValueError("Could not serialize value into xml: " + o) + + +def _get_wrapped_element( + v: typing.Any, + exclude_readonly: bool, + meta: typing.Optional[typing.Dict[str, typing.Any]], +) -> ET.Element: + wrapped_element = _create_xml_element( + meta.get("name") if meta else None, meta.get("prefix") if meta else None, meta.get("ns") if meta else None + ) + if isinstance(v, (dict, list)): + wrapped_element.extend(_get_element(v, exclude_readonly, meta)) + elif _is_model(v): + _get_element(v, exclude_readonly, meta, wrapped_element) + else: + wrapped_element.text = _get_primitive_type_value(v) + return wrapped_element + + +def _get_primitive_type_value(v) -> str: + if v is True: + return "true" + if v is False: + return "false" + if isinstance(v, _Null): + return "" + return str(v) + + +def _create_xml_element(tag, prefix=None, ns=None): + if prefix and ns: + ET.register_namespace(prefix, ns) + if ns: + return ET.Element("{" + ns + "}" + tag) + return ET.Element(tag) + + +def _deserialize_xml( + deserializer: typing.Any, + value: str, +) -> typing.Any: + element = ET.fromstring(value) # nosec + return _deserialize(deserializer, element) + + +def _convert_element(e: ET.Element): + # dict case + if len(e.attrib) > 0 or len({child.tag for child in e}) > 1: + dict_result: typing.Dict[str, typing.Any] = {} + for child in e: + if dict_result.get(child.tag) is not None: + if isinstance(dict_result[child.tag], list): + dict_result[child.tag].append(_convert_element(child)) + else: + dict_result[child.tag] = [dict_result[child.tag], _convert_element(child)] + else: + dict_result[child.tag] = _convert_element(child) + dict_result.update(e.attrib) + return dict_result + # array case + if len(e) > 0: + array_result: typing.List[typing.Any] = [] + for child in e: + array_result.append(_convert_element(child)) + return array_result + # primitive case + return e.text diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_operations/__init__.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_operations/__init__.py new file mode 100644 index 000000000000..8217d65c5387 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_operations/__init__.py @@ -0,0 +1,31 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._operations import LoadTestAdministrationClientOperationsMixin # type: ignore +from ._operations import LoadTestRunClientOperationsMixin # type: ignore +from ._operations import LoadTestAdministrationClientOperationsMixin # type: ignore +from ._operations import LoadTestRunClientOperationsMixin # type: ignore + +from ._patch import __all__ as _patch_all +from ._patch import * +from ._patch import patch_sdk as _patch_sdk + +__all__ = [ + "LoadTestAdministrationClientOperationsMixin", + "LoadTestRunClientOperationsMixin", + "LoadTestAdministrationClientOperationsMixin", + "LoadTestRunClientOperationsMixin", +] +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore +_patch_sdk() diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_operations/_operations.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_operations/_operations.py new file mode 100644 index 000000000000..6d1d36fe1df0 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_operations/_operations.py @@ -0,0 +1,5577 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import datetime +from io import IOBase +import json +import sys +from typing import Any, Callable, Dict, IO, Iterable, List, Optional, TypeVar, Union, overload +import urllib.parse + +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + StreamClosedError, + StreamConsumedError, + map_error, +) +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict + +from .. import models as _models +from .._model_base import SdkJSONEncoder, _deserialize +from .._serialization import Serializer +from .._validation import api_version_validation +from .._vendor import LoadTestAdministrationClientMixinABC, LoadTestRunClientMixinABC + +if sys.version_info >= (3, 9): + from collections.abc import MutableMapping +else: + from typing import MutableMapping # type: ignore +JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + + +def build_load_test_administration_create_or_update_test_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_create_or_update_app_components_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/app-components" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_create_or_update_server_metrics_config_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/server-metrics-config" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_app_components_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/app-components" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_server_metrics_config_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/server-metrics-config" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_test_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_test_file_request( # pylint: disable=name-too-long + test_id: str, file_name: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/files/{fileName}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + "fileName": _SERIALIZER.url("file_name", file_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_list_test_files_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/files" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_list_tests_request( # pylint: disable=name-too-long + *, + orderby: Optional[str] = None, + search: Optional[str] = None, + last_modified_start_time: Optional[datetime.datetime] = None, + last_modified_end_time: Optional[datetime.datetime] = None, + maxpagesize: Optional[int] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests" + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if orderby is not None: + _params["orderby"] = _SERIALIZER.query("orderby", orderby, "str") + if search is not None: + _params["search"] = _SERIALIZER.query("search", search, "str") + if last_modified_start_time is not None: + _params["lastModifiedStartTime"] = _SERIALIZER.query( + "last_modified_start_time", last_modified_start_time, "iso-8601" + ) + if last_modified_end_time is not None: + _params["lastModifiedEndTime"] = _SERIALIZER.query("last_modified_end_time", last_modified_end_time, "iso-8601") + if maxpagesize is not None: + _params["maxpagesize"] = _SERIALIZER.query("maxpagesize", maxpagesize, "int") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_begin_upload_test_file_request( # pylint: disable=name-too-long + test_id: str, file_name: str, *, file_type: Optional[Union[str, _models.FileType]] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/files/{fileName}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + "fileName": _SERIALIZER.url("file_name", file_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if file_type is not None: + _params["fileType"] = _SERIALIZER.query("file_type", file_type, "str") + + # Construct headers + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_delete_test_file_request( # pylint: disable=name-too-long + test_id: str, file_name: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/files/{fileName}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + "fileName": _SERIALIZER.url("file_name", file_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_delete_test_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_create_or_update_test_profile_request( # pylint: disable=name-too-long + test_profile_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profiles/{testProfileId}" + path_format_arguments = { + "testProfileId": _SERIALIZER.url("test_profile_id", test_profile_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_delete_test_profile_request( # pylint: disable=name-too-long + test_profile_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profiles/{testProfileId}" + path_format_arguments = { + "testProfileId": _SERIALIZER.url("test_profile_id", test_profile_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_test_profile_request( # pylint: disable=name-too-long + test_profile_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profiles/{testProfileId}" + path_format_arguments = { + "testProfileId": _SERIALIZER.url("test_profile_id", test_profile_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_list_test_profiles_request( # pylint: disable=name-too-long + *, + maxpagesize: Optional[int] = None, + last_modified_start_time: Optional[datetime.datetime] = None, + last_modified_end_time: Optional[datetime.datetime] = None, + test_profile_ids: Optional[str] = None, + test_ids: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profiles" + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if maxpagesize is not None: + _params["maxpagesize"] = _SERIALIZER.query("maxpagesize", maxpagesize, "int") + if last_modified_start_time is not None: + _params["lastModifiedStartTime"] = _SERIALIZER.query( + "last_modified_start_time", last_modified_start_time, "iso-8601" + ) + if last_modified_end_time is not None: + _params["lastModifiedEndTime"] = _SERIALIZER.query("last_modified_end_time", last_modified_end_time, "iso-8601") + if test_profile_ids is not None: + _params["testProfileIds"] = _SERIALIZER.query("test_profile_ids", test_profile_ids, "str") + if test_ids is not None: + _params["testIds"] = _SERIALIZER.query("test_ids", test_ids, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_begin_test_run_request( # pylint: disable=name-too-long + test_run_id: str, *, old_test_run_id: Optional[str] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if old_test_run_id is not None: + _params["oldTestRunId"] = _SERIALIZER.query("old_test_run_id", old_test_run_id, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_create_or_update_app_components_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/app-components" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_create_or_update_server_metrics_config_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/server-metrics-config" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_delete_test_run_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_app_components_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/app-components" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_server_metrics_config_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/server-metrics-config" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_test_run_request(test_run_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_test_run_file_request( # pylint: disable=name-too-long + test_run_id: str, file_name: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/files/{fileName}" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + "fileName": _SERIALIZER.url("file_name", file_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_list_metric_dimension_values_request( # pylint: disable=name-too-long + test_run_id: str, + name: str, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + interval: Optional[Union[str, _models.TimeGrain]] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/metric-dimensions/{name}/values" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + "name": _SERIALIZER.url("name", name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + _params["metricname"] = _SERIALIZER.query("metric_name", metric_name, "str") + if interval is not None: + _params["interval"] = _SERIALIZER.query("interval", interval, "str") + _params["metricNamespace"] = _SERIALIZER.query("metric_namespace", metric_namespace, "str") + _params["timespan"] = _SERIALIZER.query("time_interval", time_interval, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_metric_definitions_request( # pylint: disable=name-too-long + test_run_id: str, *, metric_namespace: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/metric-definitions" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + _params["metricNamespace"] = _SERIALIZER.query("metric_namespace", metric_namespace, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_metric_namespaces_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/metric-namespaces" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_list_metrics_request( + test_run_id: str, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/metrics" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if aggregation is not None: + _params["aggregation"] = _SERIALIZER.query("aggregation", aggregation, "str") + _params["metricname"] = _SERIALIZER.query("metric_name", metric_name, "str") + if interval is not None: + _params["interval"] = _SERIALIZER.query("interval", interval, "str") + _params["metricNamespace"] = _SERIALIZER.query("metric_namespace", metric_namespace, "str") + _params["timespan"] = _SERIALIZER.query("time_interval", time_interval, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_list_test_runs_request( # pylint: disable=name-too-long + *, + orderby: Optional[str] = None, + search: Optional[str] = None, + test_id: Optional[str] = None, + execution_from: Optional[datetime.datetime] = None, + execution_to: Optional[datetime.datetime] = None, + status: Optional[str] = None, + maxpagesize: Optional[int] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs" + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if orderby is not None: + _params["orderby"] = _SERIALIZER.query("orderby", orderby, "str") + if search is not None: + _params["search"] = _SERIALIZER.query("search", search, "str") + if test_id is not None: + _params["testId"] = _SERIALIZER.query("test_id", test_id, "str") + if execution_from is not None: + _params["executionFrom"] = _SERIALIZER.query("execution_from", execution_from, "iso-8601") + if execution_to is not None: + _params["executionTo"] = _SERIALIZER.query("execution_to", execution_to, "iso-8601") + if status is not None: + _params["status"] = _SERIALIZER.query("status", status, "str") + if maxpagesize is not None: + _params["maxpagesize"] = _SERIALIZER.query("maxpagesize", maxpagesize, "int") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_stop_test_run_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}:stop" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_create_or_update_test_profile_run_request( # pylint: disable=name-too-long + test_profile_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs/{testProfileRunId}" + path_format_arguments = { + "testProfileRunId": _SERIALIZER.url("test_profile_run_id", test_profile_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_delete_test_profile_run_request( # pylint: disable=name-too-long + test_profile_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs/{testProfileRunId}" + path_format_arguments = { + "testProfileRunId": _SERIALIZER.url("test_profile_run_id", test_profile_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_test_profile_run_request( # pylint: disable=name-too-long + test_profile_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs/{testProfileRunId}" + path_format_arguments = { + "testProfileRunId": _SERIALIZER.url("test_profile_run_id", test_profile_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_list_test_profile_runs_request( # pylint: disable=name-too-long + *, + maxpagesize: Optional[int] = None, + min_start_date_time: Optional[datetime.datetime] = None, + max_start_date_time: Optional[datetime.datetime] = None, + min_end_date_time: Optional[datetime.datetime] = None, + max_end_date_time: Optional[datetime.datetime] = None, + created_date_start_time: Optional[datetime.datetime] = None, + created_date_end_time: Optional[datetime.datetime] = None, + test_profile_run_ids: Optional[str] = None, + test_profile_ids: Optional[str] = None, + statuses: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs" + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if maxpagesize is not None: + _params["maxpagesize"] = _SERIALIZER.query("maxpagesize", maxpagesize, "int") + if min_start_date_time is not None: + _params["minStartDateTime"] = _SERIALIZER.query("min_start_date_time", min_start_date_time, "iso-8601") + if max_start_date_time is not None: + _params["maxStartDateTime"] = _SERIALIZER.query("max_start_date_time", max_start_date_time, "iso-8601") + if min_end_date_time is not None: + _params["minEndDateTime"] = _SERIALIZER.query("min_end_date_time", min_end_date_time, "iso-8601") + if max_end_date_time is not None: + _params["maxEndDateTime"] = _SERIALIZER.query("max_end_date_time", max_end_date_time, "iso-8601") + if created_date_start_time is not None: + _params["createdDateStartTime"] = _SERIALIZER.query( + "created_date_start_time", created_date_start_time, "iso-8601" + ) + if created_date_end_time is not None: + _params["createdDateEndTime"] = _SERIALIZER.query("created_date_end_time", created_date_end_time, "iso-8601") + if test_profile_run_ids is not None: + _params["testProfileRunIds"] = _SERIALIZER.query("test_profile_run_ids", test_profile_run_ids, "str") + if test_profile_ids is not None: + _params["testProfileIds"] = _SERIALIZER.query("test_profile_ids", test_profile_ids, "str") + if statuses is not None: + _params["statuses"] = _SERIALIZER.query("statuses", statuses, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_stop_test_profile_run_request( # pylint: disable=name-too-long + test_profile_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs/{testProfileRunId}:stop" + path_format_arguments = { + "testProfileRunId": _SERIALIZER.url("test_profile_run_id", test_profile_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_create_or_update_test_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_create_or_update_app_components_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/app-components" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_create_or_update_server_metrics_config_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/server-metrics-config" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_app_components_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/app-components" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_server_metrics_config_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/server-metrics-config" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_test_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_test_file_request( # pylint: disable=name-too-long + test_id: str, file_name: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/files/{fileName}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + "fileName": _SERIALIZER.url("file_name", file_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_list_test_files_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/files" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_list_tests_request( # pylint: disable=name-too-long + *, + orderby: Optional[str] = None, + search: Optional[str] = None, + last_modified_start_time: Optional[datetime.datetime] = None, + last_modified_end_time: Optional[datetime.datetime] = None, + maxpagesize: Optional[int] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests" + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if orderby is not None: + _params["orderby"] = _SERIALIZER.query("orderby", orderby, "str") + if search is not None: + _params["search"] = _SERIALIZER.query("search", search, "str") + if last_modified_start_time is not None: + _params["lastModifiedStartTime"] = _SERIALIZER.query( + "last_modified_start_time", last_modified_start_time, "iso-8601" + ) + if last_modified_end_time is not None: + _params["lastModifiedEndTime"] = _SERIALIZER.query("last_modified_end_time", last_modified_end_time, "iso-8601") + if maxpagesize is not None: + _params["maxpagesize"] = _SERIALIZER.query("maxpagesize", maxpagesize, "int") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_begin_upload_test_file_request( # pylint: disable=name-too-long + test_id: str, file_name: str, *, file_type: Optional[Union[str, _models.FileType]] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: str = kwargs.pop("content_type") + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/files/{fileName}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + "fileName": _SERIALIZER.url("file_name", file_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if file_type is not None: + _params["fileType"] = _SERIALIZER.query("file_type", file_type, "str") + + # Construct headers + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_delete_test_file_request( # pylint: disable=name-too-long + test_id: str, file_name: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}/files/{fileName}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + "fileName": _SERIALIZER.url("file_name", file_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_delete_test_request( # pylint: disable=name-too-long + test_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/tests/{testId}" + path_format_arguments = { + "testId": _SERIALIZER.url("test_id", test_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_create_or_update_test_profile_request( # pylint: disable=name-too-long + test_profile_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profiles/{testProfileId}" + path_format_arguments = { + "testProfileId": _SERIALIZER.url("test_profile_id", test_profile_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_delete_test_profile_request( # pylint: disable=name-too-long + test_profile_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profiles/{testProfileId}" + path_format_arguments = { + "testProfileId": _SERIALIZER.url("test_profile_id", test_profile_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_get_test_profile_request( # pylint: disable=name-too-long + test_profile_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profiles/{testProfileId}" + path_format_arguments = { + "testProfileId": _SERIALIZER.url("test_profile_id", test_profile_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_administration_list_test_profiles_request( # pylint: disable=name-too-long + *, + maxpagesize: Optional[int] = None, + last_modified_start_time: Optional[datetime.datetime] = None, + last_modified_end_time: Optional[datetime.datetime] = None, + test_profile_ids: Optional[str] = None, + test_ids: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profiles" + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if maxpagesize is not None: + _params["maxpagesize"] = _SERIALIZER.query("maxpagesize", maxpagesize, "int") + if last_modified_start_time is not None: + _params["lastModifiedStartTime"] = _SERIALIZER.query( + "last_modified_start_time", last_modified_start_time, "iso-8601" + ) + if last_modified_end_time is not None: + _params["lastModifiedEndTime"] = _SERIALIZER.query("last_modified_end_time", last_modified_end_time, "iso-8601") + if test_profile_ids is not None: + _params["testProfileIds"] = _SERIALIZER.query("test_profile_ids", test_profile_ids, "str") + if test_ids is not None: + _params["testIds"] = _SERIALIZER.query("test_ids", test_ids, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_begin_test_run_request( # pylint: disable=name-too-long + test_run_id: str, *, old_test_run_id: Optional[str] = None, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if old_test_run_id is not None: + _params["oldTestRunId"] = _SERIALIZER.query("old_test_run_id", old_test_run_id, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_create_or_update_app_components_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/app-components" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_create_or_update_server_metrics_config_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/server-metrics-config" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["content-type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_delete_test_run_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_app_components_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/app-components" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_server_metrics_config_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/server-metrics-config" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_test_run_request(test_run_id: str, **kwargs: Any) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_test_run_file_request( # pylint: disable=name-too-long + test_run_id: str, file_name: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/files/{fileName}" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + "fileName": _SERIALIZER.url("file_name", file_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_list_metric_dimension_values_request( # pylint: disable=name-too-long + test_run_id: str, + name: str, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + interval: Optional[Union[str, _models.TimeGrain]] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/metric-dimensions/{name}/values" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + "name": _SERIALIZER.url("name", name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + _params["metricname"] = _SERIALIZER.query("metric_name", metric_name, "str") + if interval is not None: + _params["interval"] = _SERIALIZER.query("interval", interval, "str") + _params["metricNamespace"] = _SERIALIZER.query("metric_namespace", metric_namespace, "str") + _params["timespan"] = _SERIALIZER.query("time_interval", time_interval, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_metric_definitions_request( # pylint: disable=name-too-long + test_run_id: str, *, metric_namespace: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/metric-definitions" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + _params["metricNamespace"] = _SERIALIZER.query("metric_namespace", metric_namespace, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_metric_namespaces_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/metric-namespaces" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_list_metrics_request( + test_run_id: str, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}/metrics" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if aggregation is not None: + _params["aggregation"] = _SERIALIZER.query("aggregation", aggregation, "str") + _params["metricname"] = _SERIALIZER.query("metric_name", metric_name, "str") + if interval is not None: + _params["interval"] = _SERIALIZER.query("interval", interval, "str") + _params["metricNamespace"] = _SERIALIZER.query("metric_namespace", metric_namespace, "str") + _params["timespan"] = _SERIALIZER.query("time_interval", time_interval, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_list_test_runs_request( # pylint: disable=name-too-long + *, + orderby: Optional[str] = None, + search: Optional[str] = None, + test_id: Optional[str] = None, + execution_from: Optional[datetime.datetime] = None, + execution_to: Optional[datetime.datetime] = None, + status: Optional[str] = None, + maxpagesize: Optional[int] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs" + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if orderby is not None: + _params["orderby"] = _SERIALIZER.query("orderby", orderby, "str") + if search is not None: + _params["search"] = _SERIALIZER.query("search", search, "str") + if test_id is not None: + _params["testId"] = _SERIALIZER.query("test_id", test_id, "str") + if execution_from is not None: + _params["executionFrom"] = _SERIALIZER.query("execution_from", execution_from, "iso-8601") + if execution_to is not None: + _params["executionTo"] = _SERIALIZER.query("execution_to", execution_to, "iso-8601") + if status is not None: + _params["status"] = _SERIALIZER.query("status", status, "str") + if maxpagesize is not None: + _params["maxpagesize"] = _SERIALIZER.query("maxpagesize", maxpagesize, "int") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_stop_test_run_request( # pylint: disable=name-too-long + test_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-runs/{testRunId}:stop" + path_format_arguments = { + "testRunId": _SERIALIZER.url("test_run_id", test_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_create_or_update_test_profile_run_request( # pylint: disable=name-too-long + test_profile_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs/{testProfileRunId}" + path_format_arguments = { + "testProfileRunId": _SERIALIZER.url("test_profile_run_id", test_profile_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_delete_test_profile_run_request( # pylint: disable=name-too-long + test_profile_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs/{testProfileRunId}" + path_format_arguments = { + "testProfileRunId": _SERIALIZER.url("test_profile_run_id", test_profile_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_get_test_profile_run_request( # pylint: disable=name-too-long + test_profile_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs/{testProfileRunId}" + path_format_arguments = { + "testProfileRunId": _SERIALIZER.url("test_profile_run_id", test_profile_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_list_test_profile_runs_request( # pylint: disable=name-too-long + *, + maxpagesize: Optional[int] = None, + min_start_date_time: Optional[datetime.datetime] = None, + max_start_date_time: Optional[datetime.datetime] = None, + min_end_date_time: Optional[datetime.datetime] = None, + max_end_date_time: Optional[datetime.datetime] = None, + created_date_start_time: Optional[datetime.datetime] = None, + created_date_end_time: Optional[datetime.datetime] = None, + test_profile_run_ids: Optional[str] = None, + test_profile_ids: Optional[str] = None, + statuses: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs" + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + if maxpagesize is not None: + _params["maxpagesize"] = _SERIALIZER.query("maxpagesize", maxpagesize, "int") + if min_start_date_time is not None: + _params["minStartDateTime"] = _SERIALIZER.query("min_start_date_time", min_start_date_time, "iso-8601") + if max_start_date_time is not None: + _params["maxStartDateTime"] = _SERIALIZER.query("max_start_date_time", max_start_date_time, "iso-8601") + if min_end_date_time is not None: + _params["minEndDateTime"] = _SERIALIZER.query("min_end_date_time", min_end_date_time, "iso-8601") + if max_end_date_time is not None: + _params["maxEndDateTime"] = _SERIALIZER.query("max_end_date_time", max_end_date_time, "iso-8601") + if created_date_start_time is not None: + _params["createdDateStartTime"] = _SERIALIZER.query( + "created_date_start_time", created_date_start_time, "iso-8601" + ) + if created_date_end_time is not None: + _params["createdDateEndTime"] = _SERIALIZER.query("created_date_end_time", created_date_end_time, "iso-8601") + if test_profile_run_ids is not None: + _params["testProfileRunIds"] = _SERIALIZER.query("test_profile_run_ids", test_profile_run_ids, "str") + if test_profile_ids is not None: + _params["testProfileIds"] = _SERIALIZER.query("test_profile_ids", test_profile_ids, "str") + if statuses is not None: + _params["statuses"] = _SERIALIZER.query("statuses", statuses, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_load_test_run_stop_test_profile_run_request( # pylint: disable=name-too-long + test_profile_run_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-12-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/test-profile-runs/{testProfileRunId}:stop" + path_format_arguments = { + "testProfileRunId": _SERIALIZER.url("test_profile_run_id", test_profile_run_id, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +class LoadTestAdministrationClientOperationsMixin( # pylint: disable=name-too-long + LoadTestAdministrationClientMixinABC +): + + @overload + def create_or_update_test( + self, test_id: str, body: _models.Test, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.Test: + """Create a new test or update an existing test by providing the test Id. + + Create a new test or update an existing test by providing the test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: The resource instance. Required. + :type body: ~azure.developer.loadtesting.models.Test + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_test( + self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.Test: + """Create a new test or update an existing test by providing the test Id. + + Create a new test or update an existing test by providing the test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: The resource instance. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_test( + self, test_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.Test: + """Create a new test or update an existing test by providing the test Id. + + Create a new test or update an existing test by providing the test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: The resource instance. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def create_or_update_test( + self, test_id: str, body: Union[_models.Test, JSON, IO[bytes]], **kwargs: Any + ) -> _models.Test: + """Create a new test or update an existing test by providing the test Id. + + Create a new test or update an existing test by providing the test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: The resource instance. Is one of the following types: Test, JSON, IO[bytes] + Required. + :type body: ~azure.developer.loadtesting.models.Test or JSON or IO[bytes] + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Test] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_administration_create_or_update_test_request( + test_id=test_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.Test, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + def create_or_update_app_components( + self, + test_id: str, + body: _models.TestAppComponents, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestAppComponents: + """Add an app component to a test. + + Add an app component to a test by providing the resource Id, name and type. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: App Component model. Required. + :type body: ~azure.developer.loadtesting.models.TestAppComponents + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_app_components( + self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestAppComponents: + """Add an app component to a test. + + Add an app component to a test by providing the resource Id, name and type. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: App Component model. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_app_components( + self, test_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestAppComponents: + """Add an app component to a test. + + Add an app component to a test by providing the resource Id, name and type. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: App Component model. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def create_or_update_app_components( + self, test_id: str, body: Union[_models.TestAppComponents, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestAppComponents: + """Add an app component to a test. + + Add an app component to a test by providing the resource Id, name and type. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: App Component model. Is one of the following types: TestAppComponents, JSON, + IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestAppComponents or JSON or IO[bytes] + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + cls: ClsType[_models.TestAppComponents] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_administration_create_or_update_app_components_request( + test_id=test_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestAppComponents, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + def create_or_update_server_metrics_config( + self, + test_id: str, + body: _models.TestServerMetricConfig, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestServerMetricConfig: + """Configure server metrics for a test. + + Configure server metrics for a test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: Server metric configuration model. Required. + :type body: ~azure.developer.loadtesting.models.TestServerMetricConfig + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_server_metrics_config( + self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestServerMetricConfig: + """Configure server metrics for a test. + + Configure server metrics for a test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: Server metric configuration model. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_server_metrics_config( + self, test_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestServerMetricConfig: + """Configure server metrics for a test. + + Configure server metrics for a test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: Server metric configuration model. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def create_or_update_server_metrics_config( + self, test_id: str, body: Union[_models.TestServerMetricConfig, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestServerMetricConfig: + """Configure server metrics for a test. + + Configure server metrics for a test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: Server metric configuration model. Is one of the following types: + TestServerMetricConfig, JSON, IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestServerMetricConfig or JSON or IO[bytes] + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + cls: ClsType[_models.TestServerMetricConfig] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_administration_create_or_update_server_metrics_config_request( + test_id=test_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestServerMetricConfig, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_app_components(self, test_id: str, **kwargs: Any) -> _models.TestAppComponents: + """Get associated app component (collection of azure resources) for the given test. + + Get associated app component (collection of azure resources) for the given test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestAppComponents] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_app_components_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestAppComponents, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_server_metrics_config(self, test_id: str, **kwargs: Any) -> _models.TestServerMetricConfig: + """List server metrics configuration for the given test. + + List server metrics configuration for the given test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestServerMetricConfig] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_server_metrics_config_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestServerMetricConfig, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_test(self, test_id: str, **kwargs: Any) -> _models.Test: + """Get load test details by test Id. + + Get load test details by test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.Test] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_test_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.Test, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_test_file(self, test_id: str, file_name: str, **kwargs: Any) -> _models.TestFileInfo: + """Get all the files that are associated with a test. + + Get all the files that are associated with a test. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param file_name: Name of the file. Required. + :type file_name: str + :return: TestFileInfo. The TestFileInfo is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestFileInfo + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestFileInfo] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_test_file_request( + test_id=test_id, + file_name=file_name, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestFileInfo, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def list_test_files(self, test_id: str, **kwargs: Any) -> Iterable["_models.TestFileInfo"]: + """Get all test files. + + Get all test files. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: An iterator like instance of TestFileInfo + :rtype: ~azure.core.paging.ItemPaged[~azure.developer.loadtesting.models.TestFileInfo] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.TestFileInfo]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_administration_list_test_files_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TestFileInfo], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def list_tests( + self, + *, + orderby: Optional[str] = None, + search: Optional[str] = None, + last_modified_start_time: Optional[datetime.datetime] = None, + last_modified_end_time: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> Iterable["_models.Test"]: + """Get all load tests by the fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. + + Get all load tests by the fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. + + :keyword orderby: Sort on the supported fields in (field asc/desc) format. eg: + lastModifiedDateTime asc. Supported fields - lastModifiedDateTime. Default value is None. + :paramtype orderby: str + :keyword search: Prefix based, case sensitive search on searchable fields - displayName, + createdBy. For example, to search for a test, with display name is Login Test, + the search parameter can be Login. Default value is None. + :paramtype search: str + :keyword last_modified_start_time: Start DateTime(RFC 3339 literal format) of the last updated + time range to filter tests. Default value is None. + :paramtype last_modified_start_time: ~datetime.datetime + :keyword last_modified_end_time: End DateTime(RFC 3339 literal format) of the last updated time + range to filter tests. Default value is None. + :paramtype last_modified_end_time: ~datetime.datetime + :return: An iterator like instance of Test + :rtype: ~azure.core.paging.ItemPaged[~azure.developer.loadtesting.models.Test] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + maxpagesize = kwargs.pop("maxpagesize", None) + cls: ClsType[List[_models.Test]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_administration_list_tests_request( + orderby=orderby, + search=search, + last_modified_start_time=last_modified_start_time, + last_modified_end_time=last_modified_end_time, + maxpagesize=maxpagesize, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.Test], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def begin_upload_test_file( + self, + test_id: str, + file_name: str, + body: bytes, + *, + file_type: Optional[Union[str, _models.FileType]] = None, + **kwargs: Any + ) -> _models.TestFileInfo: + """Upload input file for a given test Id. File size can't be more than 50 MB. + Existing file with same name for the given test will be overwritten. File + should be provided in the request body as application/octet-stream. + + Upload input file for a given test Id. File size can't be more than 50 MB. + Existing file with same name for the given test will be overwritten. File + should be provided in the request body as application/octet-stream. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param file_name: Unique name for test file with file extension like : App.jmx. Required. + :type file_name: str + :param body: The file content as application/octet-stream. Required. + :type body: bytes + :keyword file_type: File type. Known values are: "JMX_FILE", "USER_PROPERTIES", + "ADDITIONAL_ARTIFACTS", "ZIPPED_ARTIFACTS", "URL_TEST_CONFIG", and "TEST_SCRIPT". Default value + is None. + :paramtype file_type: str or ~azure.developer.loadtesting.models.FileType + :return: TestFileInfo. The TestFileInfo is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestFileInfo + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("content-type", "application/octet-stream")) + cls: ClsType[_models.TestFileInfo] = kwargs.pop("cls", None) + + _content = body + + _request = build_load_test_administration_begin_upload_test_file_request( + test_id=test_id, + file_name=file_name, + file_type=file_type, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestFileInfo, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def delete_test_file( # pylint: disable=inconsistent-return-statements + self, test_id: str, file_name: str, **kwargs: Any + ) -> None: + """Delete file by the file name for a test. + + Delete file by the file name for a test. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param file_name: Name of the file. Required. + :type file_name: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_administration_delete_test_file_request( + test_id=test_id, + file_name=file_name, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace + def delete_test(self, test_id: str, **kwargs: Any) -> None: # pylint: disable=inconsistent-return-statements + """Delete a test by its test Id. + + Delete a test by its test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_administration_delete_test_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + +class LoadTestRunClientOperationsMixin(LoadTestRunClientMixinABC): + + @overload + def begin_test_run( + self, + test_run_id: str, + body: _models.TestRun, + *, + content_type: str = "application/merge-patch+json", + old_test_run_id: Optional[str] = None, + **kwargs: Any + ) -> _models.TestRun: + """Create and start a new test run with the given test run Id. + + Create and start a new test run with the given test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: The resource instance. Required. + :type body: ~azure.developer.loadtesting.models.TestRun + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is + provided, the + test will run with the JMX file, configuration and app components from the + existing test run. You can override the configuration values for new test run + in the request body. Default value is None. + :paramtype old_test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_test_run( + self, + test_run_id: str, + body: JSON, + *, + content_type: str = "application/merge-patch+json", + old_test_run_id: Optional[str] = None, + **kwargs: Any + ) -> _models.TestRun: + """Create and start a new test run with the given test run Id. + + Create and start a new test run with the given test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: The resource instance. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is + provided, the + test will run with the JMX file, configuration and app components from the + existing test run. You can override the configuration values for new test run + in the request body. Default value is None. + :paramtype old_test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_test_run( + self, + test_run_id: str, + body: IO[bytes], + *, + content_type: str = "application/merge-patch+json", + old_test_run_id: Optional[str] = None, + **kwargs: Any + ) -> _models.TestRun: + """Create and start a new test run with the given test run Id. + + Create and start a new test run with the given test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: The resource instance. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is + provided, the + test will run with the JMX file, configuration and app components from the + existing test run. You can override the configuration values for new test run + in the request body. Default value is None. + :paramtype old_test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def begin_test_run( + self, + test_run_id: str, + body: Union[_models.TestRun, JSON, IO[bytes]], + *, + old_test_run_id: Optional[str] = None, + **kwargs: Any + ) -> _models.TestRun: + """Create and start a new test run with the given test run Id. + + Create and start a new test run with the given test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: The resource instance. Is one of the following types: TestRun, JSON, IO[bytes] + Required. + :type body: ~azure.developer.loadtesting.models.TestRun or JSON or IO[bytes] + :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is + provided, the + test will run with the JMX file, configuration and app components from the + existing test run. You can override the configuration values for new test run + in the request body. Default value is None. + :paramtype old_test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.TestRun] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_run_begin_test_run_request( + test_run_id=test_run_id, + old_test_run_id=old_test_run_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + def create_or_update_app_components( + self, + test_run_id: str, + body: _models.TestRunAppComponents, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestRunAppComponents: + """Add an app component to a test run. + + Add an app component to a test run by providing the resource Id, name and type. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: App Component model. Required. + :type body: ~azure.developer.loadtesting.models.TestRunAppComponents + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_app_components( + self, test_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestRunAppComponents: + """Add an app component to a test run. + + Add an app component to a test run by providing the resource Id, name and type. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: App Component model. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_app_components( + self, test_run_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestRunAppComponents: + """Add an app component to a test run. + + Add an app component to a test run by providing the resource Id, name and type. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: App Component model. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def create_or_update_app_components( + self, test_run_id: str, body: Union[_models.TestRunAppComponents, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestRunAppComponents: + """Add an app component to a test run. + + Add an app component to a test run by providing the resource Id, name and type. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: App Component model. Is one of the following types: TestRunAppComponents, JSON, + IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestRunAppComponents or JSON or IO[bytes] + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + cls: ClsType[_models.TestRunAppComponents] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_run_create_or_update_app_components_request( + test_run_id=test_run_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunAppComponents, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + def create_or_update_server_metrics_config( + self, + test_run_id: str, + body: _models.TestRunServerMetricConfig, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestRunServerMetricConfig: + """Configure server metrics for a test run. + + Configure server metrics for a test run. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Server metric configuration model. Required. + :type body: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_server_metrics_config( + self, test_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestRunServerMetricConfig: + """Configure server metrics for a test run. + + Configure server metrics for a test run. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Server metric configuration model. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_server_metrics_config( + self, test_run_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestRunServerMetricConfig: + """Configure server metrics for a test run. + + Configure server metrics for a test run. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Server metric configuration model. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def create_or_update_server_metrics_config( + self, test_run_id: str, body: Union[_models.TestRunServerMetricConfig, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestRunServerMetricConfig: + """Configure server metrics for a test run. + + Configure server metrics for a test run. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Server metric configuration model. Is one of the following types: + TestRunServerMetricConfig, JSON, IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestRunServerMetricConfig or JSON or IO[bytes] + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + cls: ClsType[_models.TestRunServerMetricConfig] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_run_create_or_update_server_metrics_config_request( + test_run_id=test_run_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunServerMetricConfig, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def delete_test_run( # pylint: disable=inconsistent-return-statements + self, test_run_id: str, **kwargs: Any + ) -> None: + """Delete an existing load test run. + + Delete an existing load test run by providing the testRunId. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_run_delete_test_run_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace + def get_app_components(self, test_run_id: str, **kwargs: Any) -> _models.TestRunAppComponents: + """Get associated app component (collection of azure resources) for the given test + run. + + Get associated app component (collection of azure resources) for the given test + run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRunAppComponents] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_app_components_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunAppComponents, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_server_metrics_config(self, test_run_id: str, **kwargs: Any) -> _models.TestRunServerMetricConfig: + """Get associated server metrics configuration for the given test run. + + Get associated server metrics configuration for the given test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRunServerMetricConfig] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_server_metrics_config_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunServerMetricConfig, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_test_run(self, test_run_id: str, **kwargs: Any) -> _models.TestRun: + """Get test run details by test run Id. + + Get test run details by test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRun] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_test_run_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_test_run_file(self, test_run_id: str, file_name: str, **kwargs: Any) -> _models.TestRunFileInfo: + """Get test run file by file name. + + Get test run file by file name. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param file_name: Name of the file. Required. + :type file_name: str + :return: TestRunFileInfo. The TestRunFileInfo is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunFileInfo + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRunFileInfo] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_test_run_file_request( + test_run_id=test_run_id, + file_name=file_name, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunFileInfo, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def list_metric_dimension_values( + self, + test_run_id: str, + name: str, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + interval: Optional[Union[str, _models.TimeGrain]] = None, + **kwargs: Any + ) -> _models.DimensionValueList: + """List the dimension values for the given metric dimension name. + + List the dimension values for the given metric dimension name. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param name: Dimension name. Required. + :type name: str + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :return: DimensionValueList. The DimensionValueList is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.DimensionValueList + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.DimensionValueList] = kwargs.pop("cls", None) + + _request = build_load_test_run_list_metric_dimension_values_request( + test_run_id=test_run_id, + name=name, + metric_name=metric_name, + metric_namespace=metric_namespace, + time_interval=time_interval, + interval=interval, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.DimensionValueList, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_metric_definitions( + self, test_run_id: str, *, metric_namespace: str, **kwargs: Any + ) -> _models.MetricDefinitionCollection: + """List the metric definitions for a load test run. + + List the metric definitions for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :return: MetricDefinitionCollection. The MetricDefinitionCollection is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.MetricDefinitionCollection + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.MetricDefinitionCollection] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_metric_definitions_request( + test_run_id=test_run_id, + metric_namespace=metric_namespace, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.MetricDefinitionCollection, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_metric_namespaces(self, test_run_id: str, **kwargs: Any) -> _models.MetricNamespaceCollection: + """List the metric namespaces for a load test run. + + List the metric namespaces for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: MetricNamespaceCollection. The MetricNamespaceCollection is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.MetricNamespaceCollection + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.MetricNamespaceCollection] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_metric_namespaces_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.MetricNamespaceCollection, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + def list_metrics( + self, + test_run_id: str, + body: Optional[_models.MetricRequestPayload] = None, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + content_type: str = "application/json", + **kwargs: Any + ) -> Iterable["_models.TimeSeriesElement"]: + """List the metric values for a load test run. + + List the metric values for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Metric dimension filter. Default value is None. + :type body: ~azure.developer.loadtesting.models.MetricRequestPayload + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword aggregation: The aggregation. Default value is None. + :paramtype aggregation: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An iterator like instance of TimeSeriesElement + :rtype: ~azure.core.paging.ItemPaged[~azure.developer.loadtesting.models.TimeSeriesElement] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def list_metrics( + self, + test_run_id: str, + body: Optional[JSON] = None, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + content_type: str = "application/json", + **kwargs: Any + ) -> Iterable["_models.TimeSeriesElement"]: + """List the metric values for a load test run. + + List the metric values for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Metric dimension filter. Default value is None. + :type body: JSON + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword aggregation: The aggregation. Default value is None. + :paramtype aggregation: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An iterator like instance of TimeSeriesElement + :rtype: ~azure.core.paging.ItemPaged[~azure.developer.loadtesting.models.TimeSeriesElement] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def list_metrics( + self, + test_run_id: str, + body: Optional[IO[bytes]] = None, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + content_type: str = "application/json", + **kwargs: Any + ) -> Iterable["_models.TimeSeriesElement"]: + """List the metric values for a load test run. + + List the metric values for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Metric dimension filter. Default value is None. + :type body: IO[bytes] + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword aggregation: The aggregation. Default value is None. + :paramtype aggregation: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An iterator like instance of TimeSeriesElement + :rtype: ~azure.core.paging.ItemPaged[~azure.developer.loadtesting.models.TimeSeriesElement] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def list_metrics( + self, + test_run_id: str, + body: Optional[Union[_models.MetricRequestPayload, JSON, IO[bytes]]] = None, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + **kwargs: Any + ) -> Iterable["_models.TimeSeriesElement"]: + """List the metric values for a load test run. + + List the metric values for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Metric dimension filter. Is one of the following types: MetricRequestPayload, + JSON, IO[bytes] Default value is None. + :type body: ~azure.developer.loadtesting.models.MetricRequestPayload or JSON or IO[bytes] + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword aggregation: The aggregation. Default value is None. + :paramtype aggregation: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :return: An iterator like instance of TimeSeriesElement + :rtype: ~azure.core.paging.ItemPaged[~azure.developer.loadtesting.models.TimeSeriesElement] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[List[_models.TimeSeriesElement]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + content_type = content_type or "application/json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + if body is not None: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + else: + _content = None + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_run_list_metrics_request( + test_run_id=test_run_id, + metric_name=metric_name, + metric_namespace=metric_namespace, + time_interval=time_interval, + aggregation=aggregation, + interval=interval, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TimeSeriesElement], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def list_test_runs( + self, + *, + orderby: Optional[str] = None, + search: Optional[str] = None, + test_id: Optional[str] = None, + execution_from: Optional[datetime.datetime] = None, + execution_to: Optional[datetime.datetime] = None, + status: Optional[str] = None, + **kwargs: Any + ) -> Iterable["_models.TestRun"]: + """Get all test runs for the given filters. + + Get all test runs for the given filters. + + :keyword orderby: Sort on the supported fields in (field asc/desc) format. eg: executedDateTime + asc. Supported fields - executedDateTime. Default value is None. + :paramtype orderby: str + :keyword search: Prefix based, case sensitive search on searchable fields - description, + executedUser. For example, to search for a test run, with description 500 VUs, + the search parameter can be 500. Default value is None. + :paramtype search: str + :keyword test_id: Unique name of an existing load test. Default value is None. + :paramtype test_id: str + :keyword execution_from: Start DateTime(RFC 3339 literal format) of test-run execution time + filter range. Default value is None. + :paramtype execution_from: ~datetime.datetime + :keyword execution_to: End DateTime(RFC 3339 literal format) of test-run execution time filter + range. Default value is None. + :paramtype execution_to: ~datetime.datetime + :keyword status: Comma separated list of test run status. Default value is None. + :paramtype status: str + :return: An iterator like instance of TestRun + :rtype: ~azure.core.paging.ItemPaged[~azure.developer.loadtesting.models.TestRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + maxpagesize = kwargs.pop("maxpagesize", None) + cls: ClsType[List[_models.TestRun]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_run_list_test_runs_request( + orderby=orderby, + search=search, + test_id=test_id, + execution_from=execution_from, + execution_to=execution_to, + status=status, + maxpagesize=maxpagesize, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TestRun], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def stop_test_run(self, test_run_id: str, **kwargs: Any) -> _models.TestRun: + """Stop test run by test run Id. + + Stop test run by test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRun] = kwargs.pop("cls", None) + + _request = build_load_test_run_stop_test_run_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + +class LoadTestAdministrationClientOperationsMixin( # pylint: disable=name-too-long + LoadTestAdministrationClientMixinABC +): + + @overload + def create_or_update_test_profile( + self, + test_profile_id: str, + body: _models.TestProfile, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestProfile: + """Create a new test profile or update an existing test profile. + + Create a new test profile or update an existing test profile by providing the test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :param body: The resource instance. Required. + :type body: ~azure.developer.loadtesting.models.TestProfile + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_test_profile( + self, test_profile_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestProfile: + """Create a new test profile or update an existing test profile. + + Create a new test profile or update an existing test profile by providing the test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :param body: The resource instance. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_test_profile( + self, + test_profile_id: str, + body: IO[bytes], + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestProfile: + """Create a new test profile or update an existing test profile. + + Create a new test profile or update an existing test profile by providing the test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :param body: The resource instance. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_id", "content_type", "accept"]}, + ) + def create_or_update_test_profile( + self, test_profile_id: str, body: Union[_models.TestProfile, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestProfile: + """Create a new test profile or update an existing test profile. + + Create a new test profile or update an existing test profile by providing the test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :param body: The resource instance. Is one of the following types: TestProfile, JSON, IO[bytes] + Required. + :type body: ~azure.developer.loadtesting.models.TestProfile or JSON or IO[bytes] + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.TestProfile] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_administration_create_or_update_test_profile_request( + test_profile_id=test_profile_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfile, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_id", "accept"]}, + ) + def delete_test_profile( # pylint: disable=inconsistent-return-statements + self, test_profile_id: str, **kwargs: Any + ) -> None: + """Delete a test profile. + + Delete a test profile by its test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_administration_delete_test_profile_request( + test_profile_id=test_profile_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_id", "accept"]}, + ) + def get_test_profile(self, test_profile_id: str, **kwargs: Any) -> _models.TestProfile: + """Get load test profile details. + + Get load test profile details by test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestProfile] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_test_profile_request( + test_profile_id=test_profile_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfile, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={ + "2024-05-01-preview": [ + "api_version", + "maxpagesize", + "last_modified_start_time", + "last_modified_end_time", + "test_profile_ids", + "test_ids", + "accept", + ] + }, + ) + def list_test_profiles( + self, + *, + last_modified_start_time: Optional[datetime.datetime] = None, + last_modified_end_time: Optional[datetime.datetime] = None, + test_profile_ids: Optional[str] = None, + test_ids: Optional[str] = None, + **kwargs: Any + ) -> Iterable["_models.TestProfile"]: + """List test profiles. + + Get all test profiles for the given filters. + + :keyword last_modified_start_time: Start DateTime(RFC 3339 literal format) of the last updated + time range to filter test profiles. Default value is None. + :paramtype last_modified_start_time: ~datetime.datetime + :keyword last_modified_end_time: End DateTime(RFC 3339 literal format) of the last updated time + range to filter test profiles. Default value is None. + :paramtype last_modified_end_time: ~datetime.datetime + :keyword test_profile_ids: Comma separated list of IDs of the test profiles to filter. Default + value is None. + :paramtype test_profile_ids: str + :keyword test_ids: Comma separated list IDs of the tests which should be associated with the + test profiles to fetch. Default value is None. + :paramtype test_ids: str + :return: An iterator like instance of TestProfile + :rtype: ~azure.core.paging.ItemPaged[~azure.developer.loadtesting.models.TestProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + maxpagesize = kwargs.pop("maxpagesize", None) + cls: ClsType[List[_models.TestProfile]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_administration_list_test_profiles_request( + maxpagesize=maxpagesize, + last_modified_start_time=last_modified_start_time, + last_modified_end_time=last_modified_end_time, + test_profile_ids=test_profile_ids, + test_ids=test_ids, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TestProfile], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + +class LoadTestRunClientOperationsMixin(LoadTestRunClientMixinABC): + + @overload + def create_or_update_test_profile_run( + self, + test_profile_run_id: str, + body: _models.TestProfileRun, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestProfileRun: + """Create and start a new test profile run. + + Create and start a new test profile run with the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :param body: The resource instance. Required. + :type body: ~azure.developer.loadtesting.models.TestProfileRun + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_test_profile_run( + self, test_profile_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestProfileRun: + """Create and start a new test profile run. + + Create and start a new test profile run with the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :param body: The resource instance. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def create_or_update_test_profile_run( + self, + test_profile_run_id: str, + body: IO[bytes], + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestProfileRun: + """Create and start a new test profile run. + + Create and start a new test profile run with the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :param body: The resource instance. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_run_id", "content_type", "accept"]}, + ) + def create_or_update_test_profile_run( + self, test_profile_run_id: str, body: Union[_models.TestProfileRun, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestProfileRun: + """Create and start a new test profile run. + + Create and start a new test profile run with the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :param body: The resource instance. Is one of the following types: TestProfileRun, JSON, + IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestProfileRun or JSON or IO[bytes] + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.TestProfileRun] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_run_create_or_update_test_profile_run_request( + test_profile_run_id=test_profile_run_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfileRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_run_id", "accept"]}, + ) + def delete_test_profile_run( # pylint: disable=inconsistent-return-statements + self, test_profile_run_id: str, **kwargs: Any + ) -> None: + """Delete an existing load test profile run. + + Delete an existing load test profile run by providing the test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_run_delete_test_profile_run_request( + test_profile_run_id=test_profile_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_run_id", "accept"]}, + ) + def get_test_profile_run(self, test_profile_run_id: str, **kwargs: Any) -> _models.TestProfileRun: + """Get test profile run details. + + Get test profile run details by test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestProfileRun] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_test_profile_run_request( + test_profile_run_id=test_profile_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfileRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={ + "2024-05-01-preview": [ + "api_version", + "maxpagesize", + "min_start_date_time", + "max_start_date_time", + "min_end_date_time", + "max_end_date_time", + "created_date_start_time", + "created_date_end_time", + "test_profile_run_ids", + "test_profile_ids", + "statuses", + "accept", + ] + }, + ) + def list_test_profile_runs( + self, + *, + min_start_date_time: Optional[datetime.datetime] = None, + max_start_date_time: Optional[datetime.datetime] = None, + min_end_date_time: Optional[datetime.datetime] = None, + max_end_date_time: Optional[datetime.datetime] = None, + created_date_start_time: Optional[datetime.datetime] = None, + created_date_end_time: Optional[datetime.datetime] = None, + test_profile_run_ids: Optional[str] = None, + test_profile_ids: Optional[str] = None, + statuses: Optional[str] = None, + **kwargs: Any + ) -> Iterable["_models.TestProfileRun"]: + """List test profile runs. + + Get all test profile runs for the given filters. + + :keyword min_start_date_time: Minimum Start DateTime(RFC 3339 literal format) of the test + profile runs to filter on. Default value is None. + :paramtype min_start_date_time: ~datetime.datetime + :keyword max_start_date_time: Maximum Start DateTime(RFC 3339 literal format) of the test + profile runs to filter on. Default value is None. + :paramtype max_start_date_time: ~datetime.datetime + :keyword min_end_date_time: Minimum End DateTime(RFC 3339 literal format) of the test profile + runs to filter on. Default value is None. + :paramtype min_end_date_time: ~datetime.datetime + :keyword max_end_date_time: Maximum End DateTime(RFC 3339 literal format) of the test profile + runs to filter on. Default value is None. + :paramtype max_end_date_time: ~datetime.datetime + :keyword created_date_start_time: Start DateTime(RFC 3339 literal format) of the created time + range to filter test profile runs. Default value is None. + :paramtype created_date_start_time: ~datetime.datetime + :keyword created_date_end_time: End DateTime(RFC 3339 literal format) of the created time range + to filter test profile runs. Default value is None. + :paramtype created_date_end_time: ~datetime.datetime + :keyword test_profile_run_ids: Comma separated list of IDs of the test profile runs to filter. + Default value is None. + :paramtype test_profile_run_ids: str + :keyword test_profile_ids: Comma separated IDs of the test profiles which should be associated + with the test profile runs to fetch. Default value is None. + :paramtype test_profile_ids: str + :keyword statuses: Comma separated list of Statuses of the test profile runs to filter. Default + value is None. + :paramtype statuses: str + :return: An iterator like instance of TestProfileRun + :rtype: ~azure.core.paging.ItemPaged[~azure.developer.loadtesting.models.TestProfileRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + maxpagesize = kwargs.pop("maxpagesize", None) + cls: ClsType[List[_models.TestProfileRun]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_run_list_test_profile_runs_request( + maxpagesize=maxpagesize, + min_start_date_time=min_start_date_time, + max_start_date_time=max_start_date_time, + min_end_date_time=min_end_date_time, + max_end_date_time=max_end_date_time, + created_date_start_time=created_date_start_time, + created_date_end_time=created_date_end_time, + test_profile_run_ids=test_profile_run_ids, + test_profile_ids=test_profile_ids, + statuses=statuses, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TestProfileRun], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_run_id", "accept"]}, + ) + def stop_test_profile_run(self, test_profile_run_id: str, **kwargs: Any) -> _models.TestProfileRun: + """Stop test profile run. + + Stop test profile run for the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestProfileRun] = kwargs.pop("cls", None) + + _request = build_load_test_run_stop_test_profile_run_request( + test_profile_run_id=test_profile_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfileRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_patch.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_operations/_patch.py similarity index 84% rename from sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_patch.py rename to sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_operations/_patch.py index 7fa7d5a5e794..f7dd32510333 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/aio/_patch.py +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_operations/_patch.py @@ -6,11 +6,8 @@ Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize """ -from typing import List, TYPE_CHECKING +from typing import List -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - pass __all__: List[str] = [] # Add all objects you want publicly available to users at this package level diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_patch.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_patch.py similarity index 79% rename from sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_patch.py rename to sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_patch.py index 7478f85edfe2..f7dd32510333 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_patch.py +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_patch.py @@ -6,13 +6,9 @@ Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize """ -from typing import TYPE_CHECKING, List +from typing import List -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - pass -__all__: List[str] = [] # Add all objects you want publicly available to users at this -# package level +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level def patch_sdk(): diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_serialization.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_serialization.py similarity index 82% rename from sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_serialization.py rename to sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_serialization.py index f17c068e833e..b24ab2885450 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_generated/_serialization.py +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_serialization.py @@ -1,3 +1,4 @@ +# pylint: disable=too-many-lines # -------------------------------------------------------------------------- # # Copyright (c) Microsoft Corporation. All rights reserved. @@ -24,7 +25,6 @@ # # -------------------------------------------------------------------------- -# pylint: skip-file # pyright: reportUnnecessaryTypeIgnoreComment=false from base64 import b64decode, b64encode @@ -52,7 +52,6 @@ MutableMapping, Type, List, - Mapping, ) try: @@ -63,8 +62,8 @@ import isodate # type: ignore -from azure.core.exceptions import DeserializationError, SerializationError, raise_with_traceback -from azure.core.serialization import NULL as AzureCoreNull +from azure.core.exceptions import DeserializationError, SerializationError +from azure.core.serialization import NULL as CoreNull _BOM = codecs.BOM_UTF8.decode(encoding="utf-8") @@ -91,6 +90,8 @@ def deserialize_from_text(cls, data: Optional[Union[AnyStr, IO]], content_type: :param data: Input, could be bytes or stream (will be decoded with UTF8) or text :type data: str or bytes or IO :param str content_type: The content type. + :return: The deserialized data. + :rtype: object """ if hasattr(data, "read"): # Assume a stream @@ -112,7 +113,7 @@ def deserialize_from_text(cls, data: Optional[Union[AnyStr, IO]], content_type: try: return json.loads(data_as_str) except ValueError as err: - raise DeserializationError("JSON is invalid: {}".format(err), err) + raise DeserializationError("JSON is invalid: {}".format(err), err) from err elif "xml" in (content_type or []): try: @@ -124,7 +125,7 @@ def deserialize_from_text(cls, data: Optional[Union[AnyStr, IO]], content_type: pass return ET.fromstring(data_as_str) # nosec - except ET.ParseError: + except ET.ParseError as err: # It might be because the server has an issue, and returned JSON with # content-type XML.... # So let's try a JSON load, and if it's still broken @@ -143,7 +144,9 @@ def _json_attemp(data): # The function hack is because Py2.7 messes up with exception # context otherwise. _LOGGER.critical("Wasn't XML not JSON, failing") - raise_with_traceback(DeserializationError, "XML is invalid") + raise DeserializationError("XML is invalid") from err + elif content_type.startswith("text/"): + return data_as_str raise DeserializationError("Cannot deserialize content-type: {}".format(content_type)) @classmethod @@ -153,6 +156,11 @@ def deserialize_from_http_generics(cls, body_bytes: Optional[Union[AnyStr, IO]], Use bytes and headers to NOT use any requests/aiohttp or whatever specific implementation. Headers will tested for "content-type" + + :param bytes body_bytes: The body of the response. + :param dict headers: The headers of the response. + :returns: The deserialized data. + :rtype: object """ # Try to use content-type from headers if available content_type = None @@ -170,13 +178,6 @@ def deserialize_from_http_generics(cls, body_bytes: Optional[Union[AnyStr, IO]], return None -try: - basestring # type: ignore - unicode_str = unicode # type: ignore -except NameError: - basestring = str - unicode_str = str - _LOGGER = logging.getLogger(__name__) try: @@ -189,15 +190,30 @@ class UTC(datetime.tzinfo): """Time Zone info for handling UTC""" def utcoffset(self, dt): - """UTF offset for UTC is 0.""" + """UTF offset for UTC is 0. + + :param datetime.datetime dt: The datetime + :returns: The offset + :rtype: datetime.timedelta + """ return datetime.timedelta(0) def tzname(self, dt): - """Timestamp representation.""" + """Timestamp representation. + + :param datetime.datetime dt: The datetime + :returns: The timestamp representation + :rtype: str + """ return "Z" def dst(self, dt): - """No daylight saving for UTC.""" + """No daylight saving for UTC. + + :param datetime.datetime dt: The datetime + :returns: The daylight saving time + :rtype: datetime.timedelta + """ return datetime.timedelta(hours=1) @@ -211,7 +227,7 @@ class _FixedOffset(datetime.tzinfo): # type: ignore :param datetime.timedelta offset: offset in timedelta format """ - def __init__(self, offset): + def __init__(self, offset) -> None: self.__offset = offset def utcoffset(self, dt): @@ -240,24 +256,26 @@ def __getinitargs__(self): _FLATTEN = re.compile(r"(? None: - self.additional_properties: Dict[str, Any] = {} - for k in kwargs: + self.additional_properties: Optional[Dict[str, Any]] = {} + for k in kwargs: # pylint: disable=consider-using-dict-items if k not in self._attribute_map: _LOGGER.warning("%s is not a known attribute of class %s and will be ignored", k, self.__class__) elif k in self._validation and self._validation[k].get("readonly", False): @@ -305,13 +330,23 @@ def __init__(self, **kwargs: Any) -> None: setattr(self, k, kwargs[k]) def __eq__(self, other: Any) -> bool: - """Compare objects by comparing all attributes.""" + """Compare objects by comparing all attributes. + + :param object other: The object to compare + :returns: True if objects are equal + :rtype: bool + """ if isinstance(other, self.__class__): return self.__dict__ == other.__dict__ return False def __ne__(self, other: Any) -> bool: - """Compare objects by comparing all attributes.""" + """Compare objects by comparing all attributes. + + :param object other: The object to compare + :returns: True if objects are not equal + :rtype: bool + """ return not self.__eq__(other) def __str__(self) -> str: @@ -331,7 +366,11 @@ def is_xml_model(cls) -> bool: @classmethod def _create_xml_node(cls): - """Create XML node.""" + """Create XML node. + + :returns: The XML node + :rtype: xml.etree.ElementTree.Element + """ try: xml_map = cls._xml_map # type: ignore except AttributeError: @@ -340,7 +379,7 @@ def _create_xml_node(cls): return _create_xml_node(xml_map.get("name", cls.__name__), xml_map.get("prefix", None), xml_map.get("ns", None)) def serialize(self, keep_readonly: bool = False, **kwargs: Any) -> JSON: - """Return the JSON that would be sent to azure from this model. + """Return the JSON that would be sent to server from this model. This is an alias to `as_dict(full_restapi_key_transformer, keep_readonly=False)`. @@ -351,7 +390,9 @@ def serialize(self, keep_readonly: bool = False, **kwargs: Any) -> JSON: :rtype: dict """ serializer = Serializer(self._infer_class_models()) - return serializer._serialize(self, keep_readonly=keep_readonly, **kwargs) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, keep_readonly=keep_readonly, **kwargs + ) def as_dict( self, @@ -385,12 +426,15 @@ def my_key_transformer(key, attr_desc, value): If you want XML serialization, you can pass the kwargs is_xml=True. + :param bool keep_readonly: If you want to serialize the readonly attributes :param function key_transformer: A key transformer function. :returns: A dict JSON compatible object :rtype: dict """ serializer = Serializer(self._infer_class_models()) - return serializer._serialize(self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs) + return serializer._serialize( # type: ignore # pylint: disable=protected-access + self, key_transformer=key_transformer, keep_readonly=keep_readonly, **kwargs + ) @classmethod def _infer_class_models(cls): @@ -400,7 +444,7 @@ def _infer_class_models(cls): client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} if cls.__name__ not in client_models: raise ValueError("Not Autorest generated code") - except Exception: + except Exception: # pylint: disable=broad-exception-caught # Assume it's not Autorest generated (tests?). Add ourselves as dependencies. client_models = {cls.__name__: cls} return client_models @@ -413,9 +457,10 @@ def deserialize(cls: Type[ModelType], data: Any, content_type: Optional[str] = N :param str content_type: JSON by default, set application/xml if XML. :returns: An instance of this model :raises: DeserializationError if something went wrong + :rtype: ModelType """ deserializer = Deserializer(cls._infer_class_models()) - return deserializer(cls.__name__, data, content_type=content_type) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore @classmethod def from_dict( @@ -431,9 +476,11 @@ def from_dict( and last_rest_key_case_insensitive_extractor) :param dict data: A dict using RestAPI structure + :param function key_extractors: A key extractor function. :param str content_type: JSON by default, set application/xml if XML. :returns: An instance of this model :raises: DeserializationError if something went wrong + :rtype: ModelType """ deserializer = Deserializer(cls._infer_class_models()) deserializer.key_extractors = ( # type: ignore @@ -445,7 +492,7 @@ def from_dict( if key_extractors is None else key_extractors ) - return deserializer(cls.__name__, data, content_type=content_type) + return deserializer(cls.__name__, data, content_type=content_type) # type: ignore @classmethod def _flatten_subtype(cls, key, objects): @@ -453,21 +500,25 @@ def _flatten_subtype(cls, key, objects): return {} result = dict(cls._subtype_map[key]) for valuetype in cls._subtype_map[key].values(): - result.update(objects[valuetype]._flatten_subtype(key, objects)) + result.update(objects[valuetype]._flatten_subtype(key, objects)) # pylint: disable=protected-access return result @classmethod def _classify(cls, response, objects): """Check the class _subtype_map for any child classes. We want to ignore any inherited _subtype_maps. - Remove the polymorphic key from the initial data. + + :param dict response: The initial data + :param dict objects: The class objects + :returns: The class to be used + :rtype: class """ for subtype_key in cls.__dict__.get("_subtype_map", {}).keys(): subtype_value = None if not isinstance(response, ET.Element): rest_api_response_key = cls._get_rest_key_parts(subtype_key)[-1] - subtype_value = response.pop(rest_api_response_key, None) or response.pop(subtype_key, None) + subtype_value = response.get(rest_api_response_key, None) or response.get(subtype_key, None) else: subtype_value = xml_key_extractor(subtype_key, cls._attribute_map[subtype_key], response) if subtype_value: @@ -506,11 +557,13 @@ def _decode_attribute_map_key(key): inside the received data. :param str key: A key string from the generated code + :returns: The decoded key + :rtype: str """ return key.replace("\\.", ".") -class Serializer(object): +class Serializer: # pylint: disable=too-many-public-methods """Request object model serializer.""" basic_types = {str: "str", int: "int", bool: "bool", float: "float"} @@ -545,7 +598,7 @@ class Serializer(object): "multiple": lambda x, y: x % y != 0, } - def __init__(self, classes: Optional[Mapping[str, Type[ModelType]]] = None): + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: self.serialize_type = { "iso-8601": Serializer.serialize_iso, "rfc-1123": Serializer.serialize_rfc, @@ -561,17 +614,20 @@ def __init__(self, classes: Optional[Mapping[str, Type[ModelType]]] = None): "[]": self.serialize_iter, "{}": self.serialize_dict, } - self.dependencies: Dict[str, Type[ModelType]] = dict(classes) if classes else {} + self.dependencies: Dict[str, type] = dict(classes) if classes else {} self.key_transformer = full_restapi_key_transformer self.client_side_validation = True - def _serialize(self, target_obj, data_type=None, **kwargs): + def _serialize( # pylint: disable=too-many-nested-blocks, too-many-branches, too-many-statements, too-many-locals + self, target_obj, data_type=None, **kwargs + ): """Serialize data into a string according to type. - :param target_obj: The data to be serialized. + :param object target_obj: The data to be serialized. :param str data_type: The type to be serialized from. :rtype: str, dict :raises: SerializationError if serialization fails. + :returns: The serialized data. """ key_transformer = kwargs.get("key_transformer", self.key_transformer) keep_readonly = kwargs.get("keep_readonly", False) @@ -597,12 +653,14 @@ def _serialize(self, target_obj, data_type=None, **kwargs): serialized = {} if is_xml_model_serialization: - serialized = target_obj._create_xml_node() + serialized = target_obj._create_xml_node() # pylint: disable=protected-access try: - attributes = target_obj._attribute_map + attributes = target_obj._attribute_map # pylint: disable=protected-access for attr, attr_desc in attributes.items(): attr_name = attr - if not keep_readonly and target_obj._validation.get(attr_name, {}).get("readonly", False): + if not keep_readonly and target_obj._validation.get( # pylint: disable=protected-access + attr_name, {} + ).get("readonly", False): continue if attr_name == "additional_properties" and attr_desc["key"] == "": @@ -629,7 +687,7 @@ def _serialize(self, target_obj, data_type=None, **kwargs): if xml_desc.get("attr", False): if xml_ns: ET.register_namespace(xml_prefix, xml_ns) - xml_name = "{}{}".format(xml_ns, xml_name) + xml_name = "{{{}}}{}".format(xml_ns, xml_name) serialized.set(xml_name, new_attr) # type: ignore continue if xml_desc.get("text", False): @@ -638,7 +696,8 @@ def _serialize(self, target_obj, data_type=None, **kwargs): if isinstance(new_attr, list): serialized.extend(new_attr) # type: ignore elif isinstance(new_attr, ET.Element): - # If the down XML has no XML/Name, we MUST replace the tag with the local tag. But keeping the namespaces. + # If the down XML has no XML/Name, + # we MUST replace the tag with the local tag. But keeping the namespaces. if "name" not in getattr(orig_attr, "_xml_map", {}): splitted_tag = new_attr.tag.split("}") if len(splitted_tag) == 2: # Namespace @@ -649,7 +708,7 @@ def _serialize(self, target_obj, data_type=None, **kwargs): else: # That's a basic type # Integrate namespace if necessary local_node = _create_xml_node(xml_name, xml_prefix, xml_ns) - local_node.text = unicode_str(new_attr) + local_node.text = str(new_attr) serialized.append(local_node) # type: ignore else: # JSON for k in reversed(keys): # type: ignore @@ -662,23 +721,24 @@ def _serialize(self, target_obj, data_type=None, **kwargs): _serialized.update(_new_attr) # type: ignore _new_attr = _new_attr[k] # type: ignore _serialized = _serialized[k] - except ValueError: - continue + except ValueError as err: + if isinstance(err, SerializationError): + raise except (AttributeError, KeyError, TypeError) as err: msg = "Attribute {} in object {} cannot be serialized.\n{}".format(attr_name, class_name, str(target_obj)) - raise_with_traceback(SerializationError, msg, err) - else: - return serialized + raise SerializationError(msg) from err + return serialized def body(self, data, data_type, **kwargs): """Serialize data intended for a request body. - :param data: The data to be serialized. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. :rtype: dict :raises: SerializationError if serialization fails. :raises: ValueError if data is None + :returns: The serialized request body """ # Just in case this is a dict @@ -707,18 +767,20 @@ def body(self, data, data_type, **kwargs): attribute_key_case_insensitive_extractor, last_rest_key_case_insensitive_extractor, ] - data = deserializer._deserialize(data_type, data) + data = deserializer._deserialize(data_type, data) # pylint: disable=protected-access except DeserializationError as err: - raise_with_traceback(SerializationError, "Unable to build a model: " + str(err), err) + raise SerializationError("Unable to build a model: " + str(err)) from err return self._serialize(data, data_type, **kwargs) def url(self, name, data, data_type, **kwargs): """Serialize data intended for a URL path. - :param data: The data to be serialized. + :param str name: The name of the URL path parameter. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. :rtype: str + :returns: The serialized URL path :raises: TypeError if serialization fails. :raises: ValueError if data is None """ @@ -729,30 +791,30 @@ def url(self, name, data, data_type, **kwargs): if kwargs.get("skip_quote") is True: output = str(output) + output = output.replace("{", quote("{")).replace("}", quote("}")) else: output = quote(str(output), safe="") - except SerializationError: - raise TypeError("{} must be type {}.".format(name, data_type)) - else: - return output + except SerializationError as exc: + raise TypeError("{} must be type {}.".format(name, data_type)) from exc + return output def query(self, name, data, data_type, **kwargs): """Serialize data intended for a URL query. - :param data: The data to be serialized. + :param str name: The name of the query parameter. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. - :rtype: str + :rtype: str, list :raises: TypeError if serialization fails. :raises: ValueError if data is None + :returns: The serialized query parameter """ try: # Treat the list aside, since we don't want to encode the div separator if data_type.startswith("["): internal_data_type = data_type[1:-1] - data = [self.serialize_data(d, internal_data_type, **kwargs) if d is not None else "" for d in data] - if not kwargs.get("skip_quote", False): - data = [quote(str(d), safe="") for d in data] - return str(self.serialize_iter(data, internal_data_type, **kwargs)) + do_quote = not kwargs.get("skip_quote", False) + return self.serialize_iter(data, internal_data_type, do_quote=do_quote, **kwargs) # Not a list, regular serialization output = self.serialize_data(data, data_type, **kwargs) @@ -762,19 +824,20 @@ def query(self, name, data, data_type, **kwargs): output = str(output) else: output = quote(str(output), safe="") - except SerializationError: - raise TypeError("{} must be type {}.".format(name, data_type)) - else: - return str(output) + except SerializationError as exc: + raise TypeError("{} must be type {}.".format(name, data_type)) from exc + return str(output) def header(self, name, data, data_type, **kwargs): """Serialize data intended for a request header. - :param data: The data to be serialized. + :param str name: The name of the header. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. :rtype: str :raises: TypeError if serialization fails. :raises: ValueError if data is None + :returns: The serialized header """ try: if data_type in ["[str]"]: @@ -783,32 +846,31 @@ def header(self, name, data, data_type, **kwargs): output = self.serialize_data(data, data_type, **kwargs) if data_type == "bool": output = json.dumps(output) - except SerializationError: - raise TypeError("{} must be type {}.".format(name, data_type)) - else: - return str(output) + except SerializationError as exc: + raise TypeError("{} must be type {}.".format(name, data_type)) from exc + return str(output) def serialize_data(self, data, data_type, **kwargs): """Serialize generic data according to supplied data type. - :param data: The data to be serialized. + :param object data: The data to be serialized. :param str data_type: The type to be serialized from. - :param bool required: Whether it's essential that the data not be - empty or None :raises: AttributeError if required data is None. :raises: ValueError if data is None :raises: SerializationError if serialization fails. + :returns: The serialized data. + :rtype: str, int, float, bool, dict, list """ if data is None: raise ValueError("No value for given attribute") try: - if data is AzureCoreNull: + if data is CoreNull: return None if data_type in self.basic_types.values(): return self.serialize_basic(data, data_type, **kwargs) - elif data_type in self.serialize_type: + if data_type in self.serialize_type: return self.serialize_type[data_type](data, **kwargs) # If dependencies is empty, try with current data class @@ -823,12 +885,11 @@ def serialize_data(self, data, data_type, **kwargs): except (ValueError, TypeError) as err: msg = "Unable to serialize value: {!r} as type: {!r}." - raise_with_traceback(SerializationError, msg.format(data, data_type), err) - else: - return self._serialize(data, **kwargs) + raise SerializationError(msg.format(data, data_type)) from err + return self._serialize(data, **kwargs) @classmethod - def _get_custom_serializers(cls, data_type, **kwargs): + def _get_custom_serializers(cls, data_type, **kwargs): # pylint: disable=inconsistent-return-statements custom_serializer = kwargs.get("basic_types_serializers", {}).get(data_type) if custom_serializer: return custom_serializer @@ -844,23 +905,26 @@ def serialize_basic(cls, data, data_type, **kwargs): - basic_types_serializers dict[str, callable] : If set, use the callable as serializer - is_xml bool : If set, use xml_basic_types_serializers - :param data: Object to be serialized. + :param obj data: Object to be serialized. :param str data_type: Type of object in the iterable. + :rtype: str, int, float, bool + :return: serialized object """ custom_serializer = cls._get_custom_serializers(data_type, **kwargs) if custom_serializer: return custom_serializer(data) if data_type == "str": return cls.serialize_unicode(data) - return eval(data_type)(data) # nosec + return eval(data_type)(data) # nosec # pylint: disable=eval-used @classmethod def serialize_unicode(cls, data): """Special handling for serializing unicode strings in Py2. Encode to UTF-8 if unicode, otherwise handle as a str. - :param data: Object to be serialized. + :param str data: Object to be serialized. :rtype: str + :return: serialized object """ try: # If I received an enum, return its value return data.value @@ -874,8 +938,7 @@ def serialize_unicode(cls, data): return data except NameError: return str(data) - else: - return str(data) + return str(data) def serialize_iter(self, data, iter_type, div=None, **kwargs): """Serialize iterable. @@ -885,13 +948,13 @@ def serialize_iter(self, data, iter_type, div=None, **kwargs): serialization_ctxt['type'] should be same as data_type. - is_xml bool : If set, serialize as XML - :param list attr: Object to be serialized. + :param list data: Object to be serialized. :param str iter_type: Type of object in the iterable. - :param bool required: Whether the objects in the iterable must - not be None or empty. :param str div: If set, this str will be used to combine the elements in the iterable into a combined string. Default is 'None'. + Defaults to False. :rtype: list, str + :return: serialized iterable """ if isinstance(data, str): raise SerializationError("Refuse str type as a valid iter type.") @@ -903,9 +966,14 @@ def serialize_iter(self, data, iter_type, div=None, **kwargs): for d in data: try: serialized.append(self.serialize_data(d, iter_type, **kwargs)) - except ValueError: + except ValueError as err: + if isinstance(err, SerializationError): + raise serialized.append(None) + if kwargs.get("do_quote", False): + serialized = ["" if s is None else quote(str(s), safe="") for s in serialized] + if div: serialized = ["" if s is None else str(s) for s in serialized] serialized = div.join(serialized) @@ -941,16 +1009,17 @@ def serialize_dict(self, attr, dict_type, **kwargs): :param dict attr: Object to be serialized. :param str dict_type: Type of object in the dictionary. - :param bool required: Whether the objects in the dictionary must - not be None or empty. :rtype: dict + :return: serialized dictionary """ serialization_ctxt = kwargs.get("serialization_ctxt", {}) serialized = {} for key, value in attr.items(): try: serialized[self.serialize_unicode(key)] = self.serialize_data(value, dict_type, **kwargs) - except ValueError: + except ValueError as err: + if isinstance(err, SerializationError): + raise serialized[self.serialize_unicode(key)] = None if "xml" in serialization_ctxt: @@ -965,7 +1034,7 @@ def serialize_dict(self, attr, dict_type, **kwargs): return serialized - def serialize_object(self, attr, **kwargs): + def serialize_object(self, attr, **kwargs): # pylint: disable=too-many-return-statements """Serialize a generic object. This will be handled as a dictionary. If object passed in is not a basic type (str, int, float, dict, list) it will simply be @@ -973,6 +1042,7 @@ def serialize_object(self, attr, **kwargs): :param dict attr: Object to be serialized. :rtype: dict or str + :return: serialized object """ if attr is None: return None @@ -983,7 +1053,7 @@ def serialize_object(self, attr, **kwargs): return self.serialize_basic(attr, self.basic_types[obj_type], **kwargs) if obj_type is _long_type: return self.serialize_long(attr) - if obj_type is unicode_str: + if obj_type is str: return self.serialize_unicode(attr) if obj_type is datetime.datetime: return self.serialize_iso(attr) @@ -997,7 +1067,7 @@ def serialize_object(self, attr, **kwargs): return self.serialize_decimal(attr) # If it's a model or I know this dependency, serialize as a Model - elif obj_type in self.dependencies.values() or isinstance(attr, Model): + if obj_type in self.dependencies.values() or isinstance(attr, Model): return self._serialize(attr) if obj_type == dict: @@ -1028,56 +1098,61 @@ def serialize_enum(attr, enum_obj=None): try: enum_obj(result) # type: ignore return result - except ValueError: + except ValueError as exc: for enum_value in enum_obj: # type: ignore if enum_value.value.lower() == str(attr).lower(): return enum_value.value error = "{!r} is not valid value for enum {!r}" - raise SerializationError(error.format(attr, enum_obj)) + raise SerializationError(error.format(attr, enum_obj)) from exc @staticmethod - def serialize_bytearray(attr, **kwargs): + def serialize_bytearray(attr, **kwargs): # pylint: disable=unused-argument """Serialize bytearray into base-64 string. - :param attr: Object to be serialized. + :param str attr: Object to be serialized. :rtype: str + :return: serialized base64 """ return b64encode(attr).decode() @staticmethod - def serialize_base64(attr, **kwargs): + def serialize_base64(attr, **kwargs): # pylint: disable=unused-argument """Serialize str into base-64 string. - :param attr: Object to be serialized. + :param str attr: Object to be serialized. :rtype: str + :return: serialized base64 """ encoded = b64encode(attr).decode("ascii") return encoded.strip("=").replace("+", "-").replace("/", "_") @staticmethod - def serialize_decimal(attr, **kwargs): + def serialize_decimal(attr, **kwargs): # pylint: disable=unused-argument """Serialize Decimal object to float. - :param attr: Object to be serialized. + :param decimal attr: Object to be serialized. :rtype: float + :return: serialized decimal """ return float(attr) @staticmethod - def serialize_long(attr, **kwargs): + def serialize_long(attr, **kwargs): # pylint: disable=unused-argument """Serialize long (Py2) or int (Py3). - :param attr: Object to be serialized. + :param int attr: Object to be serialized. :rtype: int/long + :return: serialized long """ return _long_type(attr) @staticmethod - def serialize_date(attr, **kwargs): + def serialize_date(attr, **kwargs): # pylint: disable=unused-argument """Serialize Date object into ISO-8601 formatted string. :param Date attr: Object to be serialized. :rtype: str + :return: serialized date """ if isinstance(attr, str): attr = isodate.parse_date(attr) @@ -1085,11 +1160,12 @@ def serialize_date(attr, **kwargs): return t @staticmethod - def serialize_time(attr, **kwargs): + def serialize_time(attr, **kwargs): # pylint: disable=unused-argument """Serialize Time object into ISO-8601 formatted string. :param datetime.time attr: Object to be serialized. :rtype: str + :return: serialized time """ if isinstance(attr, str): attr = isodate.parse_time(attr) @@ -1099,30 +1175,32 @@ def serialize_time(attr, **kwargs): return t @staticmethod - def serialize_duration(attr, **kwargs): + def serialize_duration(attr, **kwargs): # pylint: disable=unused-argument """Serialize TimeDelta object into ISO-8601 formatted string. :param TimeDelta attr: Object to be serialized. :rtype: str + :return: serialized duration """ if isinstance(attr, str): attr = isodate.parse_duration(attr) return isodate.duration_isoformat(attr) @staticmethod - def serialize_rfc(attr, **kwargs): + def serialize_rfc(attr, **kwargs): # pylint: disable=unused-argument """Serialize Datetime object into RFC-1123 formatted string. :param Datetime attr: Object to be serialized. :rtype: str :raises: TypeError if format invalid. + :return: serialized rfc """ try: if not attr.tzinfo: _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") utc = attr.utctimetuple() - except AttributeError: - raise TypeError("RFC1123 object must be valid Datetime object.") + except AttributeError as exc: + raise TypeError("RFC1123 object must be valid Datetime object.") from exc return "{}, {:02} {} {:04} {:02}:{:02}:{:02} GMT".format( Serializer.days[utc.tm_wday], @@ -1135,12 +1213,13 @@ def serialize_rfc(attr, **kwargs): ) @staticmethod - def serialize_iso(attr, **kwargs): + def serialize_iso(attr, **kwargs): # pylint: disable=unused-argument """Serialize Datetime object into ISO-8601 formatted string. :param Datetime attr: Object to be serialized. :rtype: str :raises: SerializationError if format invalid. + :return: serialized iso """ if isinstance(attr, str): attr = isodate.parse_datetime(attr) @@ -1160,19 +1239,20 @@ def serialize_iso(attr, **kwargs): return date + microseconds + "Z" except (ValueError, OverflowError) as err: msg = "Unable to serialize datetime object." - raise_with_traceback(SerializationError, msg, err) + raise SerializationError(msg) from err except AttributeError as err: msg = "ISO-8601 object must be valid Datetime object." - raise_with_traceback(TypeError, msg, err) + raise TypeError(msg) from err @staticmethod - def serialize_unix(attr, **kwargs): + def serialize_unix(attr, **kwargs): # pylint: disable=unused-argument """Serialize Datetime object into IntTime format. This is represented as seconds. :param Datetime attr: Object to be serialized. :rtype: int :raises: SerializationError if format invalid + :return: serialied unix """ if isinstance(attr, int): return attr @@ -1180,11 +1260,11 @@ def serialize_unix(attr, **kwargs): if not attr.tzinfo: _LOGGER.warning("Datetime with no tzinfo will be considered UTC.") return int(calendar.timegm(attr.utctimetuple())) - except AttributeError: - raise TypeError("Unix time object must be valid Datetime object.") + except AttributeError as exc: + raise TypeError("Unix time object must be valid Datetime object.") from exc -def rest_key_extractor(attr, attr_desc, data): +def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument key = attr_desc["key"] working_data = data @@ -1199,14 +1279,15 @@ def rest_key_extractor(attr, attr_desc, data): if working_data is None: # If at any point while following flatten JSON path see None, it means # that all properties under are None as well - # https://github.com/Azure/msrest-for-python/issues/197 return None key = ".".join(dict_keys[1:]) return working_data.get(key) -def rest_key_case_insensitive_extractor(attr, attr_desc, data): +def rest_key_case_insensitive_extractor( # pylint: disable=unused-argument, inconsistent-return-statements + attr, attr_desc, data +): key = attr_desc["key"] working_data = data @@ -1220,7 +1301,6 @@ def rest_key_case_insensitive_extractor(attr, attr_desc, data): if working_data is None: # If at any point while following flatten JSON path see None, it means # that all properties under are None as well - # https://github.com/Azure/msrest-for-python/issues/197 return None key = ".".join(dict_keys[1:]) @@ -1228,17 +1308,29 @@ def rest_key_case_insensitive_extractor(attr, attr_desc, data): return attribute_key_case_insensitive_extractor(key, None, working_data) -def last_rest_key_extractor(attr, attr_desc, data): - """Extract the attribute in "data" based on the last part of the JSON path key.""" +def last_rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument + """Extract the attribute in "data" based on the last part of the JSON path key. + + :param str attr: The attribute to extract + :param dict attr_desc: The attribute description + :param dict data: The data to extract from + :rtype: object + :returns: The extracted attribute + """ key = attr_desc["key"] dict_keys = _FLATTEN.split(key) return attribute_key_extractor(dict_keys[-1], None, data) -def last_rest_key_case_insensitive_extractor(attr, attr_desc, data): +def last_rest_key_case_insensitive_extractor(attr, attr_desc, data): # pylint: disable=unused-argument """Extract the attribute in "data" based on the last part of the JSON path key. This is the case insensitive version of "last_rest_key_extractor" + :param str attr: The attribute to extract + :param dict attr_desc: The attribute description + :param dict data: The data to extract from + :rtype: object + :returns: The extracted attribute """ key = attr_desc["key"] dict_keys = _FLATTEN.split(key) @@ -1271,11 +1363,11 @@ def _extract_name_from_internal_type(internal_type): xml_name = internal_type_xml_map.get("name", internal_type.__name__) xml_ns = internal_type_xml_map.get("ns", None) if xml_ns: - xml_name = "{}{}".format(xml_ns, xml_name) + xml_name = "{{{}}}{}".format(xml_ns, xml_name) return xml_name -def xml_key_extractor(attr, attr_desc, data): +def xml_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argument,too-many-return-statements if isinstance(data, dict): return None @@ -1295,7 +1387,7 @@ def xml_key_extractor(attr, attr_desc, data): # Integrate namespace if necessary xml_ns = xml_desc.get("ns", internal_type_xml_map.get("ns", None)) if xml_ns: - xml_name = "{}{}".format(xml_ns, xml_name) + xml_name = "{{{}}}{}".format(xml_ns, xml_name) # If it's an attribute, that's simple if xml_desc.get("attr", False): @@ -1327,22 +1419,21 @@ def xml_key_extractor(attr, attr_desc, data): if is_iter_type: if is_wrapped: return None # is_wrapped no node, we want None - else: - return [] # not wrapped, assume empty list + return [] # not wrapped, assume empty list return None # Assume it's not there, maybe an optional node. # If is_iter_type and not wrapped, return all found children if is_iter_type: if not is_wrapped: return children - else: # Iter and wrapped, should have found one node only (the wrap one) - if len(children) != 1: - raise DeserializationError( - "Tried to deserialize an array not wrapped, and found several nodes '{}'. Maybe you should declare this array as wrapped?".format( - xml_name - ) + # Iter and wrapped, should have found one node only (the wrap one) + if len(children) != 1: + raise DeserializationError( + "Tried to deserialize an array not wrapped, and found several nodes '{}'. Maybe you should declare this array as wrapped?".format( # pylint: disable=line-too-long + xml_name ) - return list(children[0]) # Might be empty list and that's ok. + ) + return list(children[0]) # Might be empty list and that's ok. # Here it's not a itertype, we should have found one element only or empty if len(children) > 1: @@ -1350,7 +1441,7 @@ def xml_key_extractor(attr, attr_desc, data): return children[0] -class Deserializer(object): +class Deserializer: """Response object model deserializer. :param dict classes: Class type dictionary for deserializing complex types. @@ -1359,9 +1450,9 @@ class Deserializer(object): basic_types = {str: "str", int: "int", bool: "bool", float: "float"} - valid_date = re.compile(r"\d{4}[-]\d{2}[-]\d{2}T\d{2}:\d{2}:\d{2}" r"\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") + valid_date = re.compile(r"\d{4}[-]\d{2}[-]\d{2}T\d{2}:\d{2}:\d{2}\.?\d*Z?[-+]?[\d{2}]?:?[\d{2}]?") - def __init__(self, classes: Optional[Mapping[str, Type[ModelType]]] = None): + def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: self.deserialize_type = { "iso-8601": Deserializer.deserialize_iso, "rfc-1123": Deserializer.deserialize_rfc, @@ -1381,7 +1472,7 @@ def __init__(self, classes: Optional[Mapping[str, Type[ModelType]]] = None): "duration": (isodate.Duration, datetime.timedelta), "iso-8601": (datetime.datetime), } - self.dependencies: Dict[str, Type[ModelType]] = dict(classes) if classes else {} + self.dependencies: Dict[str, type] = dict(classes) if classes else {} self.key_extractors = [rest_key_extractor, xml_key_extractor] # Additional properties only works if the "rest_key_extractor" is used to # extract the keys. Making it to work whatever the key extractor is too much @@ -1399,11 +1490,12 @@ def __call__(self, target_obj, response_data, content_type=None): :param str content_type: Swagger "produces" if available. :raises: DeserializationError if deserialization fails. :return: Deserialized object. + :rtype: object """ data = self._unpack_content(response_data, content_type) return self._deserialize(target_obj, data) - def _deserialize(self, target_obj, data): + def _deserialize(self, target_obj, data): # pylint: disable=inconsistent-return-statements """Call the deserializer on a model. Data needs to be already deserialized as JSON or XML ElementTree @@ -1412,12 +1504,13 @@ def _deserialize(self, target_obj, data): :param object data: Object to deserialize. :raises: DeserializationError if deserialization fails. :return: Deserialized object. + :rtype: object """ # This is already a model, go recursive just in case if hasattr(data, "_attribute_map"): constants = [name for name, config in getattr(data, "_validation", {}).items() if config.get("constant")] try: - for attr, mapconfig in data._attribute_map.items(): + for attr, mapconfig in data._attribute_map.items(): # pylint: disable=protected-access if attr in constants: continue value = getattr(data, attr) @@ -1434,15 +1527,15 @@ def _deserialize(self, target_obj, data): response, class_name = self._classify_target(target_obj, data) - if isinstance(response, basestring): + if isinstance(response, str): return self.deserialize_data(data, response) - elif isinstance(response, type) and issubclass(response, Enum): + if isinstance(response, type) and issubclass(response, Enum): return self.deserialize_enum(data, response) - if data is None: + if data is None or data is CoreNull: return data try: - attributes = response._attribute_map # type: ignore + attributes = response._attribute_map # type: ignore # pylint: disable=protected-access d_attrs = {} for attr, attr_desc in attributes.items(): # Check empty string. If it's not empty, someone has a real "additionalProperties"... @@ -1471,10 +1564,9 @@ def _deserialize(self, target_obj, data): d_attrs[attr] = value except (AttributeError, TypeError, KeyError) as err: msg = "Unable to deserialize to object: " + class_name # type: ignore - raise_with_traceback(DeserializationError, msg, err) - else: - additional_properties = self._build_additional_properties(attributes, data) - return self._instantiate_model(response, d_attrs, additional_properties) + raise DeserializationError(msg) from err + additional_properties = self._build_additional_properties(attributes, data) + return self._instantiate_model(response, d_attrs, additional_properties) def _build_additional_properties(self, attribute_map, data): if not self.additional_properties_detection: @@ -1501,18 +1593,20 @@ def _classify_target(self, target, data): :param str target: The target object type to deserialize to. :param str/dict data: The response data to deserialize. + :return: The classified target object and its class name. + :rtype: tuple """ if target is None: return None, None - if isinstance(target, basestring): + if isinstance(target, str): try: target = self.dependencies[target] except KeyError: return target, target try: - target = target._classify(data, self.dependencies) + target = target._classify(data, self.dependencies) # type: ignore # pylint: disable=protected-access except AttributeError: pass # Target is not a Model, no classify return target, target.__class__.__name__ # type: ignore @@ -1527,10 +1621,12 @@ def failsafe_deserialize(self, target_obj, data, content_type=None): :param str target_obj: The target object type to deserialize to. :param str/dict data: The response data to deserialize. :param str content_type: Swagger "produces" if available. + :return: Deserialized object. + :rtype: object """ try: return self(target_obj, data, content_type=content_type) - except: + except: # pylint: disable=bare-except _LOGGER.debug( "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True ) @@ -1548,10 +1644,12 @@ def _unpack_content(raw_data, content_type=None): If raw_data is something else, bypass all logic and return it directly. - :param raw_data: Data to be processed. - :param content_type: How to parse if raw_data is a string/bytes. + :param obj raw_data: Data to be processed. + :param str content_type: How to parse if raw_data is a string/bytes. :raises JSONDecodeError: If JSON is requested and parsing is impossible. :raises UnicodeDecodeError: If bytes is not UTF8 + :rtype: object + :return: Unpacked content. """ # Assume this is enough to detect a Pipeline Response without importing it context = getattr(raw_data, "context", {}) @@ -1568,31 +1666,42 @@ def _unpack_content(raw_data, content_type=None): if hasattr(raw_data, "_content_consumed"): return RawDeserializer.deserialize_from_http_generics(raw_data.text, raw_data.headers) - if isinstance(raw_data, (basestring, bytes)) or hasattr(raw_data, "read"): + if isinstance(raw_data, (str, bytes)) or hasattr(raw_data, "read"): return RawDeserializer.deserialize_from_text(raw_data, content_type) # type: ignore return raw_data def _instantiate_model(self, response, attrs, additional_properties=None): """Instantiate a response model passing in deserialized args. - :param response: The response model class. - :param d_attrs: The deserialized response attributes. + :param Response response: The response model class. + :param dict attrs: The deserialized response attributes. + :param dict additional_properties: Additional properties to be set. + :rtype: Response + :return: The instantiated response model. """ if callable(response): subtype = getattr(response, "_subtype_map", {}) try: - readonly = [k for k, v in response._validation.items() if v.get("readonly")] - const = [k for k, v in response._validation.items() if v.get("constant")] + readonly = [ + k + for k, v in response._validation.items() # pylint: disable=protected-access # type: ignore + if v.get("readonly") + ] + const = [ + k + for k, v in response._validation.items() # pylint: disable=protected-access # type: ignore + if v.get("constant") + ] kwargs = {k: v for k, v in attrs.items() if k not in subtype and k not in readonly + const} response_obj = response(**kwargs) for attr in readonly: setattr(response_obj, attr, attrs.get(attr)) if additional_properties: - response_obj.additional_properties = additional_properties + response_obj.additional_properties = additional_properties # type: ignore return response_obj except TypeError as err: msg = "Unable to deserialize {} into model {}. ".format(kwargs, response) # type: ignore - raise DeserializationError(msg + str(err)) + raise DeserializationError(msg + str(err)) from err else: try: for attr, value in attrs.items(): @@ -1601,15 +1710,16 @@ def _instantiate_model(self, response, attrs, additional_properties=None): except Exception as exp: msg = "Unable to populate response model. " msg += "Type: {}, Error: {}".format(type(response), exp) - raise DeserializationError(msg) + raise DeserializationError(msg) from exp - def deserialize_data(self, data, data_type): + def deserialize_data(self, data, data_type): # pylint: disable=too-many-return-statements """Process data for deserialization according to data type. :param str data: The response string to be deserialized. :param str data_type: The type to deserialize to. :raises: DeserializationError if deserialization fails. :return: Deserialized object. + :rtype: object """ if data is None: return data @@ -1623,7 +1733,11 @@ def deserialize_data(self, data, data_type): if isinstance(data, self.deserialize_expected_types.get(data_type, tuple())): return data - is_a_text_parsing_type = lambda x: x not in ["object", "[]", r"{}"] + is_a_text_parsing_type = lambda x: x not in [ # pylint: disable=unnecessary-lambda-assignment + "object", + "[]", + r"{}", + ] if isinstance(data, ET.Element) and is_a_text_parsing_type(data_type) and not data.text: return None data_val = self.deserialize_type[data_type](data) @@ -1642,15 +1756,15 @@ def deserialize_data(self, data, data_type): except (ValueError, TypeError, AttributeError) as err: msg = "Unable to deserialize response data." msg += " Data: {}, {}".format(data, data_type) - raise_with_traceback(DeserializationError, msg, err) - else: - return self._deserialize(obj_type, data) + raise DeserializationError(msg) from err + return self._deserialize(obj_type, data) def deserialize_iter(self, attr, iter_type): """Deserialize an iterable. :param list attr: Iterable to be deserialized. :param str iter_type: The type of object in the iterable. + :return: Deserialized iterable. :rtype: list """ if attr is None: @@ -1667,6 +1781,7 @@ def deserialize_dict(self, attr, dict_type): :param dict/list attr: Dictionary to be deserialized. Also accepts a list of key, value pairs. :param str dict_type: The object type of the items in the dictionary. + :return: Deserialized dictionary. :rtype: dict """ if isinstance(attr, list): @@ -1677,11 +1792,12 @@ def deserialize_dict(self, attr, dict_type): attr = {el.tag: el.text for el in attr} return {k: self.deserialize_data(v, dict_type) for k, v in attr.items()} - def deserialize_object(self, attr, **kwargs): + def deserialize_object(self, attr, **kwargs): # pylint: disable=too-many-return-statements """Deserialize a generic object. This will be handled as a dictionary. :param dict attr: Dictionary to be deserialized. + :return: Deserialized object. :rtype: dict :raises: TypeError if non-builtin datatype encountered. """ @@ -1690,7 +1806,7 @@ def deserialize_object(self, attr, **kwargs): if isinstance(attr, ET.Element): # Do no recurse on XML, just return the tree as-is return attr - if isinstance(attr, basestring): + if isinstance(attr, str): return self.deserialize_basic(attr, "str") obj_type = type(attr) if obj_type in self.basic_types: @@ -1716,11 +1832,10 @@ def deserialize_object(self, attr, **kwargs): pass return deserialized - else: - error = "Cannot deserialize generic object with type: " - raise TypeError(error + str(obj_type)) + error = "Cannot deserialize generic object with type: " + raise TypeError(error + str(obj_type)) - def deserialize_basic(self, attr, data_type): + def deserialize_basic(self, attr, data_type): # pylint: disable=too-many-return-statements """Deserialize basic builtin data type from string. Will attempt to convert to str, int, float and bool. This function will also accept '1', '0', 'true' and 'false' as @@ -1728,6 +1843,7 @@ def deserialize_basic(self, attr, data_type): :param str attr: response string to be deserialized. :param str data_type: deserialization data type. + :return: Deserialized basic type. :rtype: str, int, float or bool :raises: TypeError if string format is not valid. """ @@ -1739,24 +1855,23 @@ def deserialize_basic(self, attr, data_type): if data_type == "str": # None or '', node is empty string. return "" - else: - # None or '', node with a strong type is None. - # Don't try to model "empty bool" or "empty int" - return None + # None or '', node with a strong type is None. + # Don't try to model "empty bool" or "empty int" + return None if data_type == "bool": if attr in [True, False, 1, 0]: return bool(attr) - elif isinstance(attr, basestring): + if isinstance(attr, str): if attr.lower() in ["true", "1"]: return True - elif attr.lower() in ["false", "0"]: + if attr.lower() in ["false", "0"]: return False raise TypeError("Invalid boolean value: {}".format(attr)) if data_type == "str": return self.deserialize_unicode(attr) - return eval(data_type)(attr) # nosec + return eval(data_type)(attr) # nosec # pylint: disable=eval-used @staticmethod def deserialize_unicode(data): @@ -1764,6 +1879,7 @@ def deserialize_unicode(data): as a string. :param str data: response string to be deserialized. + :return: Deserialized string. :rtype: str or unicode """ # We might be here because we have an enum modeled as string, @@ -1777,8 +1893,7 @@ def deserialize_unicode(data): return data except NameError: return str(data) - else: - return str(data) + return str(data) @staticmethod def deserialize_enum(data, enum_obj): @@ -1790,6 +1905,7 @@ def deserialize_enum(data, enum_obj): :param str data: Response string to be deserialized. If this value is None or invalid it will be returned as-is. :param Enum enum_obj: Enum object to deserialize to. + :return: Deserialized enum object. :rtype: Enum """ if isinstance(data, enum_obj) or data is None: @@ -1798,12 +1914,11 @@ def deserialize_enum(data, enum_obj): data = data.value if isinstance(data, int): # Workaround. We might consider remove it in the future. - # https://github.com/Azure/azure-rest-api-specs/issues/141 try: return list(enum_obj.__members__.values())[data] - except IndexError: + except IndexError as exc: error = "{!r} is not a valid index for enum {!r}" - raise DeserializationError(error.format(data, enum_obj)) + raise DeserializationError(error.format(data, enum_obj)) from exc try: return enum_obj(str(data)) except ValueError: @@ -1819,6 +1934,7 @@ def deserialize_bytearray(attr): """Deserialize string into bytearray. :param str attr: response string to be deserialized. + :return: Deserialized bytearray :rtype: bytearray :raises: TypeError if string format invalid. """ @@ -1831,6 +1947,7 @@ def deserialize_base64(attr): """Deserialize base64 encoded string into string. :param str attr: response string to be deserialized. + :return: Deserialized base64 string :rtype: bytearray :raises: TypeError if string format invalid. """ @@ -1846,22 +1963,24 @@ def deserialize_decimal(attr): """Deserialize string into Decimal object. :param str attr: response string to be deserialized. - :rtype: Decimal + :return: Deserialized decimal :raises: DeserializationError if string format invalid. + :rtype: decimal """ if isinstance(attr, ET.Element): attr = attr.text try: - return decimal.Decimal(attr) # type: ignore + return decimal.Decimal(str(attr)) # type: ignore except decimal.DecimalException as err: msg = "Invalid decimal {}".format(attr) - raise_with_traceback(DeserializationError, msg, err) + raise DeserializationError(msg) from err @staticmethod def deserialize_long(attr): """Deserialize string into long (Py2) or int (Py3). :param str attr: response string to be deserialized. + :return: Deserialized int :rtype: long or int :raises: ValueError if string format invalid. """ @@ -1874,6 +1993,7 @@ def deserialize_duration(attr): """Deserialize ISO-8601 formatted string into TimeDelta object. :param str attr: response string to be deserialized. + :return: Deserialized duration :rtype: TimeDelta :raises: DeserializationError if string format invalid. """ @@ -1883,15 +2003,15 @@ def deserialize_duration(attr): duration = isodate.parse_duration(attr) except (ValueError, OverflowError, AttributeError) as err: msg = "Cannot deserialize duration object." - raise_with_traceback(DeserializationError, msg, err) - else: - return duration + raise DeserializationError(msg) from err + return duration @staticmethod def deserialize_date(attr): """Deserialize ISO-8601 formatted string into Date object. :param str attr: response string to be deserialized. + :return: Deserialized date :rtype: Date :raises: DeserializationError if string format invalid. """ @@ -1900,13 +2020,14 @@ def deserialize_date(attr): if re.search(r"[^\W\d_]", attr, re.I + re.U): # type: ignore raise DeserializationError("Date must have only digits and -. Received: %s" % attr) # This must NOT use defaultmonth/defaultday. Using None ensure this raises an exception. - return isodate.parse_date(attr, defaultmonth=None, defaultday=None) + return isodate.parse_date(attr, defaultmonth=0, defaultday=0) @staticmethod def deserialize_time(attr): """Deserialize ISO-8601 formatted string into time object. :param str attr: response string to be deserialized. + :return: Deserialized time :rtype: datetime.time :raises: DeserializationError if string format invalid. """ @@ -1921,6 +2042,7 @@ def deserialize_rfc(attr): """Deserialize RFC-1123 formatted string into Datetime object. :param str attr: response string to be deserialized. + :return: Deserialized RFC datetime :rtype: Datetime :raises: DeserializationError if string format invalid. """ @@ -1935,15 +2057,15 @@ def deserialize_rfc(attr): date_obj = date_obj.astimezone(tz=TZ_UTC) except ValueError as err: msg = "Cannot deserialize to rfc datetime object." - raise_with_traceback(DeserializationError, msg, err) - else: - return date_obj + raise DeserializationError(msg) from err + return date_obj @staticmethod def deserialize_iso(attr): """Deserialize ISO-8601 formatted string into Datetime object. :param str attr: response string to be deserialized. + :return: Deserialized ISO datetime :rtype: Datetime :raises: DeserializationError if string format invalid. """ @@ -1972,9 +2094,8 @@ def deserialize_iso(attr): raise OverflowError("Hit max or min date") except (ValueError, OverflowError, AttributeError) as err: msg = "Cannot deserialize datetime object." - raise_with_traceback(DeserializationError, msg, err) - else: - return date_obj + raise DeserializationError(msg) from err + return date_obj @staticmethod def deserialize_unix(attr): @@ -1982,15 +2103,16 @@ def deserialize_unix(attr): This is represented as seconds. :param int attr: Object to be serialized. + :return: Deserialized datetime :rtype: Datetime :raises: DeserializationError if format invalid """ if isinstance(attr, ET.Element): attr = int(attr.text) # type: ignore try: + attr = int(attr) date_obj = datetime.datetime.fromtimestamp(attr, TZ_UTC) except ValueError as err: msg = "Cannot deserialize to unix datetime object." - raise_with_traceback(DeserializationError, msg, err) - else: - return date_obj + raise DeserializationError(msg) from err + return date_obj diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_validation.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_validation.py new file mode 100644 index 000000000000..752b2822f9d3 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_validation.py @@ -0,0 +1,50 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import functools + + +def api_version_validation(**kwargs): + params_added_on = kwargs.pop("params_added_on", {}) + method_added_on = kwargs.pop("method_added_on", "") + + def decorator(func): + @functools.wraps(func) + def wrapper(*args, **kwargs): + try: + # this assumes the client has an _api_version attribute + client = args[0] + client_api_version = client._config.api_version # pylint: disable=protected-access + except AttributeError: + return func(*args, **kwargs) + + if method_added_on > client_api_version: + raise ValueError( + f"'{func.__name__}' is not available in API version " + f"{client_api_version}. Pass service API version {method_added_on} or newer to your client." + ) + + unsupported = { + parameter: api_version + for api_version, parameters in params_added_on.items() + for parameter in parameters + if parameter in kwargs and api_version > client_api_version + } + if unsupported: + raise ValueError( + "".join( + [ + f"'{param}' is not available in API version {client_api_version}. " + f"Use service API version {version} or newer.\n" + for param, version in unsupported.items() + ] + ) + ) + return func(*args, **kwargs) + + return wrapper + + return decorator diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_vendor.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_vendor.py new file mode 100644 index 000000000000..c37f9ea6e090 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_vendor.py @@ -0,0 +1,52 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from abc import ABC +from typing import TYPE_CHECKING + +from ._configuration import LoadTestAdministrationClientConfiguration, LoadTestRunClientConfiguration + +if TYPE_CHECKING: + from azure.core import PipelineClient + + from ._serialization import Deserializer, Serializer + + +class LoadTestAdministrationClientMixinABC(ABC): + """DO NOT use this class. It is for internal typing use only.""" + + _client: "PipelineClient" + _config: LoadTestAdministrationClientConfiguration + _serialize: "Serializer" + _deserialize: "Deserializer" + + +class LoadTestRunClientMixinABC(ABC): + """DO NOT use this class. It is for internal typing use only.""" + + _client: "PipelineClient" + _config: LoadTestRunClientConfiguration + _serialize: "Serializer" + _deserialize: "Deserializer" + + +class LoadTestAdministrationClientMixinABC(ABC): + """DO NOT use this class. It is for internal typing use only.""" + + _client: "PipelineClient" + _config: LoadTestAdministrationClientConfiguration + _serialize: "Serializer" + _deserialize: "Deserializer" + + +class LoadTestRunClientMixinABC(ABC): + """DO NOT use this class. It is for internal typing use only.""" + + _client: "PipelineClient" + _config: LoadTestRunClientConfiguration + _serialize: "Serializer" + _deserialize: "Deserializer" diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_version.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_version.py index 010063f9dd93..be71c81bd282 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_version.py +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/_version.py @@ -1,6 +1,9 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- -VERSION = "1.0.1" +VERSION = "1.0.0b1" diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/__init__.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/__init__.py index e055e16c9f6a..cfebeeccf7f0 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/__init__.py +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/__init__.py @@ -1,9 +1,35 @@ - -# ------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from ._client import LoadTestRunClient, LoadTestAdministrationClient +# pylint: disable=wrong-import-position + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._client import LoadTestAdministrationClient # type: ignore +from ._client import LoadTestRunClient # type: ignore +from ._client import LoadTestAdministrationClient # type: ignore +from ._client import LoadTestRunClient # type: ignore + +try: + from ._patch import __all__ as _patch_all + from ._patch import * +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk + +__all__ = [ + "LoadTestAdministrationClient", + "LoadTestRunClient", + "LoadTestAdministrationClient", + "LoadTestRunClient", +] +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore -__all__ = ["LoadTestAdministrationClient", "LoadTestRunClient"] +_patch_sdk() diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_client.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_client.py index e3ed061bb413..34698458dc82 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_client.py +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_client.py @@ -1,47 +1,69 @@ -# ------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- from copy import deepcopy -from typing import Any, Awaitable +from typing import Any, Awaitable, TYPE_CHECKING +from typing_extensions import Self -from azure.core.credentials_async import AsyncTokenCredential from azure.core import AsyncPipelineClient -from azure.core.rest import HttpRequest, AsyncHttpResponse +from azure.core.pipeline import policies +from azure.core.rest import AsyncHttpResponse, HttpRequest + +from .._serialization import Deserializer, Serializer +from ._configuration import LoadTestAdministrationClientConfiguration, LoadTestRunClientConfiguration +from ._operations import LoadTestAdministrationClientOperationsMixin, LoadTestRunClientOperationsMixin -from .._generated.aio._configuration import LoadTestingClientConfiguration -from .._generated._serialization import Deserializer, Serializer -from .._generated.aio.operations import AdministrationOperations, TestRunOperations +if TYPE_CHECKING: + from azure.core.credentials_async import AsyncTokenCredential -class _BaseClient: # pylint: disable=client-accepts-api-version-keyword - """These APIs allow end users to create, view and run load tests using Azure Load Test Service. - :ivar administration: AdministrationOperations operations - :vartype administration: azure.developer.loadtesting.aio.operations.AdministrationOperations - :ivar test_run: TestRunOperations operations - :vartype test_run: azure.developer.loadtesting.aio.operations.TestRunOperations - :param endpoint: URL to perform data plane API operations on the resource. Required. +class LoadTestAdministrationClient(LoadTestAdministrationClientOperationsMixin): + """LoadTestAdministrationClient. + + :param endpoint: Required. :type endpoint: str - :param credential: Credential needed for the client to connect to Azure. Required. + :param credential: Credential used to authenticate requests to the service. Required. :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: Api Version. Default value is "2022-11-01". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. :paramtype api_version: str """ def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: - _endpoint = "https://{Endpoint}" - self._config = LoadTestingClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) - self._client = AsyncPipelineClient(base_url=_endpoint, config=self._config, **kwargs) + _endpoint = "https://{endpoint}" + self._config = LoadTestAdministrationClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) self._serialize = Serializer() self._deserialize = Deserializer() self._serialize.client_side_validation = False - super().__init__(self._client, self._config, self._serialize, self._deserialize) - def send_request(self, request: HttpRequest, **kwargs: Any) -> Awaitable[AsyncHttpResponse]: + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: """Runs the network request through the client's chained policies. >>> from azure.core.rest import HttpRequest @@ -61,47 +83,252 @@ def send_request(self, request: HttpRequest, **kwargs: Any) -> Awaitable[AsyncHt request_copy = deepcopy(request) path_format_arguments = { - "Endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str", skip_quote=True), + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), } request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) - return self._client.send_request(request_copy, **kwargs) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore async def close(self) -> None: await self._client.close() - async def __aexit__(self, *exc_details) -> None: + async def __aenter__(self) -> Self: + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details: Any) -> None: await self._client.__aexit__(*exc_details) -class LoadTestAdministrationClient(_BaseClient, AdministrationOperations): # pylint: disable=client-accepts-api-version-keyword - """These APIs allow end users to create, view and run load tests using Azure Load Test Service. +class LoadTestRunClient(LoadTestRunClientOperationsMixin): + """LoadTestRunClient. - :param endpoint: URL to perform data plane API operations on the resource. Required. + :param endpoint: Required. :type endpoint: str - :param credential: Credential needed for the client to connect to Azure. Required. + :param credential: Credential used to authenticate requests to the service. Required. :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: Api Version. Default value is "2022-11-01". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. :paramtype api_version: str """ - async def __aenter__(self) -> "LoadTestAdministrationClient": + def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "https://{endpoint}" + self._config = LoadTestRunClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> Self: await self._client.__aenter__() return self -class LoadTestRunClient(_BaseClient, TestRunOperations): # pylint: disable=client-accepts-api-version-keyword - """These APIs allow end users to create, view and run load tests using Azure Load Test Service. + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) + - :param endpoint: URL to perform data plane API operations on the resource. Required. +class LoadTestAdministrationClient(LoadTestAdministrationClientOperationsMixin): + """LoadTestAdministrationClient. + + :param endpoint: Required. :type endpoint: str - :param credential: Credential needed for the client to connect to Azure. Required. + :param credential: Credential used to authenticate requests to the service. Required. :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :keyword api_version: Api Version. Default value is "2022-11-01". Note that overriding this - default value may result in unsupported behavior. + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. :paramtype api_version: str """ - async def __aenter__(self) -> "LoadTestRunClient": + def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "https://{endpoint}" + self._config = LoadTestAdministrationClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> Self: await self._client.__aenter__() return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) + + +class LoadTestRunClient(LoadTestRunClientOperationsMixin): + """LoadTestRunClient. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + _endpoint = "https://{endpoint}" + self._config = LoadTestRunClientConfiguration(endpoint=endpoint, credential=credential, **kwargs) + _policies = kwargs.pop("policies", None) + if _policies is None: + _policies = [ + policies.RequestIdPolicy(**kwargs), + self._config.headers_policy, + self._config.user_agent_policy, + self._config.proxy_policy, + policies.ContentDecodePolicy(**kwargs), + self._config.redirect_policy, + self._config.retry_policy, + self._config.authentication_policy, + self._config.custom_hook_policy, + self._config.logging_policy, + policies.DistributedTracingPolicy(**kwargs), + policies.SensitiveHeaderCleanupPolicy(**kwargs) if self._config.redirect_policy else None, + self._config.http_logging_policy, + ] + self._client: AsyncPipelineClient = AsyncPipelineClient(base_url=_endpoint, policies=_policies, **kwargs) + + self._serialize = Serializer() + self._deserialize = Deserializer() + self._serialize.client_side_validation = False + + def send_request( + self, request: HttpRequest, *, stream: bool = False, **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client.send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/dpcodegen/python/send_request + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + + request_copy.url = self._client.format_url(request_copy.url, **path_format_arguments) + return self._client.send_request(request_copy, stream=stream, **kwargs) # type: ignore + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> Self: + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details: Any) -> None: + await self._client.__aexit__(*exc_details) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_configuration.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_configuration.py new file mode 100644 index 000000000000..2727733ee6e5 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_configuration.py @@ -0,0 +1,208 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, TYPE_CHECKING + +from azure.core.pipeline import policies + +from .._version import VERSION + +if TYPE_CHECKING: + from azure.core.credentials_async import AsyncTokenCredential + + +class LoadTestAdministrationClientConfiguration: # pylint: disable=too-many-instance-attributes,name-too-long + """Configuration for LoadTestAdministrationClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + api_version: str = kwargs.pop("api_version", "2024-12-01-preview") + + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.endpoint = endpoint + self.credential = credential + self.api_version = api_version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class LoadTestRunClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for LoadTestRunClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + api_version: str = kwargs.pop("api_version", "2024-12-01-preview") + + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.endpoint = endpoint + self.credential = credential + self.api_version = api_version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class LoadTestAdministrationClientConfiguration: # pylint: disable=too-many-instance-attributes,name-too-long + """Configuration for LoadTestAdministrationClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + api_version: str = kwargs.pop("api_version", "2024-12-01-preview") + + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.endpoint = endpoint + self.credential = credential + self.api_version = api_version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) + + +class LoadTestRunClientConfiguration: # pylint: disable=too-many-instance-attributes + """Configuration for LoadTestRunClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param endpoint: Required. + :type endpoint: str + :param credential: Credential used to authenticate requests to the service. Required. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :keyword api_version: The API version to use for this operation. Default value is + "2024-12-01-preview". Note that overriding this default value may result in unsupported + behavior. + :paramtype api_version: str + """ + + def __init__(self, endpoint: str, credential: "AsyncTokenCredential", **kwargs: Any) -> None: + api_version: str = kwargs.pop("api_version", "2024-12-01-preview") + + if endpoint is None: + raise ValueError("Parameter 'endpoint' must not be None.") + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + + self.endpoint = endpoint + self.credential = credential + self.api_version = api_version + self.credential_scopes = kwargs.pop("credential_scopes", ["https://cnt-prod.loadtesting.azure.com/.default"]) + kwargs.setdefault("sdk_moniker", "developer-loadtesting/{}".format(VERSION)) + self.polling_interval = kwargs.get("polling_interval", 30) + self._configure(**kwargs) + + def _configure(self, **kwargs: Any) -> None: + self.user_agent_policy = kwargs.get("user_agent_policy") or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get("headers_policy") or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get("proxy_policy") or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get("logging_policy") or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get("http_logging_policy") or policies.HttpLoggingPolicy(**kwargs) + self.custom_hook_policy = kwargs.get("custom_hook_policy") or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get("redirect_policy") or policies.AsyncRedirectPolicy(**kwargs) + self.retry_policy = kwargs.get("retry_policy") or policies.AsyncRetryPolicy(**kwargs) + self.authentication_policy = kwargs.get("authentication_policy") + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy( + self.credential, *self.credential_scopes, **kwargs + ) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_operations/__init__.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_operations/__init__.py new file mode 100644 index 000000000000..8217d65c5387 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_operations/__init__.py @@ -0,0 +1,31 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + +from ._operations import LoadTestAdministrationClientOperationsMixin # type: ignore +from ._operations import LoadTestRunClientOperationsMixin # type: ignore +from ._operations import LoadTestAdministrationClientOperationsMixin # type: ignore +from ._operations import LoadTestRunClientOperationsMixin # type: ignore + +from ._patch import __all__ as _patch_all +from ._patch import * +from ._patch import patch_sdk as _patch_sdk + +__all__ = [ + "LoadTestAdministrationClientOperationsMixin", + "LoadTestRunClientOperationsMixin", + "LoadTestAdministrationClientOperationsMixin", + "LoadTestRunClientOperationsMixin", +] +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore +_patch_sdk() diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_operations/_operations.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_operations/_operations.py new file mode 100644 index 000000000000..5a0834f26521 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_operations/_operations.py @@ -0,0 +1,3522 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import datetime +from io import IOBase +import json +import sys +from typing import Any, AsyncIterable, Callable, Dict, IO, List, Optional, TypeVar, Union, overload +import urllib.parse + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ( + ClientAuthenticationError, + HttpResponseError, + ResourceExistsError, + ResourceNotFoundError, + ResourceNotModifiedError, + StreamClosedError, + StreamConsumedError, + map_error, +) +from azure.core.pipeline import PipelineResponse +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict + +from ... import models as _models +from ..._model_base import SdkJSONEncoder, _deserialize +from ..._operations._operations import ( + build_load_test_administration_begin_upload_test_file_request, + build_load_test_administration_create_or_update_app_components_request, + build_load_test_administration_create_or_update_server_metrics_config_request, + build_load_test_administration_create_or_update_test_profile_request, + build_load_test_administration_create_or_update_test_request, + build_load_test_administration_delete_test_file_request, + build_load_test_administration_delete_test_profile_request, + build_load_test_administration_delete_test_request, + build_load_test_administration_get_app_components_request, + build_load_test_administration_get_server_metrics_config_request, + build_load_test_administration_get_test_file_request, + build_load_test_administration_get_test_profile_request, + build_load_test_administration_get_test_request, + build_load_test_administration_list_test_files_request, + build_load_test_administration_list_test_profiles_request, + build_load_test_administration_list_tests_request, + build_load_test_run_begin_test_run_request, + build_load_test_run_create_or_update_app_components_request, + build_load_test_run_create_or_update_server_metrics_config_request, + build_load_test_run_create_or_update_test_profile_run_request, + build_load_test_run_delete_test_profile_run_request, + build_load_test_run_delete_test_run_request, + build_load_test_run_get_app_components_request, + build_load_test_run_get_metric_definitions_request, + build_load_test_run_get_metric_namespaces_request, + build_load_test_run_get_server_metrics_config_request, + build_load_test_run_get_test_profile_run_request, + build_load_test_run_get_test_run_file_request, + build_load_test_run_get_test_run_request, + build_load_test_run_list_metric_dimension_values_request, + build_load_test_run_list_metrics_request, + build_load_test_run_list_test_profile_runs_request, + build_load_test_run_list_test_runs_request, + build_load_test_run_stop_test_profile_run_request, + build_load_test_run_stop_test_run_request, +) +from ..._validation import api_version_validation +from .._vendor import LoadTestAdministrationClientMixinABC, LoadTestRunClientMixinABC + +if sys.version_info >= (3, 9): + from collections.abc import MutableMapping +else: + from typing import MutableMapping # type: ignore +JSON = MutableMapping[str, Any] # pylint: disable=unsubscriptable-object +T = TypeVar("T") +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + + +class LoadTestAdministrationClientOperationsMixin( # pylint: disable=name-too-long + LoadTestAdministrationClientMixinABC +): + + @overload + async def create_or_update_test( + self, test_id: str, body: _models.Test, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.Test: + """Create a new test or update an existing test by providing the test Id. + + Create a new test or update an existing test by providing the test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: The resource instance. Required. + :type body: ~azure.developer.loadtesting.models.Test + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_test( + self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.Test: + """Create a new test or update an existing test by providing the test Id. + + Create a new test or update an existing test by providing the test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: The resource instance. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_test( + self, test_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.Test: + """Create a new test or update an existing test by providing the test Id. + + Create a new test or update an existing test by providing the test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: The resource instance. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def create_or_update_test( + self, test_id: str, body: Union[_models.Test, JSON, IO[bytes]], **kwargs: Any + ) -> _models.Test: + """Create a new test or update an existing test by providing the test Id. + + Create a new test or update an existing test by providing the test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: The resource instance. Is one of the following types: Test, JSON, IO[bytes] + Required. + :type body: ~azure.developer.loadtesting.models.Test or JSON or IO[bytes] + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Test] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_administration_create_or_update_test_request( + test_id=test_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.Test, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + async def create_or_update_app_components( + self, + test_id: str, + body: _models.TestAppComponents, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestAppComponents: + """Add an app component to a test. + + Add an app component to a test by providing the resource Id, name and type. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: App Component model. Required. + :type body: ~azure.developer.loadtesting.models.TestAppComponents + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_app_components( + self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestAppComponents: + """Add an app component to a test. + + Add an app component to a test by providing the resource Id, name and type. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: App Component model. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_app_components( + self, test_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestAppComponents: + """Add an app component to a test. + + Add an app component to a test by providing the resource Id, name and type. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: App Component model. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def create_or_update_app_components( + self, test_id: str, body: Union[_models.TestAppComponents, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestAppComponents: + """Add an app component to a test. + + Add an app component to a test by providing the resource Id, name and type. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: App Component model. Is one of the following types: TestAppComponents, JSON, + IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestAppComponents or JSON or IO[bytes] + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + cls: ClsType[_models.TestAppComponents] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_administration_create_or_update_app_components_request( + test_id=test_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestAppComponents, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + async def create_or_update_server_metrics_config( + self, + test_id: str, + body: _models.TestServerMetricConfig, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestServerMetricConfig: + """Configure server metrics for a test. + + Configure server metrics for a test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: Server metric configuration model. Required. + :type body: ~azure.developer.loadtesting.models.TestServerMetricConfig + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_server_metrics_config( + self, test_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestServerMetricConfig: + """Configure server metrics for a test. + + Configure server metrics for a test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: Server metric configuration model. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_server_metrics_config( + self, test_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestServerMetricConfig: + """Configure server metrics for a test. + + Configure server metrics for a test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: Server metric configuration model. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def create_or_update_server_metrics_config( + self, test_id: str, body: Union[_models.TestServerMetricConfig, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestServerMetricConfig: + """Configure server metrics for a test. + + Configure server metrics for a test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param body: Server metric configuration model. Is one of the following types: + TestServerMetricConfig, JSON, IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestServerMetricConfig or JSON or IO[bytes] + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + cls: ClsType[_models.TestServerMetricConfig] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_administration_create_or_update_server_metrics_config_request( + test_id=test_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestServerMetricConfig, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_app_components(self, test_id: str, **kwargs: Any) -> _models.TestAppComponents: + """Get associated app component (collection of azure resources) for the given test. + + Get associated app component (collection of azure resources) for the given test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: TestAppComponents. The TestAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestAppComponents] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_app_components_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestAppComponents, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_server_metrics_config(self, test_id: str, **kwargs: Any) -> _models.TestServerMetricConfig: + """List server metrics configuration for the given test. + + List server metrics configuration for the given test. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: TestServerMetricConfig. The TestServerMetricConfig is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestServerMetricConfig] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_server_metrics_config_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestServerMetricConfig, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_test(self, test_id: str, **kwargs: Any) -> _models.Test: + """Get load test details by test Id. + + Get load test details by test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: Test. The Test is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.Test + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.Test] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_test_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.Test, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_test_file(self, test_id: str, file_name: str, **kwargs: Any) -> _models.TestFileInfo: + """Get all the files that are associated with a test. + + Get all the files that are associated with a test. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param file_name: Name of the file. Required. + :type file_name: str + :return: TestFileInfo. The TestFileInfo is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestFileInfo + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestFileInfo] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_test_file_request( + test_id=test_id, + file_name=file_name, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestFileInfo, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def list_test_files(self, test_id: str, **kwargs: Any) -> AsyncIterable["_models.TestFileInfo"]: + """Get all test files. + + Get all test files. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: An iterator like instance of TestFileInfo + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.developer.loadtesting.models.TestFileInfo] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.TestFileInfo]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_administration_list_test_files_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TestFileInfo], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @distributed_trace + def list_tests( + self, + *, + orderby: Optional[str] = None, + search: Optional[str] = None, + last_modified_start_time: Optional[datetime.datetime] = None, + last_modified_end_time: Optional[datetime.datetime] = None, + **kwargs: Any + ) -> AsyncIterable["_models.Test"]: + """Get all load tests by the fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. + + Get all load tests by the fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. + + :keyword orderby: Sort on the supported fields in (field asc/desc) format. eg: + lastModifiedDateTime asc. Supported fields - lastModifiedDateTime. Default value is None. + :paramtype orderby: str + :keyword search: Prefix based, case sensitive search on searchable fields - displayName, + createdBy. For example, to search for a test, with display name is Login Test, + the search parameter can be Login. Default value is None. + :paramtype search: str + :keyword last_modified_start_time: Start DateTime(RFC 3339 literal format) of the last updated + time range to filter tests. Default value is None. + :paramtype last_modified_start_time: ~datetime.datetime + :keyword last_modified_end_time: End DateTime(RFC 3339 literal format) of the last updated time + range to filter tests. Default value is None. + :paramtype last_modified_end_time: ~datetime.datetime + :return: An iterator like instance of Test + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.developer.loadtesting.models.Test] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + maxpagesize = kwargs.pop("maxpagesize", None) + cls: ClsType[List[_models.Test]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_administration_list_tests_request( + orderby=orderby, + search=search, + last_modified_start_time=last_modified_start_time, + last_modified_end_time=last_modified_end_time, + maxpagesize=maxpagesize, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.Test], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @distributed_trace_async + async def begin_upload_test_file( + self, + test_id: str, + file_name: str, + body: bytes, + *, + file_type: Optional[Union[str, _models.FileType]] = None, + **kwargs: Any + ) -> _models.TestFileInfo: + """Upload input file for a given test Id. File size can't be more than 50 MB. + Existing file with same name for the given test will be overwritten. File + should be provided in the request body as application/octet-stream. + + Upload input file for a given test Id. File size can't be more than 50 MB. + Existing file with same name for the given test will be overwritten. File + should be provided in the request body as application/octet-stream. + + :param test_id: Unique name for the load test, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_id: str + :param file_name: Unique name for test file with file extension like : App.jmx. Required. + :type file_name: str + :param body: The file content as application/octet-stream. Required. + :type body: bytes + :keyword file_type: File type. Known values are: "JMX_FILE", "USER_PROPERTIES", + "ADDITIONAL_ARTIFACTS", "ZIPPED_ARTIFACTS", "URL_TEST_CONFIG", and "TEST_SCRIPT". Default value + is None. + :paramtype file_type: str or ~azure.developer.loadtesting.models.FileType + :return: TestFileInfo. The TestFileInfo is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestFileInfo + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: str = kwargs.pop("content_type", _headers.pop("content-type", "application/octet-stream")) + cls: ClsType[_models.TestFileInfo] = kwargs.pop("cls", None) + + _content = body + + _request = build_load_test_administration_begin_upload_test_file_request( + test_id=test_id, + file_name=file_name, + file_type=file_type, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [201]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestFileInfo, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def delete_test_file(self, test_id: str, file_name: str, **kwargs: Any) -> None: + """Delete file by the file name for a test. + + Delete file by the file name for a test. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :param file_name: Name of the file. Required. + :type file_name: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_administration_delete_test_file_request( + test_id=test_id, + file_name=file_name, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace_async + async def delete_test(self, test_id: str, **kwargs: Any) -> None: + """Delete a test by its test Id. + + Delete a test by its test Id. + + :param test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_administration_delete_test_request( + test_id=test_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + +class LoadTestRunClientOperationsMixin(LoadTestRunClientMixinABC): + + @overload + async def begin_test_run( + self, + test_run_id: str, + body: _models.TestRun, + *, + content_type: str = "application/merge-patch+json", + old_test_run_id: Optional[str] = None, + **kwargs: Any + ) -> _models.TestRun: + """Create and start a new test run with the given test run Id. + + Create and start a new test run with the given test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: The resource instance. Required. + :type body: ~azure.developer.loadtesting.models.TestRun + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is + provided, the + test will run with the JMX file, configuration and app components from the + existing test run. You can override the configuration values for new test run + in the request body. Default value is None. + :paramtype old_test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_test_run( + self, + test_run_id: str, + body: JSON, + *, + content_type: str = "application/merge-patch+json", + old_test_run_id: Optional[str] = None, + **kwargs: Any + ) -> _models.TestRun: + """Create and start a new test run with the given test run Id. + + Create and start a new test run with the given test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: The resource instance. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is + provided, the + test will run with the JMX file, configuration and app components from the + existing test run. You can override the configuration values for new test run + in the request body. Default value is None. + :paramtype old_test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_test_run( + self, + test_run_id: str, + body: IO[bytes], + *, + content_type: str = "application/merge-patch+json", + old_test_run_id: Optional[str] = None, + **kwargs: Any + ) -> _models.TestRun: + """Create and start a new test run with the given test run Id. + + Create and start a new test run with the given test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: The resource instance. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is + provided, the + test will run with the JMX file, configuration and app components from the + existing test run. You can override the configuration values for new test run + in the request body. Default value is None. + :paramtype old_test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def begin_test_run( + self, + test_run_id: str, + body: Union[_models.TestRun, JSON, IO[bytes]], + *, + old_test_run_id: Optional[str] = None, + **kwargs: Any + ) -> _models.TestRun: + """Create and start a new test run with the given test run Id. + + Create and start a new test run with the given test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: The resource instance. Is one of the following types: TestRun, JSON, IO[bytes] + Required. + :type body: ~azure.developer.loadtesting.models.TestRun or JSON or IO[bytes] + :keyword old_test_run_id: Existing test run identifier that should be rerun, if this is + provided, the + test will run with the JMX file, configuration and app components from the + existing test run. You can override the configuration values for new test run + in the request body. Default value is None. + :paramtype old_test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.TestRun] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_run_begin_test_run_request( + test_run_id=test_run_id, + old_test_run_id=old_test_run_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + async def create_or_update_app_components( + self, + test_run_id: str, + body: _models.TestRunAppComponents, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestRunAppComponents: + """Add an app component to a test run. + + Add an app component to a test run by providing the resource Id, name and type. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: App Component model. Required. + :type body: ~azure.developer.loadtesting.models.TestRunAppComponents + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_app_components( + self, test_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestRunAppComponents: + """Add an app component to a test run. + + Add an app component to a test run by providing the resource Id, name and type. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: App Component model. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_app_components( + self, test_run_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestRunAppComponents: + """Add an app component to a test run. + + Add an app component to a test run by providing the resource Id, name and type. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: App Component model. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def create_or_update_app_components( + self, test_run_id: str, body: Union[_models.TestRunAppComponents, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestRunAppComponents: + """Add an app component to a test run. + + Add an app component to a test run by providing the resource Id, name and type. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: App Component model. Is one of the following types: TestRunAppComponents, JSON, + IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestRunAppComponents or JSON or IO[bytes] + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + cls: ClsType[_models.TestRunAppComponents] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_run_create_or_update_app_components_request( + test_run_id=test_run_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunAppComponents, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + async def create_or_update_server_metrics_config( + self, + test_run_id: str, + body: _models.TestRunServerMetricConfig, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestRunServerMetricConfig: + """Configure server metrics for a test run. + + Configure server metrics for a test run. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Server metric configuration model. Required. + :type body: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_server_metrics_config( + self, test_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestRunServerMetricConfig: + """Configure server metrics for a test run. + + Configure server metrics for a test run. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Server metric configuration model. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_server_metrics_config( + self, test_run_id: str, body: IO[bytes], *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestRunServerMetricConfig: + """Configure server metrics for a test run. + + Configure server metrics for a test run. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Server metric configuration model. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + async def create_or_update_server_metrics_config( + self, test_run_id: str, body: Union[_models.TestRunServerMetricConfig, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestRunServerMetricConfig: + """Configure server metrics for a test run. + + Configure server metrics for a test run. + + :param test_run_id: Unique Id for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Server metric configuration model. Is one of the following types: + TestRunServerMetricConfig, JSON, IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestRunServerMetricConfig or JSON or IO[bytes] + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("content-type", None)) + cls: ClsType[_models.TestRunServerMetricConfig] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_run_create_or_update_server_metrics_config_request( + test_run_id=test_run_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunServerMetricConfig, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def delete_test_run(self, test_run_id: str, **kwargs: Any) -> None: + """Delete an existing load test run. + + Delete an existing load test run by providing the testRunId. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_run_delete_test_run_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace_async + async def get_app_components(self, test_run_id: str, **kwargs: Any) -> _models.TestRunAppComponents: + """Get associated app component (collection of azure resources) for the given test + run. + + Get associated app component (collection of azure resources) for the given test + run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: TestRunAppComponents. The TestRunAppComponents is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunAppComponents + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRunAppComponents] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_app_components_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunAppComponents, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_server_metrics_config(self, test_run_id: str, **kwargs: Any) -> _models.TestRunServerMetricConfig: + """Get associated server metrics configuration for the given test run. + + Get associated server metrics configuration for the given test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: TestRunServerMetricConfig. The TestRunServerMetricConfig is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunServerMetricConfig + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRunServerMetricConfig] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_server_metrics_config_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunServerMetricConfig, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_test_run(self, test_run_id: str, **kwargs: Any) -> _models.TestRun: + """Get test run details by test run Id. + + Get test run details by test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRun] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_test_run_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_test_run_file(self, test_run_id: str, file_name: str, **kwargs: Any) -> _models.TestRunFileInfo: + """Get test run file by file name. + + Get test run file by file name. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param file_name: Name of the file. Required. + :type file_name: str + :return: TestRunFileInfo. The TestRunFileInfo is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRunFileInfo + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRunFileInfo] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_test_run_file_request( + test_run_id=test_run_id, + file_name=file_name, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRunFileInfo, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def list_metric_dimension_values( + self, + test_run_id: str, + name: str, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + interval: Optional[Union[str, _models.TimeGrain]] = None, + **kwargs: Any + ) -> _models.DimensionValueList: + """List the dimension values for the given metric dimension name. + + List the dimension values for the given metric dimension name. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param name: Dimension name. Required. + :type name: str + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :return: DimensionValueList. The DimensionValueList is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.DimensionValueList + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.DimensionValueList] = kwargs.pop("cls", None) + + _request = build_load_test_run_list_metric_dimension_values_request( + test_run_id=test_run_id, + name=name, + metric_name=metric_name, + metric_namespace=metric_namespace, + time_interval=time_interval, + interval=interval, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.DimensionValueList, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_metric_definitions( + self, test_run_id: str, *, metric_namespace: str, **kwargs: Any + ) -> _models.MetricDefinitionCollection: + """List the metric definitions for a load test run. + + List the metric definitions for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :return: MetricDefinitionCollection. The MetricDefinitionCollection is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.MetricDefinitionCollection + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.MetricDefinitionCollection] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_metric_definitions_request( + test_run_id=test_run_id, + metric_namespace=metric_namespace, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.MetricDefinitionCollection, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + async def get_metric_namespaces(self, test_run_id: str, **kwargs: Any) -> _models.MetricNamespaceCollection: + """List the metric namespaces for a load test run. + + List the metric namespaces for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: MetricNamespaceCollection. The MetricNamespaceCollection is compatible with + MutableMapping + :rtype: ~azure.developer.loadtesting.models.MetricNamespaceCollection + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.MetricNamespaceCollection] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_metric_namespaces_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.MetricNamespaceCollection, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @overload + def list_metrics( + self, + test_run_id: str, + body: Optional[_models.MetricRequestPayload] = None, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncIterable["_models.TimeSeriesElement"]: + """List the metric values for a load test run. + + List the metric values for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Metric dimension filter. Default value is None. + :type body: ~azure.developer.loadtesting.models.MetricRequestPayload + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword aggregation: The aggregation. Default value is None. + :paramtype aggregation: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An iterator like instance of TimeSeriesElement + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.developer.loadtesting.models.TimeSeriesElement] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def list_metrics( + self, + test_run_id: str, + body: Optional[JSON] = None, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncIterable["_models.TimeSeriesElement"]: + """List the metric values for a load test run. + + List the metric values for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Metric dimension filter. Default value is None. + :type body: JSON + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword aggregation: The aggregation. Default value is None. + :paramtype aggregation: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An iterator like instance of TimeSeriesElement + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.developer.loadtesting.models.TimeSeriesElement] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def list_metrics( + self, + test_run_id: str, + body: Optional[IO[bytes]] = None, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncIterable["_models.TimeSeriesElement"]: + """List the metric values for a load test run. + + List the metric values for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Metric dimension filter. Default value is None. + :type body: IO[bytes] + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword aggregation: The aggregation. Default value is None. + :paramtype aggregation: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An iterator like instance of TimeSeriesElement + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.developer.loadtesting.models.TimeSeriesElement] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def list_metrics( + self, + test_run_id: str, + body: Optional[Union[_models.MetricRequestPayload, JSON, IO[bytes]]] = None, + *, + metric_name: str, + metric_namespace: str, + time_interval: str, + aggregation: Optional[str] = None, + interval: Optional[Union[str, _models.TimeGrain]] = None, + **kwargs: Any + ) -> AsyncIterable["_models.TimeSeriesElement"]: + """List the metric values for a load test run. + + List the metric values for a load test run. + + :param test_run_id: Unique name for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :param body: Metric dimension filter. Is one of the following types: MetricRequestPayload, + JSON, IO[bytes] Default value is None. + :type body: ~azure.developer.loadtesting.models.MetricRequestPayload or JSON or IO[bytes] + :keyword metric_name: Metric name. Required. + :paramtype metric_name: str + :keyword metric_namespace: Metric namespace to query metric definitions for. Required. + :paramtype metric_namespace: str + :keyword time_interval: The timespan of the query. It is a string with the following format + 'startDateTime_ISO/endDateTime_ISO'. Required. + :paramtype time_interval: str + :keyword aggregation: The aggregation. Default value is None. + :paramtype aggregation: str + :keyword interval: The interval (i.e. timegrain) of the query. Known values are: "PT5S", + "PT10S", "PT1M", "PT5M", and "PT1H". Default value is None. + :paramtype interval: str or ~azure.developer.loadtesting.models.TimeGrain + :return: An iterator like instance of TimeSeriesElement + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.developer.loadtesting.models.TimeSeriesElement] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[List[_models.TimeSeriesElement]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + content_type = content_type or "application/json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + if body is not None: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + else: + _content = None + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_run_list_metrics_request( + test_run_id=test_run_id, + metric_name=metric_name, + metric_namespace=metric_namespace, + time_interval=time_interval, + aggregation=aggregation, + interval=interval, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TimeSeriesElement], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @distributed_trace + def list_test_runs( + self, + *, + orderby: Optional[str] = None, + search: Optional[str] = None, + test_id: Optional[str] = None, + execution_from: Optional[datetime.datetime] = None, + execution_to: Optional[datetime.datetime] = None, + status: Optional[str] = None, + **kwargs: Any + ) -> AsyncIterable["_models.TestRun"]: + """Get all test runs for the given filters. + + Get all test runs for the given filters. + + :keyword orderby: Sort on the supported fields in (field asc/desc) format. eg: executedDateTime + asc. Supported fields - executedDateTime. Default value is None. + :paramtype orderby: str + :keyword search: Prefix based, case sensitive search on searchable fields - description, + executedUser. For example, to search for a test run, with description 500 VUs, + the search parameter can be 500. Default value is None. + :paramtype search: str + :keyword test_id: Unique name of an existing load test. Default value is None. + :paramtype test_id: str + :keyword execution_from: Start DateTime(RFC 3339 literal format) of test-run execution time + filter range. Default value is None. + :paramtype execution_from: ~datetime.datetime + :keyword execution_to: End DateTime(RFC 3339 literal format) of test-run execution time filter + range. Default value is None. + :paramtype execution_to: ~datetime.datetime + :keyword status: Comma separated list of test run status. Default value is None. + :paramtype status: str + :return: An iterator like instance of TestRun + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.developer.loadtesting.models.TestRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + maxpagesize = kwargs.pop("maxpagesize", None) + cls: ClsType[List[_models.TestRun]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_run_list_test_runs_request( + orderby=orderby, + search=search, + test_id=test_id, + execution_from=execution_from, + execution_to=execution_to, + status=status, + maxpagesize=maxpagesize, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TestRun], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @distributed_trace_async + async def stop_test_run(self, test_run_id: str, **kwargs: Any) -> _models.TestRun: + """Stop test run by test run Id. + + Stop test run by test run Id. + + :param test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_run_id: str + :return: TestRun. The TestRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestRun] = kwargs.pop("cls", None) + + _request = build_load_test_run_stop_test_run_request( + test_run_id=test_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + +class LoadTestAdministrationClientOperationsMixin( # pylint: disable=name-too-long + LoadTestAdministrationClientMixinABC +): + + @overload + async def create_or_update_test_profile( + self, + test_profile_id: str, + body: _models.TestProfile, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestProfile: + """Create a new test profile or update an existing test profile. + + Create a new test profile or update an existing test profile by providing the test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :param body: The resource instance. Required. + :type body: ~azure.developer.loadtesting.models.TestProfile + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_test_profile( + self, test_profile_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestProfile: + """Create a new test profile or update an existing test profile. + + Create a new test profile or update an existing test profile by providing the test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :param body: The resource instance. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_test_profile( + self, + test_profile_id: str, + body: IO[bytes], + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestProfile: + """Create a new test profile or update an existing test profile. + + Create a new test profile or update an existing test profile by providing the test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :param body: The resource instance. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_id", "content_type", "accept"]}, + ) + async def create_or_update_test_profile( + self, test_profile_id: str, body: Union[_models.TestProfile, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestProfile: + """Create a new test profile or update an existing test profile. + + Create a new test profile or update an existing test profile by providing the test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :param body: The resource instance. Is one of the following types: TestProfile, JSON, IO[bytes] + Required. + :type body: ~azure.developer.loadtesting.models.TestProfile or JSON or IO[bytes] + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.TestProfile] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_administration_create_or_update_test_profile_request( + test_profile_id=test_profile_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfile, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_id", "accept"]}, + ) + async def delete_test_profile(self, test_profile_id: str, **kwargs: Any) -> None: + """Delete a test profile. + + Delete a test profile by its test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_administration_delete_test_profile_request( + test_profile_id=test_profile_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_id", "accept"]}, + ) + async def get_test_profile(self, test_profile_id: str, **kwargs: Any) -> _models.TestProfile: + """Get load test profile details. + + Get load test profile details by test profile Id. + + :param test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_id: str + :return: TestProfile. The TestProfile is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfile + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestProfile] = kwargs.pop("cls", None) + + _request = build_load_test_administration_get_test_profile_request( + test_profile_id=test_profile_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfile, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={ + "2024-05-01-preview": [ + "api_version", + "maxpagesize", + "last_modified_start_time", + "last_modified_end_time", + "test_profile_ids", + "test_ids", + "accept", + ] + }, + ) + def list_test_profiles( + self, + *, + last_modified_start_time: Optional[datetime.datetime] = None, + last_modified_end_time: Optional[datetime.datetime] = None, + test_profile_ids: Optional[str] = None, + test_ids: Optional[str] = None, + **kwargs: Any + ) -> AsyncIterable["_models.TestProfile"]: + """List test profiles. + + Get all test profiles for the given filters. + + :keyword last_modified_start_time: Start DateTime(RFC 3339 literal format) of the last updated + time range to filter test profiles. Default value is None. + :paramtype last_modified_start_time: ~datetime.datetime + :keyword last_modified_end_time: End DateTime(RFC 3339 literal format) of the last updated time + range to filter test profiles. Default value is None. + :paramtype last_modified_end_time: ~datetime.datetime + :keyword test_profile_ids: Comma separated list of IDs of the test profiles to filter. Default + value is None. + :paramtype test_profile_ids: str + :keyword test_ids: Comma separated list IDs of the tests which should be associated with the + test profiles to fetch. Default value is None. + :paramtype test_ids: str + :return: An iterator like instance of TestProfile + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.developer.loadtesting.models.TestProfile] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + maxpagesize = kwargs.pop("maxpagesize", None) + cls: ClsType[List[_models.TestProfile]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_administration_list_test_profiles_request( + maxpagesize=maxpagesize, + last_modified_start_time=last_modified_start_time, + last_modified_end_time=last_modified_end_time, + test_profile_ids=test_profile_ids, + test_ids=test_ids, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TestProfile], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + +class LoadTestRunClientOperationsMixin(LoadTestRunClientMixinABC): + + @overload + async def create_or_update_test_profile_run( + self, + test_profile_run_id: str, + body: _models.TestProfileRun, + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestProfileRun: + """Create and start a new test profile run. + + Create and start a new test profile run with the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :param body: The resource instance. Required. + :type body: ~azure.developer.loadtesting.models.TestProfileRun + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_test_profile_run( + self, test_profile_run_id: str, body: JSON, *, content_type: str = "application/merge-patch+json", **kwargs: Any + ) -> _models.TestProfileRun: + """Create and start a new test profile run. + + Create and start a new test profile run with the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :param body: The resource instance. Required. + :type body: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def create_or_update_test_profile_run( + self, + test_profile_run_id: str, + body: IO[bytes], + *, + content_type: str = "application/merge-patch+json", + **kwargs: Any + ) -> _models.TestProfileRun: + """Create and start a new test profile run. + + Create and start a new test profile run with the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :param body: The resource instance. Required. + :type body: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/merge-patch+json". + :paramtype content_type: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_run_id", "content_type", "accept"]}, + ) + async def create_or_update_test_profile_run( + self, test_profile_run_id: str, body: Union[_models.TestProfileRun, JSON, IO[bytes]], **kwargs: Any + ) -> _models.TestProfileRun: + """Create and start a new test profile run. + + Create and start a new test profile run with the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :param body: The resource instance. Is one of the following types: TestProfileRun, JSON, + IO[bytes] Required. + :type body: ~azure.developer.loadtesting.models.TestProfileRun or JSON or IO[bytes] + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.TestProfileRun] = kwargs.pop("cls", None) + + content_type = content_type or "application/merge-patch+json" + _content = None + if isinstance(body, (IOBase, bytes)): + _content = body + else: + _content = json.dumps(body, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_load_test_run_create_or_update_test_profile_run_request( + test_profile_run_id=test_profile_run_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfileRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_run_id", "accept"]}, + ) + async def delete_test_profile_run(self, test_profile_run_id: str, **kwargs: Any) -> None: + """Delete an existing load test profile run. + + Delete an existing load test profile run by providing the test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :return: None + :rtype: None + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + + _request = build_load_test_run_delete_test_profile_run_request( + test_profile_run_id=test_profile_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_run_id", "accept"]}, + ) + async def get_test_profile_run(self, test_profile_run_id: str, **kwargs: Any) -> _models.TestProfileRun: + """Get test profile run details. + + Get test profile run details by test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestProfileRun] = kwargs.pop("cls", None) + + _request = build_load_test_run_get_test_profile_run_request( + test_profile_run_id=test_profile_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfileRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={ + "2024-05-01-preview": [ + "api_version", + "maxpagesize", + "min_start_date_time", + "max_start_date_time", + "min_end_date_time", + "max_end_date_time", + "created_date_start_time", + "created_date_end_time", + "test_profile_run_ids", + "test_profile_ids", + "statuses", + "accept", + ] + }, + ) + def list_test_profile_runs( + self, + *, + min_start_date_time: Optional[datetime.datetime] = None, + max_start_date_time: Optional[datetime.datetime] = None, + min_end_date_time: Optional[datetime.datetime] = None, + max_end_date_time: Optional[datetime.datetime] = None, + created_date_start_time: Optional[datetime.datetime] = None, + created_date_end_time: Optional[datetime.datetime] = None, + test_profile_run_ids: Optional[str] = None, + test_profile_ids: Optional[str] = None, + statuses: Optional[str] = None, + **kwargs: Any + ) -> AsyncIterable["_models.TestProfileRun"]: + """List test profile runs. + + Get all test profile runs for the given filters. + + :keyword min_start_date_time: Minimum Start DateTime(RFC 3339 literal format) of the test + profile runs to filter on. Default value is None. + :paramtype min_start_date_time: ~datetime.datetime + :keyword max_start_date_time: Maximum Start DateTime(RFC 3339 literal format) of the test + profile runs to filter on. Default value is None. + :paramtype max_start_date_time: ~datetime.datetime + :keyword min_end_date_time: Minimum End DateTime(RFC 3339 literal format) of the test profile + runs to filter on. Default value is None. + :paramtype min_end_date_time: ~datetime.datetime + :keyword max_end_date_time: Maximum End DateTime(RFC 3339 literal format) of the test profile + runs to filter on. Default value is None. + :paramtype max_end_date_time: ~datetime.datetime + :keyword created_date_start_time: Start DateTime(RFC 3339 literal format) of the created time + range to filter test profile runs. Default value is None. + :paramtype created_date_start_time: ~datetime.datetime + :keyword created_date_end_time: End DateTime(RFC 3339 literal format) of the created time range + to filter test profile runs. Default value is None. + :paramtype created_date_end_time: ~datetime.datetime + :keyword test_profile_run_ids: Comma separated list of IDs of the test profile runs to filter. + Default value is None. + :paramtype test_profile_run_ids: str + :keyword test_profile_ids: Comma separated IDs of the test profiles which should be associated + with the test profile runs to fetch. Default value is None. + :paramtype test_profile_ids: str + :keyword statuses: Comma separated list of Statuses of the test profile runs to filter. Default + value is None. + :paramtype statuses: str + :return: An iterator like instance of TestProfileRun + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.developer.loadtesting.models.TestProfileRun] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + maxpagesize = kwargs.pop("maxpagesize", None) + cls: ClsType[List[_models.TestProfileRun]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_load_test_run_list_test_profile_runs_request( + maxpagesize=maxpagesize, + min_start_date_time=min_start_date_time, + max_start_date_time=max_start_date_time, + min_end_date_time=min_end_date_time, + max_end_date_time=max_end_date_time, + created_date_start_time=created_date_start_time, + created_date_end_time=created_date_end_time, + test_profile_run_ids=test_profile_run_ids, + test_profile_ids=test_profile_ids, + statuses=statuses, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize(List[_models.TestProfileRun], deserialized["value"]) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @distributed_trace_async + @api_version_validation( + method_added_on="2024-05-01-preview", + params_added_on={"2024-05-01-preview": ["api_version", "test_profile_run_id", "accept"]}, + ) + async def stop_test_profile_run(self, test_profile_run_id: str, **kwargs: Any) -> _models.TestProfileRun: + """Stop test profile run. + + Stop test profile run for the given test profile run Id. + + :param test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :type test_profile_run_id: str + :return: TestProfileRun. The TestProfileRun is compatible with MutableMapping + :rtype: ~azure.developer.loadtesting.models.TestProfileRun + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.TestProfileRun] = kwargs.pop("cls", None) + + _request = build_load_test_run_stop_test_profile_run_request( + test_profile_run_id=test_profile_run_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.endpoint", self._config.endpoint, "str"), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response) + + if _stream: + deserialized = response.iter_bytes() + else: + deserialized = _deserialize(_models.TestProfileRun, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_operations/_patch.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_operations/_patch.py new file mode 100644 index 000000000000..f7dd32510333 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_operations/_patch.py @@ -0,0 +1,20 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_patch.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_patch.py new file mode 100644 index 000000000000..f7dd32510333 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_patch.py @@ -0,0 +1,20 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_vendor.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_vendor.py new file mode 100644 index 000000000000..a61dd8e01d78 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/aio/_vendor.py @@ -0,0 +1,52 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from abc import ABC +from typing import TYPE_CHECKING + +from ._configuration import LoadTestAdministrationClientConfiguration, LoadTestRunClientConfiguration + +if TYPE_CHECKING: + from azure.core import AsyncPipelineClient + + from .._serialization import Deserializer, Serializer + + +class LoadTestAdministrationClientMixinABC(ABC): + """DO NOT use this class. It is for internal typing use only.""" + + _client: "AsyncPipelineClient" + _config: LoadTestAdministrationClientConfiguration + _serialize: "Serializer" + _deserialize: "Deserializer" + + +class LoadTestRunClientMixinABC(ABC): + """DO NOT use this class. It is for internal typing use only.""" + + _client: "AsyncPipelineClient" + _config: LoadTestRunClientConfiguration + _serialize: "Serializer" + _deserialize: "Deserializer" + + +class LoadTestAdministrationClientMixinABC(ABC): + """DO NOT use this class. It is for internal typing use only.""" + + _client: "AsyncPipelineClient" + _config: LoadTestAdministrationClientConfiguration + _serialize: "Serializer" + _deserialize: "Deserializer" + + +class LoadTestRunClientMixinABC(ABC): + """DO NOT use this class. It is for internal typing use only.""" + + _client: "AsyncPipelineClient" + _config: LoadTestRunClientConfiguration + _serialize: "Serializer" + _deserialize: "Deserializer" diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/__init__.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/__init__.py new file mode 100644 index 000000000000..661b282107eb --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/__init__.py @@ -0,0 +1,158 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=wrong-import-position + +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from ._patch import * # pylint: disable=unused-wildcard-import + + +from ._models import ( # type: ignore + AppComponent, + ArtifactsContainerInfo, + AutoStopCriteria, + CertificateMetadata, + DimensionFilter, + DimensionValue, + DimensionValueList, + ErrorDetails, + FunctionFlexConsumptionResourceConfiguration, + FunctionFlexConsumptionTargetResourceConfigurations, + LoadTestConfiguration, + MetricAvailability, + MetricDefinition, + MetricDefinitionCollection, + MetricNamespace, + MetricNamespaceCollection, + MetricRequestPayload, + MetricValue, + NameAndDesc, + OptionalLoadTestConfig, + PassFailCriteria, + PassFailMetric, + PassFailServerMetric, + RegionalConfiguration, + ResourceMetric, + Secret, + TargetResourceConfigurations, + Test, + TestAppComponents, + TestFileInfo, + TestInputArtifacts, + TestProfile, + TestProfileRun, + TestProfileRunRecommendation, + TestRun, + TestRunAppComponents, + TestRunArtifacts, + TestRunDetail, + TestRunFileInfo, + TestRunInputArtifacts, + TestRunOutputArtifacts, + TestRunServerMetricConfig, + TestRunStatistics, + TestServerMetricConfig, + TimeSeriesElement, +) + +from ._enums import ( # type: ignore + AggregationType, + CertificateType, + CreateByTypes, + FileStatus, + FileType, + ManagedIdentityType, + MetricUnit, + PFAction, + PFAgFunc, + PFMetrics, + PFResult, + PFTestResult, + RecommendationCategory, + RequestDataLevel, + ResourceKind, + SecretType, + Status, + TestKind, + TestProfileRunStatus, + TimeGrain, +) +from ._patch import __all__ as _patch_all +from ._patch import * +from ._patch import patch_sdk as _patch_sdk + +__all__ = [ + "AppComponent", + "ArtifactsContainerInfo", + "AutoStopCriteria", + "CertificateMetadata", + "DimensionFilter", + "DimensionValue", + "DimensionValueList", + "ErrorDetails", + "FunctionFlexConsumptionResourceConfiguration", + "FunctionFlexConsumptionTargetResourceConfigurations", + "LoadTestConfiguration", + "MetricAvailability", + "MetricDefinition", + "MetricDefinitionCollection", + "MetricNamespace", + "MetricNamespaceCollection", + "MetricRequestPayload", + "MetricValue", + "NameAndDesc", + "OptionalLoadTestConfig", + "PassFailCriteria", + "PassFailMetric", + "PassFailServerMetric", + "RegionalConfiguration", + "ResourceMetric", + "Secret", + "TargetResourceConfigurations", + "Test", + "TestAppComponents", + "TestFileInfo", + "TestInputArtifacts", + "TestProfile", + "TestProfileRun", + "TestProfileRunRecommendation", + "TestRun", + "TestRunAppComponents", + "TestRunArtifacts", + "TestRunDetail", + "TestRunFileInfo", + "TestRunInputArtifacts", + "TestRunOutputArtifacts", + "TestRunServerMetricConfig", + "TestRunStatistics", + "TestServerMetricConfig", + "TimeSeriesElement", + "AggregationType", + "CertificateType", + "CreateByTypes", + "FileStatus", + "FileType", + "ManagedIdentityType", + "MetricUnit", + "PFAction", + "PFAgFunc", + "PFMetrics", + "PFResult", + "PFTestResult", + "RecommendationCategory", + "RequestDataLevel", + "ResourceKind", + "SecretType", + "Status", + "TestKind", + "TestProfileRunStatus", + "TimeGrain", +] +__all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore +_patch_sdk() diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/_enums.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/_enums.py new file mode 100644 index 000000000000..5c39b6ce76c0 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/_enums.py @@ -0,0 +1,317 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from enum import Enum +from azure.core import CaseInsensitiveEnumMeta + + +class AggregationType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Aggregation type.""" + + AVERAGE = "Average" + """Average value.""" + COUNT = "Count" + """Total count.""" + NONE = "None" + """Aggregation will be average in this case.""" + TOTAL = "Total" + """Total sum.""" + PERCENTILE75 = "Percentile75" + """75th percentile.""" + PERCENTILE90 = "Percentile90" + """90th percentile.""" + PERCENTILE95 = "Percentile95" + """95th percentile.""" + PERCENTILE96 = "Percentile96" + """96th percentile.""" + PERCENTILE97 = "Percentile97" + """97th percentile.""" + PERCENTILE98 = "Percentile98" + """98th percentile.""" + PERCENTILE99 = "Percentile99" + """99th percentile.""" + PERCENTILE999 = "Percentile999" + """99.9th percentile.""" + PERCENTILE9999 = "Percentile9999" + """99.99th percentile.""" + + +class CertificateType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Types of certificates supported.""" + + AKV_CERT_URI = "AKV_CERT_URI" + """If the certificate is stored in an Azure Key Vault.""" + + +class CreateByTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type of the entity that created the test run. (E.x. User, ScheduleTrigger, etc).""" + + USER = "User" + """Entity was created by a user.""" + SCHEDULED_TRIGGER = "ScheduledTrigger" + """Entity was created by a scheduled trigger.""" + + +class FileStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """File status.""" + + NOT_VALIDATED = "NOT_VALIDATED" + """File is not validated.""" + VALIDATION_SUCCESS = "VALIDATION_SUCCESS" + """File is validated.""" + VALIDATION_FAILURE = "VALIDATION_FAILURE" + """File validation is failed.""" + VALIDATION_INITIATED = "VALIDATION_INITIATED" + """File validation is in progress.""" + VALIDATION_NOT_REQUIRED = "VALIDATION_NOT_REQUIRED" + """Validation is not required.""" + + +class FileType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Types of file supported.""" + + JMX_FILE = "JMX_FILE" + """If the file is a JMX script.""" + USER_PROPERTIES = "USER_PROPERTIES" + """If the file is a user properties file.""" + ADDITIONAL_ARTIFACTS = "ADDITIONAL_ARTIFACTS" + """If the file is not among any of the other supported file types.""" + ZIPPED_ARTIFACTS = "ZIPPED_ARTIFACTS" + """If the file is a compressed archive containing a collection of various artifacts or resources.""" + URL_TEST_CONFIG = "URL_TEST_CONFIG" + """If the file is a JSON config file to define the requests for a URL test.""" + TEST_SCRIPT = "TEST_SCRIPT" + """If the file is a test script.""" + + +class ManagedIdentityType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Managed identity type.""" + + SYSTEM_ASSIGNED = "SystemAssigned" + """System-assigned managed identity.""" + USER_ASSIGNED = "UserAssigned" + """User-assigned managed identity.""" + + +class MetricUnit(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Metric unit.""" + + NOT_SPECIFIED = "NotSpecified" + """No unit specified.""" + PERCENT = "Percent" + """Percentage.""" + COUNT = "Count" + """Value count.""" + SECONDS = "Seconds" + """Seconds.""" + MILLISECONDS = "Milliseconds" + """Milliseconds""" + BYTES = "Bytes" + """Bytes""" + BYTES_PER_SECOND = "BytesPerSecond" + """Bytes per second""" + COUNT_PER_SECOND = "CountPerSecond" + """Count per second""" + + +class PFAction(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Action to take on failure of pass/fail criteria.""" + + CONTINUE = "continue" + """Test will continue to run even if pass fail metric criteria metric gets failed.""" + STOP = "stop" + """Test run will stop if pass fail criteria metric is not passed.""" + + +class PFAgFunc(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Aggregation functions for pass/fail criteria.""" + + COUNT = "count" + """Criteria applies for count value.""" + PERCENTAGE = "percentage" + """Criteria applies for given percentage value.""" + AVG = "avg" + """Criteria applies for avg value.""" + P50 = "p50" + """Criteria applies for 50th percentile value.""" + P75 = "p75" + """Criteria applies for 75th percentile value.""" + P90 = "p90" + """Criteria applies for 90th percentile value.""" + P95 = "p95" + """Criteria applies for 95th percentile value.""" + P96 = "p96" + """Criteria applies for 96th percentile value.""" + P97 = "p97" + """Criteria applies for 97th percentile value.""" + P98 = "p98" + """Criteria applies for 98th percentile value.""" + P99 = "p99" + """Criteria applies for 99th percentile value.""" + P99_9 = "p99.9" + """Criteria applies for 99.9th percentile value.""" + P99_99 = "p99.99" + """Criteria applies for 99.99th percentile value.""" + MIN = "min" + """Criteria applies for minimum value.""" + MAX = "max" + """Criteria applies for maximum value.""" + + +class PFMetrics(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Metrics for pass/fail criteria.""" + + RESPONSE_TIME_MS = "response_time_ms" + """Pass fail criteria for response time metric in milliseconds.""" + LATENCY = "latency" + """Pass fail criteria for latency metric in milliseconds.""" + ERROR = "error" + """Pass fail criteria for error metric.""" + REQUESTS = "requests" + """Pass fail criteria for total requests.""" + REQUESTS_PER_SEC = "requests_per_sec" + """Pass fail criteria for request per second.""" + + +class PFResult(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Pass/fail criteria result.""" + + PASSED = "passed" + """Given pass fail criteria metric has passed.""" + UNDETERMINED = "undetermined" + """Given pass fail criteria metric couldn't determine.""" + FAILED = "failed" + """Given pass fail criteria metric has failed.""" + + +class PFTestResult(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Test result based on pass/fail criteria.""" + + PASSED = "PASSED" + """Pass/fail criteria has passed.""" + NOT_APPLICABLE = "NOT_APPLICABLE" + """Pass/fail criteria is not applicable.""" + FAILED = "FAILED" + """Pass/fail criteria has failed.""" + + +class RecommendationCategory(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Category of Recommendation.""" + + THROUGHPUT_OPTIMIZED = "ThroughputOptimized" + """The recommendation for this category optimizes the throughput/RPS (Requests per Second) of the + app.""" + COST_OPTIMIZED = "CostOptimized" + """The recommendation for this category optimizes the cost of the app.""" + + +class RequestDataLevel(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Request data collection level for test run.""" + + NONE = "NONE" + """No request data will be collected""" + ERRORS = "ERRORS" + """Request data will be collected in case of failed requests""" + + +class ResourceKind(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Kind of the resource on which test profile is created.""" + + FUNCTIONS_FLEX_CONSUMPTION = "FunctionsFlexConsumption" + """Resource is a Azure FunctionApp on Flex Consumption Plan.""" + + +class SecretType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Types of secrets supported.""" + + AKV_SECRET_URI = "AKV_SECRET_URI" + """If the secret is stored in an Azure Key Vault.""" + SECRET_VALUE = "SECRET_VALUE" + """If the secret value provided as plain text.""" + + +class Status(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Test run status.""" + + ACCEPTED = "ACCEPTED" + """Test run request is accepted.""" + NOTSTARTED = "NOTSTARTED" + """Test run is not yet started.""" + PROVISIONING = "PROVISIONING" + """Test run is provisioning.""" + PROVISIONED = "PROVISIONED" + """Test run is provisioned.""" + CONFIGURING = "CONFIGURING" + """Test run is getting configured.""" + CONFIGURED = "CONFIGURED" + """Test run configuration is done.""" + EXECUTING = "EXECUTING" + """Test run has started executing.""" + EXECUTED = "EXECUTED" + """Test run execution is completed.""" + DEPROVISIONING = "DEPROVISIONING" + """Test run is getting deprovisioned.""" + DEPROVISIONED = "DEPROVISIONED" + """Test run is deprovisioned.""" + DONE = "DONE" + """Test run is completed.""" + CANCELLING = "CANCELLING" + """Test run is being cancelled.""" + CANCELLED = "CANCELLED" + """Test run request is cancelled.""" + FAILED = "FAILED" + """Test run request is failed.""" + VALIDATION_SUCCESS = "VALIDATION_SUCCESS" + """Test run JMX file is validated.""" + VALIDATION_FAILURE = "VALIDATION_FAILURE" + """Test run JMX file validation is failed.""" + + +class TestKind(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Test kind.""" + + URL = "URL" + """URL Test""" + JMX = "JMX" + """JMX Test""" + LOCUST = "Locust" + """Locust Test""" + + +class TestProfileRunStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Test profile run status.""" + + ACCEPTED = "ACCEPTED" + """Test profile run request is accepted.""" + NOTSTARTED = "NOTSTARTED" + """Test profile run is not yet started.""" + EXECUTING = "EXECUTING" + """Test profile run has started executing.""" + DONE = "DONE" + """Test profile run has completed successfully.""" + CANCELLING = "CANCELLING" + """Test profile run is being cancelled.""" + CANCELLED = "CANCELLED" + """Test profile run is cancelled.""" + FAILED = "FAILED" + """Test profile run has failed.""" + + +class TimeGrain(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Time Grain.""" + + PT5S = "PT5S" + """5 seconds, available only if test run duration is less than 10 minutes.""" + PT10S = "PT10S" + """10 seconds, available only if test run duration is less than 10 minutes.""" + PT1M = "PT1M" + """1 minute""" + PT5M = "PT5M" + """5 minutes, available only if test run duration is greater than 1 minute.""" + PT1H = "PT1H" + """1 hour, available only if test run duration is greater than 1 minute.""" diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/_models.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/_models.py new file mode 100644 index 000000000000..20d45ddd4b72 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/_models.py @@ -0,0 +1,2530 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=useless-super-delegation + +import datetime +from typing import Any, Dict, List, Literal, Mapping, Optional, TYPE_CHECKING, Union, overload + +from .. import _model_base +from .._model_base import rest_discriminator, rest_field +from ._enums import ResourceKind + +if TYPE_CHECKING: + from .. import models as _models + + +class AppComponent(_model_base.Model): + """An Azure resource object (Refer azure generic resource model + :https://learn.microsoft.com/en-us/rest/api/resources/resources/get-by-id#genericresource). + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar resource_id: fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. + Required. + :vartype resource_id: str + :ivar resource_name: Azure resource name, required while creating the app component. Required. + :vartype resource_name: str + :ivar resource_type: Azure resource type, required while creating the app component. Required. + :vartype resource_type: str + :ivar display_name: Azure resource display name. + :vartype display_name: str + :ivar resource_group: Resource group name of the Azure resource. + :vartype resource_group: str + :ivar subscription_id: Subscription Id of the Azure resource. + :vartype subscription_id: str + :ivar kind: Kind of Azure resource type. + :vartype kind: str + """ + + resource_id: str = rest_field(name="resourceId", visibility=["read"]) + """fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}. + Required.""" + resource_name: str = rest_field(name="resourceName") + """Azure resource name, required while creating the app component. Required.""" + resource_type: str = rest_field(name="resourceType") + """Azure resource type, required while creating the app component. Required.""" + display_name: Optional[str] = rest_field(name="displayName") + """Azure resource display name.""" + resource_group: Optional[str] = rest_field(name="resourceGroup", visibility=["read"]) + """Resource group name of the Azure resource.""" + subscription_id: Optional[str] = rest_field(name="subscriptionId", visibility=["read"]) + """Subscription Id of the Azure resource.""" + kind: Optional[str] = rest_field() + """Kind of Azure resource type.""" + + @overload + def __init__( + self, + *, + resource_name: str, + resource_type: str, + display_name: Optional[str] = None, + kind: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ArtifactsContainerInfo(_model_base.Model): + """Artifacts container info. + + :ivar url: This is a SAS URI to an Azure Storage Container that contains the test run + artifacts. + :vartype url: str + :ivar expire_date_time: Expiry time of the container (RFC 3339 literal format). + :vartype expire_date_time: ~datetime.datetime + """ + + url: Optional[str] = rest_field() + """This is a SAS URI to an Azure Storage Container that contains the test run artifacts.""" + expire_date_time: Optional[datetime.datetime] = rest_field(name="expireDateTime", format="rfc3339") + """Expiry time of the container (RFC 3339 literal format).""" + + @overload + def __init__( + self, + *, + url: Optional[str] = None, + expire_date_time: Optional[datetime.datetime] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class AutoStopCriteria(_model_base.Model): + """Auto stop criteria for a test. This will automatically stop a load test if the error percentage + is high for a certain time window. + + :ivar auto_stop_disabled: Whether auto-stop should be disabled. The default value is false. + :vartype auto_stop_disabled: bool + :ivar error_rate: Threshold percentage of errors on which test run should be automatically + stopped. Allowed values are in range of 0.0-100.0. + :vartype error_rate: float + :ivar error_rate_time_window_in_seconds: Time window during which the error percentage should + be evaluated in seconds. + :vartype error_rate_time_window_in_seconds: int + """ + + auto_stop_disabled: Optional[bool] = rest_field(name="autoStopDisabled") + """Whether auto-stop should be disabled. The default value is false.""" + error_rate: Optional[float] = rest_field(name="errorRate") + """Threshold percentage of errors on which test run should be automatically stopped. Allowed + values are in range of 0.0-100.0.""" + error_rate_time_window_in_seconds: Optional[int] = rest_field(name="errorRateTimeWindowInSeconds") + """Time window during which the error percentage should be evaluated in seconds.""" + + @overload + def __init__( + self, + *, + auto_stop_disabled: Optional[bool] = None, + error_rate: Optional[float] = None, + error_rate_time_window_in_seconds: Optional[int] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class CertificateMetadata(_model_base.Model): + """Certificates metadata. + + :ivar value: The value of the certificate for respective type. + :vartype value: str + :ivar type: Type of certificate. "AKV_CERT_URI" + :vartype type: str or ~azure.developer.loadtesting.models.CertificateType + :ivar name: Name of the certificate. + :vartype name: str + """ + + value: Optional[str] = rest_field() + """The value of the certificate for respective type.""" + type: Optional[Union[str, "_models.CertificateType"]] = rest_field() + """Type of certificate. \"AKV_CERT_URI\"""" + name: Optional[str] = rest_field() + """Name of the certificate.""" + + @overload + def __init__( + self, + *, + value: Optional[str] = None, + type: Optional[Union[str, "_models.CertificateType"]] = None, + name: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class DimensionFilter(_model_base.Model): + """Dimension name and values to filter. + + :ivar name: The dimension name. + :vartype name: str + :ivar values_property: The dimension values. Maximum values can be 20. + :vartype values_property: list[str] + """ + + name: Optional[str] = rest_field() + """The dimension name.""" + values_property: Optional[List[str]] = rest_field(name="values") + """The dimension values. Maximum values can be 20.""" + + @overload + def __init__( + self, + *, + name: Optional[str] = None, + values_property: Optional[List[str]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class DimensionValue(_model_base.Model): + """Represents a metric dimension value. + + :ivar name: The name of the dimension. + :vartype name: str + :ivar value: The value of the dimension. + :vartype value: str + """ + + name: Optional[str] = rest_field() + """The name of the dimension.""" + value: Optional[str] = rest_field() + """The value of the dimension.""" + + @overload + def __init__( + self, + *, + name: Optional[str] = None, + value: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class DimensionValueList(_model_base.Model): + """Metrics dimension values. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + :ivar name: The dimension name. + :vartype name: str + :ivar value: The dimension value. + :vartype value: list[str] + :ivar next_link: Link for the next set of values in case of paginated results, if applicable. + :vartype next_link: str + """ + + name: Optional[str] = rest_field(visibility=["read"]) + """The dimension name.""" + value: Optional[List[str]] = rest_field() + """The dimension value.""" + next_link: Optional[str] = rest_field(name="nextLink") + """Link for the next set of values in case of paginated results, if applicable.""" + + @overload + def __init__( + self, + *, + value: Optional[List[str]] = None, + next_link: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ErrorDetails(_model_base.Model): + """Error details if there is any failure in load test run. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + :ivar message: Error details in case test run was not successfully run. + :vartype message: str + """ + + message: Optional[str] = rest_field(visibility=["read"]) + """Error details in case test run was not successfully run.""" + + +class FunctionFlexConsumptionResourceConfiguration(_model_base.Model): # pylint: disable=name-too-long + """Resource configuration instance for a Flex Consumption based Azure Function App. + + + :ivar instance_memory_mb: Memory size of the instance. Supported values are 2048, 4096. + Required. + :vartype instance_memory_mb: int + :ivar http_concurrency: HTTP Concurrency for the function app. Required. + :vartype http_concurrency: int + """ + + instance_memory_mb: int = rest_field(name="instanceMemoryMB") + """Memory size of the instance. Supported values are 2048, 4096. Required.""" + http_concurrency: int = rest_field(name="httpConcurrency") + """HTTP Concurrency for the function app. Required.""" + + @overload + def __init__( + self, + *, + instance_memory_mb: int, + http_concurrency: int, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TargetResourceConfigurations(_model_base.Model): + """Configurations of a target resource. This varies with the kind of resource. + + You probably want to use the sub-classes and not this class directly. Known sub-classes are: + FunctionFlexConsumptionTargetResourceConfigurations + + + :ivar kind: Kind of the resource for which the configurations apply. Required. + "FunctionsFlexConsumption" + :vartype kind: str or ~azure.developer.loadtesting.models.ResourceKind + """ + + __mapping__: Dict[str, _model_base.Model] = {} + kind: str = rest_discriminator(name="kind", visibility=["read", "create"]) + """Kind of the resource for which the configurations apply. Required. \"FunctionsFlexConsumption\"""" + + @overload + def __init__( + self, + *, + kind: str, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class FunctionFlexConsumptionTargetResourceConfigurations( + TargetResourceConfigurations, discriminator="FunctionsFlexConsumption" +): # pylint: disable=name-too-long + """Configurations for a Function App using Flex Consumption Plan. + + + :ivar kind: The kind value to use when providing configuration. + This should typically be not changed from its value. Required. Resource is a Azure FunctionApp + on Flex Consumption Plan. + :vartype kind: str or ~azure.developer.loadtesting.models.FUNCTIONS_FLEX_CONSUMPTION + :ivar configurations: A map of configurations for a Function app using Flex Consumption Plan. + :vartype configurations: dict[str, + ~azure.developer.loadtesting.models.FunctionFlexConsumptionResourceConfiguration] + """ + + kind: Literal[ResourceKind.FUNCTIONS_FLEX_CONSUMPTION] = rest_discriminator(name="kind") # type: ignore + """The kind value to use when providing configuration. + This should typically be not changed from its value. Required. Resource is a Azure FunctionApp + on Flex Consumption Plan.""" + configurations: Optional[Dict[str, "_models.FunctionFlexConsumptionResourceConfiguration"]] = rest_field() + """A map of configurations for a Function app using Flex Consumption Plan.""" + + @overload + def __init__( + self, + *, + configurations: Optional[Dict[str, "_models.FunctionFlexConsumptionResourceConfiguration"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, kind=ResourceKind.FUNCTIONS_FLEX_CONSUMPTION, **kwargs) + + +class LoadTestConfiguration(_model_base.Model): + """Configurations for the load test. + + :ivar engine_instances: The number of engine instances to execute load test. Supported values + are in range of 1-400. Required for creating a new test. + :vartype engine_instances: int + :ivar split_all_cs_vs: If false, Azure Load Testing copies and processes your input files + unmodified + across all test engine instances. If true, Azure Load Testing splits the CSV + input data evenly across all engine instances. If you provide multiple CSV + files, each file will be split evenly. + :vartype split_all_cs_vs: bool + :ivar quick_start_test: If true, optionalLoadTestConfig is required and JMX script for the load + test is + not required to upload. + :vartype quick_start_test: bool + :ivar optional_load_test_config: Configuration for quick load test. + :vartype optional_load_test_config: ~azure.developer.loadtesting.models.OptionalLoadTestConfig + :ivar regional_load_test_config: Region distribution configuration for the load test. + :vartype regional_load_test_config: + list[~azure.developer.loadtesting.models.RegionalConfiguration] + """ + + engine_instances: Optional[int] = rest_field(name="engineInstances") + """The number of engine instances to execute load test. Supported values are in range of 1-400. + Required for creating a new test.""" + split_all_cs_vs: Optional[bool] = rest_field(name="splitAllCSVs") + """If false, Azure Load Testing copies and processes your input files unmodified + across all test engine instances. If true, Azure Load Testing splits the CSV + input data evenly across all engine instances. If you provide multiple CSV + files, each file will be split evenly.""" + quick_start_test: Optional[bool] = rest_field(name="quickStartTest") + """If true, optionalLoadTestConfig is required and JMX script for the load test is + not required to upload.""" + optional_load_test_config: Optional["_models.OptionalLoadTestConfig"] = rest_field(name="optionalLoadTestConfig") + """Configuration for quick load test.""" + regional_load_test_config: Optional[List["_models.RegionalConfiguration"]] = rest_field( + name="regionalLoadTestConfig" + ) + """Region distribution configuration for the load test.""" + + @overload + def __init__( + self, + *, + engine_instances: Optional[int] = None, + split_all_cs_vs: Optional[bool] = None, + quick_start_test: Optional[bool] = None, + optional_load_test_config: Optional["_models.OptionalLoadTestConfig"] = None, + regional_load_test_config: Optional[List["_models.RegionalConfiguration"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class MetricAvailability(_model_base.Model): + """Metric availability specifies the time grain (aggregation interval or frequency). + + :ivar time_grain: The time grain specifies the aggregation interval for the metric. Expressed + as + a duration 'PT1M', 'PT1H', etc. Known values are: "PT5S", "PT10S", "PT1M", "PT5M", and "PT1H". + :vartype time_grain: str or ~azure.developer.loadtesting.models.TimeGrain + """ + + time_grain: Optional[Union[str, "_models.TimeGrain"]] = rest_field(name="timeGrain") + """The time grain specifies the aggregation interval for the metric. Expressed as + a duration 'PT1M', 'PT1H', etc. Known values are: \"PT5S\", \"PT10S\", \"PT1M\", \"PT5M\", and + \"PT1H\".""" + + @overload + def __init__( + self, + *, + time_grain: Optional[Union[str, "_models.TimeGrain"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class MetricDefinition(_model_base.Model): + """Metric definition. + + :ivar dimensions: List of dimensions. + :vartype dimensions: list[~azure.developer.loadtesting.models.NameAndDesc] + :ivar description: The metric description. + :vartype description: str + :ivar name: The metric name. + :vartype name: str + :ivar namespace: The namespace the metric belongs to. + :vartype namespace: str + :ivar primary_aggregation_type: The primary aggregation type value defining how to use the + values for display. Known values are: "Average", "Count", "None", "Total", "Percentile75", + "Percentile90", "Percentile95", "Percentile96", "Percentile97", "Percentile98", "Percentile99", + "Percentile999", and "Percentile9999". + :vartype primary_aggregation_type: str or ~azure.developer.loadtesting.models.AggregationType + :ivar supported_aggregation_types: The collection of what all aggregation types are supported. + :vartype supported_aggregation_types: list[str] + :ivar unit: The unit of the metric. Known values are: "NotSpecified", "Percent", "Count", + "Seconds", "Milliseconds", "Bytes", "BytesPerSecond", and "CountPerSecond". + :vartype unit: str or ~azure.developer.loadtesting.models.MetricUnit + :ivar metric_availabilities: Metric availability specifies the time grain (aggregation interval + or + frequency). + :vartype metric_availabilities: list[~azure.developer.loadtesting.models.MetricAvailability] + """ + + dimensions: Optional[List["_models.NameAndDesc"]] = rest_field() + """List of dimensions.""" + description: Optional[str] = rest_field() + """The metric description.""" + name: Optional[str] = rest_field() + """The metric name.""" + namespace: Optional[str] = rest_field() + """The namespace the metric belongs to.""" + primary_aggregation_type: Optional[Union[str, "_models.AggregationType"]] = rest_field( + name="primaryAggregationType" + ) + """The primary aggregation type value defining how to use the values for display. Known values + are: \"Average\", \"Count\", \"None\", \"Total\", \"Percentile75\", \"Percentile90\", + \"Percentile95\", \"Percentile96\", \"Percentile97\", \"Percentile98\", \"Percentile99\", + \"Percentile999\", and \"Percentile9999\".""" + supported_aggregation_types: Optional[List[str]] = rest_field(name="supportedAggregationTypes") + """The collection of what all aggregation types are supported.""" + unit: Optional[Union[str, "_models.MetricUnit"]] = rest_field() + """The unit of the metric. Known values are: \"NotSpecified\", \"Percent\", \"Count\", + \"Seconds\", \"Milliseconds\", \"Bytes\", \"BytesPerSecond\", and \"CountPerSecond\".""" + metric_availabilities: Optional[List["_models.MetricAvailability"]] = rest_field(name="metricAvailabilities") + """Metric availability specifies the time grain (aggregation interval or + frequency).""" + + @overload + def __init__( + self, + *, + dimensions: Optional[List["_models.NameAndDesc"]] = None, + description: Optional[str] = None, + name: Optional[str] = None, + namespace: Optional[str] = None, + primary_aggregation_type: Optional[Union[str, "_models.AggregationType"]] = None, + supported_aggregation_types: Optional[List[str]] = None, + unit: Optional[Union[str, "_models.MetricUnit"]] = None, + metric_availabilities: Optional[List["_models.MetricAvailability"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class MetricDefinitionCollection(_model_base.Model): + """Represents collection of metric definitions. + + + :ivar value: the values for the metric definitions. Required. + :vartype value: list[~azure.developer.loadtesting.models.MetricDefinition] + """ + + value: List["_models.MetricDefinition"] = rest_field() + """the values for the metric definitions. Required.""" + + @overload + def __init__( + self, + *, + value: List["_models.MetricDefinition"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class MetricNamespace(_model_base.Model): + """Metric namespace class specifies the metadata for a metric namespace. + + :ivar description: The namespace description. + :vartype description: str + :ivar name: The metric namespace name. + :vartype name: str + """ + + description: Optional[str] = rest_field() + """The namespace description.""" + name: Optional[str] = rest_field() + """The metric namespace name.""" + + @overload + def __init__( + self, + *, + description: Optional[str] = None, + name: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class MetricNamespaceCollection(_model_base.Model): + """Represents collection of metric namespaces. + + + :ivar value: The values for the metric namespaces. Required. + :vartype value: list[~azure.developer.loadtesting.models.MetricNamespace] + """ + + value: List["_models.MetricNamespace"] = rest_field() + """The values for the metric namespaces. Required.""" + + @overload + def __init__( + self, + *, + value: List["_models.MetricNamespace"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class MetricRequestPayload(_model_base.Model): + """Filters to fetch the set of metric. + + :ivar filters: Get metrics for specific dimension values. Example: Metric contains dimension + like SamplerName, Error. To retrieve all the time series data where SamplerName + is equals to HTTPRequest1 or HTTPRequest2, the DimensionFilter value will be + {"SamplerName", ["HTTPRequest1", "HTTPRequest2"}. + :vartype filters: list[~azure.developer.loadtesting.models.DimensionFilter] + """ + + filters: Optional[List["_models.DimensionFilter"]] = rest_field() + """Get metrics for specific dimension values. Example: Metric contains dimension + like SamplerName, Error. To retrieve all the time series data where SamplerName + is equals to HTTPRequest1 or HTTPRequest2, the DimensionFilter value will be + {\"SamplerName\", [\"HTTPRequest1\", \"HTTPRequest2\"}.""" + + @overload + def __init__( + self, + *, + filters: Optional[List["_models.DimensionFilter"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class MetricValue(_model_base.Model): + """Represents a metric value. + + :ivar timestamp: The timestamp for the metric value in RFC 3339 format. + :vartype timestamp: ~datetime.datetime + :ivar value: The metric value. + :vartype value: float + """ + + timestamp: Optional[datetime.datetime] = rest_field(format="rfc3339") + """The timestamp for the metric value in RFC 3339 format.""" + value: Optional[float] = rest_field() + """The metric value.""" + + @overload + def __init__( + self, + *, + timestamp: Optional[datetime.datetime] = None, + value: Optional[float] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class NameAndDesc(_model_base.Model): + """The name and description. + + :ivar description: The description. + :vartype description: str + :ivar name: The name. + :vartype name: str + """ + + description: Optional[str] = rest_field() + """The description.""" + name: Optional[str] = rest_field() + """The name.""" + + @overload + def __init__( + self, + *, + description: Optional[str] = None, + name: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class OptionalLoadTestConfig(_model_base.Model): + """Configuration for quick load test. + + :ivar endpoint_url: Test URL. Provide the complete HTTP URL. For example, + https://contoso-app.azurewebsites.net/login. + :vartype endpoint_url: str + :ivar requests_per_second: Target throughput (requests per second). This may not be necessarily + achieved. The actual throughput will be lower if the application is not capable of handling it. + :vartype requests_per_second: int + :ivar max_response_time_in_ms: Maximum response time in milliseconds of the API/endpoint. + :vartype max_response_time_in_ms: int + :ivar virtual_users: No of concurrent virtual users. + :vartype virtual_users: int + :ivar ramp_up_time: Ramp up time in seconds. + :vartype ramp_up_time: int + :ivar duration: Test run duration in seconds. + :vartype duration: int + """ + + endpoint_url: Optional[str] = rest_field(name="endpointUrl") + """Test URL. Provide the complete HTTP URL. For example, + https://contoso-app.azurewebsites.net/login.""" + requests_per_second: Optional[int] = rest_field(name="requestsPerSecond") + """Target throughput (requests per second). This may not be necessarily achieved. The actual + throughput will be lower if the application is not capable of handling it.""" + max_response_time_in_ms: Optional[int] = rest_field(name="maxResponseTimeInMs") + """Maximum response time in milliseconds of the API/endpoint.""" + virtual_users: Optional[int] = rest_field(name="virtualUsers") + """No of concurrent virtual users.""" + ramp_up_time: Optional[int] = rest_field(name="rampUpTime") + """Ramp up time in seconds.""" + duration: Optional[int] = rest_field() + """Test run duration in seconds.""" + + @overload + def __init__( + self, + *, + endpoint_url: Optional[str] = None, + requests_per_second: Optional[int] = None, + max_response_time_in_ms: Optional[int] = None, + virtual_users: Optional[int] = None, + ramp_up_time: Optional[int] = None, + duration: Optional[int] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class PassFailCriteria(_model_base.Model): + """Pass fail criteria for a test. + + :ivar pass_fail_metrics: Map of id and pass fail metrics { id : pass fail metrics }. + :vartype pass_fail_metrics: dict[str, ~azure.developer.loadtesting.models.PassFailMetric] + :ivar pass_fail_server_metrics: Map of id and pass fail server metrics { id : pass fail + metrics }. + :vartype pass_fail_server_metrics: dict[str, + ~azure.developer.loadtesting.models.PassFailServerMetric] + """ + + pass_fail_metrics: Optional[Dict[str, "_models.PassFailMetric"]] = rest_field(name="passFailMetrics") + """Map of id and pass fail metrics { id : pass fail metrics }.""" + pass_fail_server_metrics: Optional[Dict[str, "_models.PassFailServerMetric"]] = rest_field( + name="passFailServerMetrics" + ) + """Map of id and pass fail server metrics { id : pass fail metrics }.""" + + @overload + def __init__( + self, + *, + pass_fail_metrics: Optional[Dict[str, "_models.PassFailMetric"]] = None, + pass_fail_server_metrics: Optional[Dict[str, "_models.PassFailServerMetric"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class PassFailMetric(_model_base.Model): + """Pass fail metric. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + :ivar client_metric: The client metric on which the criteria should be applied. Known values + are: "response_time_ms", "latency", "error", "requests", and "requests_per_sec". + :vartype client_metric: str or ~azure.developer.loadtesting.models.PFMetrics + :ivar aggregate: The aggregation function to be applied on the client metric. Allowed functions + + + * ‘percentage’ - for error metric , ‘avg’, percentiles like ‘p50’, ‘p90’, & so on, ‘min’, + ‘max’ - for response_time_ms and latency metric, ‘avg’ - for requests_per_sec, + ‘count’ - for requests. Known values are: "count", "percentage", "avg", "p50", "p75", "p90", + "p95", "p96", "p97", "p98", "p99", "p99.9", "p99.99", "min", and "max". + :vartype aggregate: str or ~azure.developer.loadtesting.models.PFAgFunc + :ivar condition: The comparison operator. Supported types ‘>’, ‘<’. + :vartype condition: str + :ivar request_name: Request name for which the Pass fail criteria has to be applied. + :vartype request_name: str + :ivar value: The value to compare with the client metric. Allowed values - ‘error : [0.0 , + 100.0] unit- % ’, response_time_ms and latency : any integer value unit- ms. + :vartype value: float + :ivar action: Action taken after the threshold is met. Default is ‘continue’. Known values are: + "continue" and "stop". + :vartype action: str or ~azure.developer.loadtesting.models.PFAction + :ivar actual_value: The actual value of the client metric for the test run. + :vartype actual_value: float + :ivar result: Outcome of the test run. Known values are: "passed", "undetermined", and + "failed". + :vartype result: str or ~azure.developer.loadtesting.models.PFResult + """ + + client_metric: Optional[Union[str, "_models.PFMetrics"]] = rest_field(name="clientMetric") + """The client metric on which the criteria should be applied. Known values are: + \"response_time_ms\", \"latency\", \"error\", \"requests\", and \"requests_per_sec\".""" + aggregate: Optional[Union[str, "_models.PFAgFunc"]] = rest_field() + """The aggregation function to be applied on the client metric. Allowed functions + + + * ‘percentage’ - for error metric , ‘avg’, percentiles like ‘p50’, ‘p90’, & so on, ‘min’, + ‘max’ - for response_time_ms and latency metric, ‘avg’ - for requests_per_sec, + ‘count’ - for requests. Known values are: \"count\", \"percentage\", \"avg\", \"p50\", + \"p75\", \"p90\", \"p95\", \"p96\", \"p97\", \"p98\", \"p99\", \"p99.9\", \"p99.99\", \"min\", + and \"max\".""" + condition: Optional[str] = rest_field() + """The comparison operator. Supported types ‘>’, ‘<’.""" + request_name: Optional[str] = rest_field(name="requestName") + """Request name for which the Pass fail criteria has to be applied.""" + value: Optional[float] = rest_field() + """The value to compare with the client metric. Allowed values - ‘error : [0.0 , + 100.0] unit- % ’, response_time_ms and latency : any integer value unit- ms.""" + action: Optional[Union[str, "_models.PFAction"]] = rest_field() + """Action taken after the threshold is met. Default is ‘continue’. Known values are: \"continue\" + and \"stop\".""" + actual_value: Optional[float] = rest_field(name="actualValue", visibility=["read"]) + """The actual value of the client metric for the test run.""" + result: Optional[Union[str, "_models.PFResult"]] = rest_field(visibility=["read"]) + """Outcome of the test run. Known values are: \"passed\", \"undetermined\", and \"failed\".""" + + @overload + def __init__( + self, + *, + client_metric: Optional[Union[str, "_models.PFMetrics"]] = None, + aggregate: Optional[Union[str, "_models.PFAgFunc"]] = None, + condition: Optional[str] = None, + request_name: Optional[str] = None, + value: Optional[float] = None, + action: Optional[Union[str, "_models.PFAction"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class PassFailServerMetric(_model_base.Model): + """Pass fail server metric. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar resource_id: The resource id of the resource emitting the metric. Required. + :vartype resource_id: str + :ivar metric_namespace: The server metric namespace. Required. + :vartype metric_namespace: str + :ivar metric_name: The server metric name. Required. + :vartype metric_name: str + :ivar aggregation: Aggregation Type. Required. + :vartype aggregation: str + :ivar condition: The comparison operator. Supported types ‘>’, ‘<’. Required. + :vartype condition: str + :ivar value: The value to compare with the server metric. Required. + :vartype value: float + :ivar action: Action taken after the threshold is met. Default is ‘continue’. Known values are: + "continue" and "stop". + :vartype action: str or ~azure.developer.loadtesting.models.PFAction + :ivar actual_value: The actual value of the server metric. + :vartype actual_value: float + :ivar result: Outcome of the test run. Known values are: "passed", "undetermined", and + "failed". + :vartype result: str or ~azure.developer.loadtesting.models.PFResult + """ + + resource_id: str = rest_field(name="resourceId") + """The resource id of the resource emitting the metric. Required.""" + metric_namespace: str = rest_field(name="metricNamespace") + """The server metric namespace. Required.""" + metric_name: str = rest_field(name="metricName") + """The server metric name. Required.""" + aggregation: str = rest_field() + """Aggregation Type. Required.""" + condition: str = rest_field() + """The comparison operator. Supported types ‘>’, ‘<’. Required.""" + value: float = rest_field() + """The value to compare with the server metric. Required.""" + action: Optional[Union[str, "_models.PFAction"]] = rest_field() + """Action taken after the threshold is met. Default is ‘continue’. Known values are: \"continue\" + and \"stop\".""" + actual_value: Optional[float] = rest_field(name="actualValue", visibility=["read"]) + """The actual value of the server metric.""" + result: Optional[Union[str, "_models.PFResult"]] = rest_field(visibility=["read"]) + """Outcome of the test run. Known values are: \"passed\", \"undetermined\", and \"failed\".""" + + @overload + def __init__( + self, + *, + resource_id: str, + metric_namespace: str, + metric_name: str, + aggregation: str, + condition: str, + value: float, + action: Optional[Union[str, "_models.PFAction"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class RegionalConfiguration(_model_base.Model): + """Region distribution configuration for the load test. + + + :ivar engine_instances: The number of engine instances to execute load test in specified + region. Supported values are in range of 1-400. Required. + :vartype engine_instances: int + :ivar region: Azure region name. + The region name should of format accepted by ARM, and should be a region supported by Azure + Load Testing. For example, East US should be passed as "eastus". + The region name must match one of the strings in the "Name" column returned from running the + "az account list-locations -o table" Azure CLI command. Required. + :vartype region: str + """ + + engine_instances: int = rest_field(name="engineInstances") + """The number of engine instances to execute load test in specified region. Supported values are + in range of 1-400. Required.""" + region: str = rest_field() + """Azure region name. + The region name should of format accepted by ARM, and should be a region supported by Azure + Load Testing. For example, East US should be passed as \"eastus\". + The region name must match one of the strings in the \"Name\" column returned from running the + \"az account list-locations -o table\" Azure CLI command. Required.""" + + @overload + def __init__( + self, + *, + engine_instances: int, + region: str, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class ResourceMetric(_model_base.Model): + """Associated metric definition for particular metrics of the azure resource ( + Refer : + https://learn.microsoft.com/en-us/rest/api/monitor/metric-definitions/list#metricdefinition). + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar id: Unique name for metric. + :vartype id: str + :ivar resource_id: Azure resource id. Required. + :vartype resource_id: str + :ivar metric_namespace: Metric name space. Required. + :vartype metric_namespace: str + :ivar display_description: Metric description. + :vartype display_description: str + :ivar name: The invariant value of metric name. Required. + :vartype name: str + :ivar aggregation: Metric aggregation. Required. + :vartype aggregation: str + :ivar unit: Metric unit. + :vartype unit: str + :ivar resource_type: Azure resource type. Required. + :vartype resource_type: str + """ + + id: Optional[str] = rest_field(visibility=["read"]) + """Unique name for metric.""" + resource_id: str = rest_field(name="resourceId") + """Azure resource id. Required.""" + metric_namespace: str = rest_field(name="metricNamespace") + """Metric name space. Required.""" + display_description: Optional[str] = rest_field(name="displayDescription") + """Metric description.""" + name: str = rest_field() + """The invariant value of metric name. Required.""" + aggregation: str = rest_field() + """Metric aggregation. Required.""" + unit: Optional[str] = rest_field() + """Metric unit.""" + resource_type: str = rest_field(name="resourceType") + """Azure resource type. Required.""" + + @overload + def __init__( + self, + *, + resource_id: str, + metric_namespace: str, + name: str, + aggregation: str, + resource_type: str, + display_description: Optional[str] = None, + unit: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class Secret(_model_base.Model): + """Secret. + + :ivar value: The value of the secret for the respective type. + :vartype value: str + :ivar type: Type of secret. Known values are: "AKV_SECRET_URI" and "SECRET_VALUE". + :vartype type: str or ~azure.developer.loadtesting.models.SecretType + """ + + value: Optional[str] = rest_field() + """The value of the secret for the respective type.""" + type: Optional[Union[str, "_models.SecretType"]] = rest_field() + """Type of secret. Known values are: \"AKV_SECRET_URI\" and \"SECRET_VALUE\".""" + + @overload + def __init__( + self, + *, + value: Optional[str] = None, + type: Optional[Union[str, "_models.SecretType"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class Test(_model_base.Model): + """Load test model. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar pass_fail_criteria: Pass fail criteria for a test. + :vartype pass_fail_criteria: ~azure.developer.loadtesting.models.PassFailCriteria + :ivar auto_stop_criteria: Auto stop criteria for a test. This will automatically stop a load + test if the error percentage is high for a certain time window. + :vartype auto_stop_criteria: ~azure.developer.loadtesting.models.AutoStopCriteria + :ivar secrets: Secrets can be stored in an Azure Key Vault or any other secret store. If the + secret is stored in an Azure Key Vault, the value should be the secret + identifier and the type should be AKV_SECRET_URI. If the secret is stored + elsewhere, the secret value should be provided directly and the type should be + SECRET_VALUE. + :vartype secrets: dict[str, ~azure.developer.loadtesting.models.Secret] + :ivar certificate: Certificates metadata. + :vartype certificate: ~azure.developer.loadtesting.models.CertificateMetadata + :ivar environment_variables: Environment variables which are defined as a set of + pairs. + :vartype environment_variables: dict[str, str] + :ivar load_test_configuration: The load test configuration. + :vartype load_test_configuration: ~azure.developer.loadtesting.models.LoadTestConfiguration + :ivar baseline_test_run_id: Id of the test run to be marked as baseline to view trends of + client-side metrics from recent test runs. + :vartype baseline_test_run_id: str + :ivar input_artifacts: The input artifacts for the test. + :vartype input_artifacts: ~azure.developer.loadtesting.models.TestInputArtifacts + :ivar test_id: Unique test identifier for the load test, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :vartype test_id: str + :ivar description: The test description. + :vartype description: str + :ivar display_name: Display name of a test. + :vartype display_name: str + :ivar subnet_id: Subnet ID on which the load test instances should run. + :vartype subnet_id: str + :ivar kind: Kind of test. Known values are: "URL", "JMX", and "Locust". + :vartype kind: str or ~azure.developer.loadtesting.models.TestKind + :ivar public_ip_disabled: Inject load test engines without deploying public IP for outbound + access. + :vartype public_ip_disabled: bool + :ivar keyvault_reference_identity_type: Type of the managed identity referencing the Key vault. + :vartype keyvault_reference_identity_type: str + :ivar keyvault_reference_identity_id: Resource Id of the managed identity referencing the Key + vault. + :vartype keyvault_reference_identity_id: str + :ivar metrics_reference_identity_type: Type of the managed identity referencing the metrics. + Known values are: "SystemAssigned" and "UserAssigned". + :vartype metrics_reference_identity_type: str or + ~azure.developer.loadtesting.models.ManagedIdentityType + :ivar metrics_reference_identity_id: Resource Id of the managed identity referencing the + metrics. + :vartype metrics_reference_identity_id: str + :ivar engine_built_in_identity_type: Type of the managed identity built in load test engines. + Known values are: "SystemAssigned" and "UserAssigned". + :vartype engine_built_in_identity_type: str or + ~azure.developer.loadtesting.models.ManagedIdentityType + :ivar engine_built_in_identity_ids: Resource Ids of the managed identity built in to load test + engines. Required if engineBuiltInIdentityType is UserAssigned. + :vartype engine_built_in_identity_ids: list[str] + :ivar created_date_time: The creation datetime(RFC 3339 literal format). + :vartype created_date_time: ~datetime.datetime + :ivar created_by: The user that created. + :vartype created_by: str + :ivar last_modified_date_time: The last Modified datetime(RFC 3339 literal format). + :vartype last_modified_date_time: ~datetime.datetime + :ivar last_modified_by: The user that last modified. + :vartype last_modified_by: str + """ + + pass_fail_criteria: Optional["_models.PassFailCriteria"] = rest_field(name="passFailCriteria") + """Pass fail criteria for a test.""" + auto_stop_criteria: Optional["_models.AutoStopCriteria"] = rest_field(name="autoStopCriteria") + """Auto stop criteria for a test. This will automatically stop a load test if the error percentage + is high for a certain time window.""" + secrets: Optional[Dict[str, "_models.Secret"]] = rest_field() + """Secrets can be stored in an Azure Key Vault or any other secret store. If the + secret is stored in an Azure Key Vault, the value should be the secret + identifier and the type should be AKV_SECRET_URI. If the secret is stored + elsewhere, the secret value should be provided directly and the type should be + SECRET_VALUE.""" + certificate: Optional["_models.CertificateMetadata"] = rest_field() + """Certificates metadata.""" + environment_variables: Optional[Dict[str, str]] = rest_field(name="environmentVariables") + """Environment variables which are defined as a set of pairs.""" + load_test_configuration: Optional["_models.LoadTestConfiguration"] = rest_field(name="loadTestConfiguration") + """The load test configuration.""" + baseline_test_run_id: Optional[str] = rest_field(name="baselineTestRunId") + """Id of the test run to be marked as baseline to view trends of client-side metrics from recent + test runs.""" + input_artifacts: Optional["_models.TestInputArtifacts"] = rest_field(name="inputArtifacts", visibility=["read"]) + """The input artifacts for the test.""" + test_id: str = rest_field(name="testId", visibility=["read"]) + """Unique test identifier for the load test, must contain only lower-case alphabetic, numeric, + underscore or hyphen characters. Required.""" + description: Optional[str] = rest_field() + """The test description.""" + display_name: Optional[str] = rest_field(name="displayName") + """Display name of a test.""" + subnet_id: Optional[str] = rest_field(name="subnetId") + """Subnet ID on which the load test instances should run.""" + kind: Optional[Union[str, "_models.TestKind"]] = rest_field() + """Kind of test. Known values are: \"URL\", \"JMX\", and \"Locust\".""" + public_ip_disabled: Optional[bool] = rest_field(name="publicIPDisabled") + """Inject load test engines without deploying public IP for outbound access.""" + keyvault_reference_identity_type: Optional[str] = rest_field(name="keyvaultReferenceIdentityType") + """Type of the managed identity referencing the Key vault.""" + keyvault_reference_identity_id: Optional[str] = rest_field(name="keyvaultReferenceIdentityId") + """Resource Id of the managed identity referencing the Key vault.""" + metrics_reference_identity_type: Optional[Union[str, "_models.ManagedIdentityType"]] = rest_field( + name="metricsReferenceIdentityType" + ) + """Type of the managed identity referencing the metrics. Known values are: \"SystemAssigned\" and + \"UserAssigned\".""" + metrics_reference_identity_id: Optional[str] = rest_field(name="metricsReferenceIdentityId") + """Resource Id of the managed identity referencing the metrics.""" + engine_built_in_identity_type: Optional[Union[str, "_models.ManagedIdentityType"]] = rest_field( + name="engineBuiltInIdentityType" + ) + """Type of the managed identity built in load test engines. Known values are: \"SystemAssigned\" + and \"UserAssigned\".""" + engine_built_in_identity_ids: Optional[List[str]] = rest_field(name="engineBuiltInIdentityIds") + """Resource Ids of the managed identity built in to load test engines. Required if + engineBuiltInIdentityType is UserAssigned.""" + created_date_time: Optional[datetime.datetime] = rest_field( + name="createdDateTime", visibility=["read"], format="rfc3339" + ) + """The creation datetime(RFC 3339 literal format).""" + created_by: Optional[str] = rest_field(name="createdBy", visibility=["read"]) + """The user that created.""" + last_modified_date_time: Optional[datetime.datetime] = rest_field( + name="lastModifiedDateTime", visibility=["read"], format="rfc3339" + ) + """The last Modified datetime(RFC 3339 literal format).""" + last_modified_by: Optional[str] = rest_field(name="lastModifiedBy", visibility=["read"]) + """The user that last modified.""" + + @overload + def __init__( # pylint: disable=too-many-locals + self, + *, + pass_fail_criteria: Optional["_models.PassFailCriteria"] = None, + auto_stop_criteria: Optional["_models.AutoStopCriteria"] = None, + secrets: Optional[Dict[str, "_models.Secret"]] = None, + certificate: Optional["_models.CertificateMetadata"] = None, + environment_variables: Optional[Dict[str, str]] = None, + load_test_configuration: Optional["_models.LoadTestConfiguration"] = None, + baseline_test_run_id: Optional[str] = None, + description: Optional[str] = None, + display_name: Optional[str] = None, + subnet_id: Optional[str] = None, + kind: Optional[Union[str, "_models.TestKind"]] = None, + public_ip_disabled: Optional[bool] = None, + keyvault_reference_identity_type: Optional[str] = None, + keyvault_reference_identity_id: Optional[str] = None, + metrics_reference_identity_type: Optional[Union[str, "_models.ManagedIdentityType"]] = None, + metrics_reference_identity_id: Optional[str] = None, + engine_built_in_identity_type: Optional[Union[str, "_models.ManagedIdentityType"]] = None, + engine_built_in_identity_ids: Optional[List[str]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestAppComponents(_model_base.Model): + """Test app components. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar components: Azure resource collection { resource id (fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}) + : resource object }. Required. + :vartype components: dict[str, ~azure.developer.loadtesting.models.AppComponent] + :ivar test_id: Test identifier. + :vartype test_id: str + :ivar created_date_time: The creation datetime(RFC 3339 literal format). + :vartype created_date_time: ~datetime.datetime + :ivar created_by: The user that created. + :vartype created_by: str + :ivar last_modified_date_time: The last Modified datetime(RFC 3339 literal format). + :vartype last_modified_date_time: ~datetime.datetime + :ivar last_modified_by: The user that last modified. + :vartype last_modified_by: str + """ + + components: Dict[str, "_models.AppComponent"] = rest_field() + """Azure resource collection { resource id (fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}) + : resource object }. Required.""" + test_id: Optional[str] = rest_field(name="testId", visibility=["read"]) + """Test identifier.""" + created_date_time: Optional[datetime.datetime] = rest_field( + name="createdDateTime", visibility=["read"], format="rfc3339" + ) + """The creation datetime(RFC 3339 literal format).""" + created_by: Optional[str] = rest_field(name="createdBy", visibility=["read"]) + """The user that created.""" + last_modified_date_time: Optional[datetime.datetime] = rest_field( + name="lastModifiedDateTime", visibility=["read"], format="rfc3339" + ) + """The last Modified datetime(RFC 3339 literal format).""" + last_modified_by: Optional[str] = rest_field(name="lastModifiedBy", visibility=["read"]) + """The user that last modified.""" + + @overload + def __init__( + self, + *, + components: Dict[str, "_models.AppComponent"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestFileInfo(_model_base.Model): + """Test file info. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar file_name: Name of the file. Required. + :vartype file_name: str + :ivar url: File URL. + :vartype url: str + :ivar file_type: File type. Known values are: "JMX_FILE", "USER_PROPERTIES", + "ADDITIONAL_ARTIFACTS", "ZIPPED_ARTIFACTS", "URL_TEST_CONFIG", and "TEST_SCRIPT". + :vartype file_type: str or ~azure.developer.loadtesting.models.FileType + :ivar expire_date_time: Expiry time of the file (RFC 3339 literal format). + :vartype expire_date_time: ~datetime.datetime + :ivar validation_status: Validation status of the file. Known values are: "NOT_VALIDATED", + "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", and + "VALIDATION_NOT_REQUIRED". + :vartype validation_status: str or ~azure.developer.loadtesting.models.FileStatus + :ivar validation_failure_details: Validation failure error details. + :vartype validation_failure_details: str + """ + + file_name: str = rest_field(name="fileName") + """Name of the file. Required.""" + url: Optional[str] = rest_field(visibility=["read"]) + """File URL.""" + file_type: Optional[Union[str, "_models.FileType"]] = rest_field(name="fileType", visibility=["read"]) + """File type. Known values are: \"JMX_FILE\", \"USER_PROPERTIES\", \"ADDITIONAL_ARTIFACTS\", + \"ZIPPED_ARTIFACTS\", \"URL_TEST_CONFIG\", and \"TEST_SCRIPT\".""" + expire_date_time: Optional[datetime.datetime] = rest_field( + name="expireDateTime", visibility=["read"], format="rfc3339" + ) + """Expiry time of the file (RFC 3339 literal format).""" + validation_status: Optional[Union[str, "_models.FileStatus"]] = rest_field( + name="validationStatus", visibility=["read"] + ) + """Validation status of the file. Known values are: \"NOT_VALIDATED\", \"VALIDATION_SUCCESS\", + \"VALIDATION_FAILURE\", \"VALIDATION_INITIATED\", and \"VALIDATION_NOT_REQUIRED\".""" + validation_failure_details: Optional[str] = rest_field(name="validationFailureDetails", visibility=["read"]) + """Validation failure error details.""" + + @overload + def __init__( + self, + *, + file_name: str, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestInputArtifacts(_model_base.Model): + """The input artifacts for the test. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + :ivar config_file_info: File info. + :vartype config_file_info: ~azure.developer.loadtesting.models.TestFileInfo + :ivar test_script_file_info: File info. + :vartype test_script_file_info: ~azure.developer.loadtesting.models.TestFileInfo + :ivar user_prop_file_info: File info. + :vartype user_prop_file_info: ~azure.developer.loadtesting.models.TestFileInfo + :ivar input_artifacts_zip_file_info: File info. + :vartype input_artifacts_zip_file_info: ~azure.developer.loadtesting.models.TestFileInfo + :ivar url_test_config_file_info: The config json file for url based test. + :vartype url_test_config_file_info: ~azure.developer.loadtesting.models.TestFileInfo + :ivar additional_file_info: Additional supported files for the test run. + :vartype additional_file_info: list[~azure.developer.loadtesting.models.TestFileInfo] + """ + + config_file_info: Optional["_models.TestFileInfo"] = rest_field(name="configFileInfo") + """File info.""" + test_script_file_info: Optional["_models.TestFileInfo"] = rest_field(name="testScriptFileInfo") + """File info.""" + user_prop_file_info: Optional["_models.TestFileInfo"] = rest_field(name="userPropFileInfo") + """File info.""" + input_artifacts_zip_file_info: Optional["_models.TestFileInfo"] = rest_field(name="inputArtifactsZipFileInfo") + """File info.""" + url_test_config_file_info: Optional["_models.TestFileInfo"] = rest_field(name="urlTestConfigFileInfo") + """The config json file for url based test.""" + additional_file_info: Optional[List["_models.TestFileInfo"]] = rest_field( + name="additionalFileInfo", visibility=["read"] + ) + """Additional supported files for the test run.""" + + @overload + def __init__( + self, + *, + config_file_info: Optional["_models.TestFileInfo"] = None, + test_script_file_info: Optional["_models.TestFileInfo"] = None, + user_prop_file_info: Optional["_models.TestFileInfo"] = None, + input_artifacts_zip_file_info: Optional["_models.TestFileInfo"] = None, + url_test_config_file_info: Optional["_models.TestFileInfo"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestProfile(_model_base.Model): + """Test Profile Model. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar test_profile_id: Unique identifier for the test profile, must contain only lower-case + alphabetic, numeric, underscore or hyphen characters. Required. + :vartype test_profile_id: str + :ivar display_name: Display name of the test profile. + :vartype display_name: str + :ivar description: Description for the test profile. + :vartype description: str + :ivar test_id: Associated test ID for the test profile. This property is required for creating + a Test Profile and it's not allowed to be updated. + :vartype test_id: str + :ivar target_resource_id: Target resource ID on which the test profile is created. This + property is required for creating a Test Profile and it's not allowed to be updated. + :vartype target_resource_id: str + :ivar target_resource_configurations: Configurations of the target resource on which testing + would be done. + :vartype target_resource_configurations: + ~azure.developer.loadtesting.models.TargetResourceConfigurations + :ivar created_date_time: The creation datetime(RFC 3339 literal format). + :vartype created_date_time: ~datetime.datetime + :ivar created_by: The user that created. + :vartype created_by: str + :ivar last_modified_date_time: The last Modified datetime(RFC 3339 literal format). + :vartype last_modified_date_time: ~datetime.datetime + :ivar last_modified_by: The user that last modified. + :vartype last_modified_by: str + """ + + test_profile_id: str = rest_field(name="testProfileId", visibility=["read"]) + """Unique identifier for the test profile, must contain only lower-case alphabetic, numeric, + underscore or hyphen characters. Required.""" + display_name: Optional[str] = rest_field(name="displayName") + """Display name of the test profile.""" + description: Optional[str] = rest_field() + """Description for the test profile.""" + test_id: Optional[str] = rest_field(name="testId", visibility=["read", "create"]) + """Associated test ID for the test profile. This property is required for creating a Test Profile + and it's not allowed to be updated.""" + target_resource_id: Optional[str] = rest_field(name="targetResourceId", visibility=["read", "create"]) + """Target resource ID on which the test profile is created. This property is required for creating + a Test Profile and it's not allowed to be updated.""" + target_resource_configurations: Optional["_models.TargetResourceConfigurations"] = rest_field( + name="targetResourceConfigurations" + ) + """Configurations of the target resource on which testing would be done.""" + created_date_time: Optional[datetime.datetime] = rest_field( + name="createdDateTime", visibility=["read"], format="rfc3339" + ) + """The creation datetime(RFC 3339 literal format).""" + created_by: Optional[str] = rest_field(name="createdBy", visibility=["read"]) + """The user that created.""" + last_modified_date_time: Optional[datetime.datetime] = rest_field( + name="lastModifiedDateTime", visibility=["read"], format="rfc3339" + ) + """The last Modified datetime(RFC 3339 literal format).""" + last_modified_by: Optional[str] = rest_field(name="lastModifiedBy", visibility=["read"]) + """The user that last modified.""" + + @overload + def __init__( + self, + *, + display_name: Optional[str] = None, + description: Optional[str] = None, + test_id: Optional[str] = None, + target_resource_id: Optional[str] = None, + target_resource_configurations: Optional["_models.TargetResourceConfigurations"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestProfileRun(_model_base.Model): + """Test Profile Run model. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar test_profile_run_id: Unique identifier for the test profile run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :vartype test_profile_run_id: str + :ivar display_name: Display name for the test profile run. + :vartype display_name: str + :ivar description: The test profile run description. + :vartype description: str + :ivar test_profile_id: Associated test profile ID for the test profile run. This is required to + create a test profile run and can't be updated. + :vartype test_profile_id: str + :ivar target_resource_id: Target resource ID on which the test profile run is created. + :vartype target_resource_id: str + :ivar target_resource_configurations: Configurations of the target resource on which the test + profile ran. + :vartype target_resource_configurations: + ~azure.developer.loadtesting.models.TargetResourceConfigurations + :ivar status: The test profile run status. Known values are: "ACCEPTED", "NOTSTARTED", + "EXECUTING", "DONE", "CANCELLING", "CANCELLED", and "FAILED". + :vartype status: str or ~azure.developer.loadtesting.models.TestProfileRunStatus + :ivar error_details: Error details if there is any failure in test profile run. These errors + are specific to the Test Profile Run. + :vartype error_details: list[~azure.developer.loadtesting.models.ErrorDetails] + :ivar start_date_time: The test profile run start DateTime(RFC 3339 literal format). + :vartype start_date_time: ~datetime.datetime + :ivar end_date_time: The test profile run end DateTime(RFC 3339 literal format). + :vartype end_date_time: ~datetime.datetime + :ivar duration_in_seconds: Test profile run duration in seconds. + :vartype duration_in_seconds: int + :ivar test_run_details: Details of the test runs ran as part of the test profile run. + Key is the testRunId of the corresponding testRun. + :vartype test_run_details: dict[str, ~azure.developer.loadtesting.models.TestRunDetail] + :ivar recommendations: Recommendations provided based on a successful test profile run. + :vartype recommendations: + list[~azure.developer.loadtesting.models.TestProfileRunRecommendation] + :ivar created_date_time: The creation datetime(RFC 3339 literal format). + :vartype created_date_time: ~datetime.datetime + :ivar created_by: The user that created. + :vartype created_by: str + :ivar last_modified_date_time: The last Modified datetime(RFC 3339 literal format). + :vartype last_modified_date_time: ~datetime.datetime + :ivar last_modified_by: The user that last modified. + :vartype last_modified_by: str + """ + + test_profile_run_id: str = rest_field(name="testProfileRunId", visibility=["read"]) + """Unique identifier for the test profile run, must contain only lower-case alphabetic, numeric, + underscore or hyphen characters. Required.""" + display_name: Optional[str] = rest_field(name="displayName") + """Display name for the test profile run.""" + description: Optional[str] = rest_field() + """The test profile run description.""" + test_profile_id: Optional[str] = rest_field(name="testProfileId", visibility=["read", "create"]) + """Associated test profile ID for the test profile run. This is required to create a test profile + run and can't be updated.""" + target_resource_id: Optional[str] = rest_field(name="targetResourceId", visibility=["read"]) + """Target resource ID on which the test profile run is created.""" + target_resource_configurations: Optional["_models.TargetResourceConfigurations"] = rest_field( + name="targetResourceConfigurations", visibility=["read"] + ) + """Configurations of the target resource on which the test profile ran.""" + status: Optional[Union[str, "_models.TestProfileRunStatus"]] = rest_field(visibility=["read"]) + """The test profile run status. Known values are: \"ACCEPTED\", \"NOTSTARTED\", \"EXECUTING\", + \"DONE\", \"CANCELLING\", \"CANCELLED\", and \"FAILED\".""" + error_details: Optional[List["_models.ErrorDetails"]] = rest_field(name="errorDetails", visibility=["read"]) + """Error details if there is any failure in test profile run. These errors are specific to the + Test Profile Run.""" + start_date_time: Optional[datetime.datetime] = rest_field( + name="startDateTime", visibility=["read"], format="rfc3339" + ) + """The test profile run start DateTime(RFC 3339 literal format).""" + end_date_time: Optional[datetime.datetime] = rest_field(name="endDateTime", visibility=["read"], format="rfc3339") + """The test profile run end DateTime(RFC 3339 literal format).""" + duration_in_seconds: Optional[int] = rest_field(name="durationInSeconds", visibility=["read"]) + """Test profile run duration in seconds.""" + test_run_details: Optional[Dict[str, "_models.TestRunDetail"]] = rest_field( + name="testRunDetails", visibility=["read"] + ) + """Details of the test runs ran as part of the test profile run. + Key is the testRunId of the corresponding testRun.""" + recommendations: Optional[List["_models.TestProfileRunRecommendation"]] = rest_field(visibility=["read"]) + """Recommendations provided based on a successful test profile run.""" + created_date_time: Optional[datetime.datetime] = rest_field( + name="createdDateTime", visibility=["read"], format="rfc3339" + ) + """The creation datetime(RFC 3339 literal format).""" + created_by: Optional[str] = rest_field(name="createdBy", visibility=["read"]) + """The user that created.""" + last_modified_date_time: Optional[datetime.datetime] = rest_field( + name="lastModifiedDateTime", visibility=["read"], format="rfc3339" + ) + """The last Modified datetime(RFC 3339 literal format).""" + last_modified_by: Optional[str] = rest_field(name="lastModifiedBy", visibility=["read"]) + """The user that last modified.""" + + @overload + def __init__( + self, + *, + display_name: Optional[str] = None, + description: Optional[str] = None, + test_profile_id: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestProfileRunRecommendation(_model_base.Model): + """A recommendation object that provides a list of configuration that optimizes its category. + + + :ivar category: Category of the recommendation. Required. Known values are: + "ThroughputOptimized" and "CostOptimized". + :vartype category: str or ~azure.developer.loadtesting.models.RecommendationCategory + :ivar configurations: List of configurations IDs for which the recommendation is applicable. + These are a subset of the provided target resource configurations. + :vartype configurations: list[str] + """ + + category: Union[str, "_models.RecommendationCategory"] = rest_field() + """Category of the recommendation. Required. Known values are: \"ThroughputOptimized\" and + \"CostOptimized\".""" + configurations: Optional[List[str]] = rest_field() + """List of configurations IDs for which the recommendation is applicable. These are a subset of + the provided target resource configurations.""" + + @overload + def __init__( + self, + *, + category: Union[str, "_models.RecommendationCategory"], + configurations: Optional[List[str]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestRun(_model_base.Model): + """Load test run model. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar test_run_id: Unique test run identifier for the load test run, must contain only + lower-case alphabetic, numeric, underscore or hyphen characters. Required. + :vartype test_run_id: str + :ivar pass_fail_criteria: Pass fail criteria for a test. + :vartype pass_fail_criteria: ~azure.developer.loadtesting.models.PassFailCriteria + :ivar auto_stop_criteria: Auto stop criteria for a test. This will automatically stop a load + test if the error percentage is high for a certain time window. + :vartype auto_stop_criteria: ~azure.developer.loadtesting.models.AutoStopCriteria + :ivar secrets: Secrets can be stored in an Azure Key Vault or any other secret store. If the + secret is stored in an Azure Key Vault, the value should be the secret + identifier and the type should be AKV_SECRET_URI. If the secret is stored + elsewhere, the secret value should be provided directly and the type should be + SECRET_VALUE. + :vartype secrets: dict[str, ~azure.developer.loadtesting.models.Secret] + :ivar certificate: Certificates metadata. + :vartype certificate: ~azure.developer.loadtesting.models.CertificateMetadata + :ivar environment_variables: Environment variables which are defined as a set of + pairs. + :vartype environment_variables: dict[str, str] + :ivar error_details: Error details if there is any failure in load test run. + :vartype error_details: list[~azure.developer.loadtesting.models.ErrorDetails] + :ivar test_run_statistics: Test run statistics. Key is the sampler name and value is the set of + statistics for performance metrics like response time, throughput, etc. from the load test run. + The sampler name is the same as the name mentioned in the test script. + Sampler name "Total" represents the aggregated statistics of all the samplers. + :vartype test_run_statistics: dict[str, ~azure.developer.loadtesting.models.TestRunStatistics] + :ivar regional_statistics: Regional statistics. Key is the Azure region name and value is the + test run statistics. + The region name should of format accepted by ARM, and should be a region supported by Azure + Load Testing. For example, East US should be passed as "eastus". + The region name must match one of the strings in the "Name" column returned from running the + "az account list-locations -o table" Azure CLI command. + :vartype regional_statistics: dict[str, ~azure.developer.loadtesting.models.TestRunStatistics] + :ivar load_test_configuration: The load test configuration. + :vartype load_test_configuration: ~azure.developer.loadtesting.models.LoadTestConfiguration + :ivar test_artifacts: Collection of test run artifacts. + :vartype test_artifacts: ~azure.developer.loadtesting.models.TestRunArtifacts + :ivar test_result: Test result for pass/Fail criteria used during the test run. Known values + are: "PASSED", "NOT_APPLICABLE", and "FAILED". + :vartype test_result: str or ~azure.developer.loadtesting.models.PFTestResult + :ivar virtual_users: Number of virtual users, for which test has been run. + :vartype virtual_users: int + :ivar display_name: Display name of a testRun. + :vartype display_name: str + :ivar test_id: Associated test Id. + :vartype test_id: str + :ivar description: The test run description. + :vartype description: str + :ivar status: The test run status. Known values are: "ACCEPTED", "NOTSTARTED", "PROVISIONING", + "PROVISIONED", "CONFIGURING", "CONFIGURED", "EXECUTING", "EXECUTED", "DEPROVISIONING", + "DEPROVISIONED", "DONE", "CANCELLING", "CANCELLED", "FAILED", "VALIDATION_SUCCESS", and + "VALIDATION_FAILURE". + :vartype status: str or ~azure.developer.loadtesting.models.Status + :ivar start_date_time: The test run start DateTime(RFC 3339 literal format). + :vartype start_date_time: ~datetime.datetime + :ivar end_date_time: The test run end DateTime(RFC 3339 literal format). + :vartype end_date_time: ~datetime.datetime + :ivar executed_date_time: Test run initiated time. + :vartype executed_date_time: ~datetime.datetime + :ivar portal_url: Portal url. + :vartype portal_url: str + :ivar duration: Test run duration in milliseconds. + :vartype duration: int + :ivar virtual_user_hours: Virtual user hours consumed by the test run. + :vartype virtual_user_hours: float + :ivar subnet_id: Subnet ID on which the load test instances should run. + :vartype subnet_id: str + :ivar kind: Type of test. Known values are: "URL", "JMX", and "Locust". + :vartype kind: str or ~azure.developer.loadtesting.models.TestKind + :ivar request_data_level: Request data collection level for test run. Known values are: "NONE" + and "ERRORS". + :vartype request_data_level: str or ~azure.developer.loadtesting.models.RequestDataLevel + :ivar debug_logs_enabled: Enable or disable debug level logging. True if debug logs are enabled + for the test run. False otherwise. + :vartype debug_logs_enabled: bool + :ivar public_ip_disabled: Inject load test engines without deploying public IP for outbound + access. + :vartype public_ip_disabled: bool + :ivar created_by_type: The type of the entity that created the test run. (E.x. User, + ScheduleTrigger, etc). Known values are: "User" and "ScheduledTrigger". + :vartype created_by_type: str or ~azure.developer.loadtesting.models.CreateByTypes + :ivar created_date_time: The creation datetime(RFC 3339 literal format). + :vartype created_date_time: ~datetime.datetime + :ivar created_by: The user that created. + :vartype created_by: str + :ivar last_modified_date_time: The last Modified datetime(RFC 3339 literal format). + :vartype last_modified_date_time: ~datetime.datetime + :ivar last_modified_by: The user that last modified. + :vartype last_modified_by: str + """ + + test_run_id: str = rest_field(name="testRunId", visibility=["read"]) + """Unique test run identifier for the load test run, must contain only lower-case alphabetic, + numeric, underscore or hyphen characters. Required.""" + pass_fail_criteria: Optional["_models.PassFailCriteria"] = rest_field(name="passFailCriteria") + """Pass fail criteria for a test.""" + auto_stop_criteria: Optional["_models.AutoStopCriteria"] = rest_field(name="autoStopCriteria") + """Auto stop criteria for a test. This will automatically stop a load test if the error percentage + is high for a certain time window.""" + secrets: Optional[Dict[str, "_models.Secret"]] = rest_field() + """Secrets can be stored in an Azure Key Vault or any other secret store. If the + secret is stored in an Azure Key Vault, the value should be the secret + identifier and the type should be AKV_SECRET_URI. If the secret is stored + elsewhere, the secret value should be provided directly and the type should be + SECRET_VALUE.""" + certificate: Optional["_models.CertificateMetadata"] = rest_field() + """Certificates metadata.""" + environment_variables: Optional[Dict[str, str]] = rest_field(name="environmentVariables") + """Environment variables which are defined as a set of pairs.""" + error_details: Optional[List["_models.ErrorDetails"]] = rest_field(name="errorDetails", visibility=["read"]) + """Error details if there is any failure in load test run.""" + test_run_statistics: Optional[Dict[str, "_models.TestRunStatistics"]] = rest_field( + name="testRunStatistics", visibility=["read"] + ) + """Test run statistics. Key is the sampler name and value is the set of statistics for performance + metrics like response time, throughput, etc. from the load test run. + The sampler name is the same as the name mentioned in the test script. + Sampler name \"Total\" represents the aggregated statistics of all the samplers.""" + regional_statistics: Optional[Dict[str, "_models.TestRunStatistics"]] = rest_field( + name="regionalStatistics", visibility=["read"] + ) + """Regional statistics. Key is the Azure region name and value is the test run statistics. + The region name should of format accepted by ARM, and should be a region supported by Azure + Load Testing. For example, East US should be passed as \"eastus\". + The region name must match one of the strings in the \"Name\" column returned from running the + \"az account list-locations -o table\" Azure CLI command.""" + load_test_configuration: Optional["_models.LoadTestConfiguration"] = rest_field(name="loadTestConfiguration") + """The load test configuration.""" + test_artifacts: Optional["_models.TestRunArtifacts"] = rest_field(name="testArtifacts", visibility=["read"]) + """Collection of test run artifacts.""" + test_result: Optional[Union[str, "_models.PFTestResult"]] = rest_field(name="testResult", visibility=["read"]) + """Test result for pass/Fail criteria used during the test run. Known values are: \"PASSED\", + \"NOT_APPLICABLE\", and \"FAILED\".""" + virtual_users: Optional[int] = rest_field(name="virtualUsers", visibility=["read"]) + """Number of virtual users, for which test has been run.""" + display_name: Optional[str] = rest_field(name="displayName") + """Display name of a testRun.""" + test_id: Optional[str] = rest_field(name="testId") + """Associated test Id.""" + description: Optional[str] = rest_field() + """The test run description.""" + status: Optional[Union[str, "_models.Status"]] = rest_field(visibility=["read"]) + """The test run status. Known values are: \"ACCEPTED\", \"NOTSTARTED\", \"PROVISIONING\", + \"PROVISIONED\", \"CONFIGURING\", \"CONFIGURED\", \"EXECUTING\", \"EXECUTED\", + \"DEPROVISIONING\", \"DEPROVISIONED\", \"DONE\", \"CANCELLING\", \"CANCELLED\", \"FAILED\", + \"VALIDATION_SUCCESS\", and \"VALIDATION_FAILURE\".""" + start_date_time: Optional[datetime.datetime] = rest_field( + name="startDateTime", visibility=["read"], format="rfc3339" + ) + """The test run start DateTime(RFC 3339 literal format).""" + end_date_time: Optional[datetime.datetime] = rest_field(name="endDateTime", visibility=["read"], format="rfc3339") + """The test run end DateTime(RFC 3339 literal format).""" + executed_date_time: Optional[datetime.datetime] = rest_field( + name="executedDateTime", visibility=["read"], format="rfc3339" + ) + """Test run initiated time.""" + portal_url: Optional[str] = rest_field(name="portalUrl", visibility=["read"]) + """Portal url.""" + duration: Optional[int] = rest_field(visibility=["read"]) + """Test run duration in milliseconds.""" + virtual_user_hours: Optional[float] = rest_field(name="virtualUserHours", visibility=["read"]) + """Virtual user hours consumed by the test run.""" + subnet_id: Optional[str] = rest_field(name="subnetId", visibility=["read"]) + """Subnet ID on which the load test instances should run.""" + kind: Optional[Union[str, "_models.TestKind"]] = rest_field(visibility=["read"]) + """Type of test. Known values are: \"URL\", \"JMX\", and \"Locust\".""" + request_data_level: Optional[Union[str, "_models.RequestDataLevel"]] = rest_field(name="requestDataLevel") + """Request data collection level for test run. Known values are: \"NONE\" and \"ERRORS\".""" + debug_logs_enabled: Optional[bool] = rest_field(name="debugLogsEnabled") + """Enable or disable debug level logging. True if debug logs are enabled for the test run. False + otherwise.""" + public_ip_disabled: Optional[bool] = rest_field(name="publicIPDisabled", visibility=["read"]) + """Inject load test engines without deploying public IP for outbound access.""" + created_by_type: Optional[Union[str, "_models.CreateByTypes"]] = rest_field(name="createdByType") + """The type of the entity that created the test run. (E.x. User, ScheduleTrigger, etc). Known + values are: \"User\" and \"ScheduledTrigger\".""" + created_date_time: Optional[datetime.datetime] = rest_field( + name="createdDateTime", visibility=["read"], format="rfc3339" + ) + """The creation datetime(RFC 3339 literal format).""" + created_by: Optional[str] = rest_field(name="createdBy", visibility=["read"]) + """The user that created.""" + last_modified_date_time: Optional[datetime.datetime] = rest_field( + name="lastModifiedDateTime", visibility=["read"], format="rfc3339" + ) + """The last Modified datetime(RFC 3339 literal format).""" + last_modified_by: Optional[str] = rest_field(name="lastModifiedBy", visibility=["read"]) + """The user that last modified.""" + + @overload + def __init__( # pylint: disable=too-many-locals + self, + *, + pass_fail_criteria: Optional["_models.PassFailCriteria"] = None, + auto_stop_criteria: Optional["_models.AutoStopCriteria"] = None, + secrets: Optional[Dict[str, "_models.Secret"]] = None, + certificate: Optional["_models.CertificateMetadata"] = None, + environment_variables: Optional[Dict[str, str]] = None, + load_test_configuration: Optional["_models.LoadTestConfiguration"] = None, + display_name: Optional[str] = None, + test_id: Optional[str] = None, + description: Optional[str] = None, + request_data_level: Optional[Union[str, "_models.RequestDataLevel"]] = None, + debug_logs_enabled: Optional[bool] = None, + created_by_type: Optional[Union[str, "_models.CreateByTypes"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestRunAppComponents(_model_base.Model): + """Test run app component. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar components: Azure resource collection { resource id (fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}) + : resource object }. Required. + :vartype components: dict[str, ~azure.developer.loadtesting.models.AppComponent] + :ivar test_run_id: Test run identifier. + :vartype test_run_id: str + :ivar created_date_time: The creation datetime(RFC 3339 literal format). + :vartype created_date_time: ~datetime.datetime + :ivar created_by: The user that created. + :vartype created_by: str + :ivar last_modified_date_time: The last Modified datetime(RFC 3339 literal format). + :vartype last_modified_date_time: ~datetime.datetime + :ivar last_modified_by: The user that last modified. + :vartype last_modified_by: str + """ + + components: Dict[str, "_models.AppComponent"] = rest_field() + """Azure resource collection { resource id (fully qualified resource Id e.g + subscriptions/{subId}/resourceGroups/{rg}/providers/Microsoft.LoadTestService/loadtests/{resName}) + : resource object }. Required.""" + test_run_id: Optional[str] = rest_field(name="testRunId", visibility=["read"]) + """Test run identifier.""" + created_date_time: Optional[datetime.datetime] = rest_field( + name="createdDateTime", visibility=["read"], format="rfc3339" + ) + """The creation datetime(RFC 3339 literal format).""" + created_by: Optional[str] = rest_field(name="createdBy", visibility=["read"]) + """The user that created.""" + last_modified_date_time: Optional[datetime.datetime] = rest_field( + name="lastModifiedDateTime", visibility=["read"], format="rfc3339" + ) + """The last Modified datetime(RFC 3339 literal format).""" + last_modified_by: Optional[str] = rest_field(name="lastModifiedBy", visibility=["read"]) + """The user that last modified.""" + + @overload + def __init__( + self, + *, + components: Dict[str, "_models.AppComponent"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestRunArtifacts(_model_base.Model): + """Collection of test run artifacts. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + :ivar input_artifacts: The input artifacts for the test run. + :vartype input_artifacts: ~azure.developer.loadtesting.models.TestRunInputArtifacts + :ivar output_artifacts: The output artifacts for the test run. + :vartype output_artifacts: ~azure.developer.loadtesting.models.TestRunOutputArtifacts + """ + + input_artifacts: Optional["_models.TestRunInputArtifacts"] = rest_field(name="inputArtifacts", visibility=["read"]) + """The input artifacts for the test run.""" + output_artifacts: Optional["_models.TestRunOutputArtifacts"] = rest_field(name="outputArtifacts") + """The output artifacts for the test run.""" + + @overload + def __init__( + self, + *, + output_artifacts: Optional["_models.TestRunOutputArtifacts"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestRunDetail(_model_base.Model): + """Details of a particular test run for a test profile run. + + + :ivar status: Status of the test run. Required. Known values are: "ACCEPTED", "NOTSTARTED", + "PROVISIONING", "PROVISIONED", "CONFIGURING", "CONFIGURED", "EXECUTING", "EXECUTED", + "DEPROVISIONING", "DEPROVISIONED", "DONE", "CANCELLING", "CANCELLED", "FAILED", + "VALIDATION_SUCCESS", and "VALIDATION_FAILURE". + :vartype status: str or ~azure.developer.loadtesting.models.Status + :ivar configuration_id: ID of the configuration on which the test ran. Required. + :vartype configuration_id: str + :ivar properties: Key value pair of extra properties associated with the test run. Required. + :vartype properties: dict[str, str] + """ + + status: Union[str, "_models.Status"] = rest_field() + """Status of the test run. Required. Known values are: \"ACCEPTED\", \"NOTSTARTED\", + \"PROVISIONING\", \"PROVISIONED\", \"CONFIGURING\", \"CONFIGURED\", \"EXECUTING\", + \"EXECUTED\", \"DEPROVISIONING\", \"DEPROVISIONED\", \"DONE\", \"CANCELLING\", \"CANCELLED\", + \"FAILED\", \"VALIDATION_SUCCESS\", and \"VALIDATION_FAILURE\".""" + configuration_id: str = rest_field(name="configurationId") + """ID of the configuration on which the test ran. Required.""" + properties: Dict[str, str] = rest_field() + """Key value pair of extra properties associated with the test run. Required.""" + + @overload + def __init__( + self, + *, + status: Union[str, "_models.Status"], + configuration_id: str, + properties: Dict[str, str], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestRunFileInfo(_model_base.Model): + """Test run file info. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar file_name: Name of the file. Required. + :vartype file_name: str + :ivar url: File URL. + :vartype url: str + :ivar file_type: File type. Known values are: "JMX_FILE", "USER_PROPERTIES", + "ADDITIONAL_ARTIFACTS", "ZIPPED_ARTIFACTS", "URL_TEST_CONFIG", and "TEST_SCRIPT". + :vartype file_type: str or ~azure.developer.loadtesting.models.FileType + :ivar expire_date_time: Expiry time of the file (RFC 3339 literal format). + :vartype expire_date_time: ~datetime.datetime + :ivar validation_status: Validation status of the file. Known values are: "NOT_VALIDATED", + "VALIDATION_SUCCESS", "VALIDATION_FAILURE", "VALIDATION_INITIATED", and + "VALIDATION_NOT_REQUIRED". + :vartype validation_status: str or ~azure.developer.loadtesting.models.FileStatus + :ivar validation_failure_details: Validation failure error details. + :vartype validation_failure_details: str + """ + + file_name: str = rest_field(name="fileName") + """Name of the file. Required.""" + url: Optional[str] = rest_field(visibility=["read"]) + """File URL.""" + file_type: Optional[Union[str, "_models.FileType"]] = rest_field(name="fileType", visibility=["read"]) + """File type. Known values are: \"JMX_FILE\", \"USER_PROPERTIES\", \"ADDITIONAL_ARTIFACTS\", + \"ZIPPED_ARTIFACTS\", \"URL_TEST_CONFIG\", and \"TEST_SCRIPT\".""" + expire_date_time: Optional[datetime.datetime] = rest_field( + name="expireDateTime", visibility=["read"], format="rfc3339" + ) + """Expiry time of the file (RFC 3339 literal format).""" + validation_status: Optional[Union[str, "_models.FileStatus"]] = rest_field( + name="validationStatus", visibility=["read"] + ) + """Validation status of the file. Known values are: \"NOT_VALIDATED\", \"VALIDATION_SUCCESS\", + \"VALIDATION_FAILURE\", \"VALIDATION_INITIATED\", and \"VALIDATION_NOT_REQUIRED\".""" + validation_failure_details: Optional[str] = rest_field(name="validationFailureDetails", visibility=["read"]) + """Validation failure error details.""" + + @overload + def __init__( + self, + *, + file_name: str, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestRunInputArtifacts(_model_base.Model): + """The input artifacts for the test run. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + :ivar config_file_info: File info. + :vartype config_file_info: ~azure.developer.loadtesting.models.TestRunFileInfo + :ivar test_script_file_info: File info. + :vartype test_script_file_info: ~azure.developer.loadtesting.models.TestRunFileInfo + :ivar user_prop_file_info: File info. + :vartype user_prop_file_info: ~azure.developer.loadtesting.models.TestRunFileInfo + :ivar input_artifacts_zip_file_info: File info. + :vartype input_artifacts_zip_file_info: ~azure.developer.loadtesting.models.TestRunFileInfo + :ivar url_test_config_file_info: The config json file for url based test. + :vartype url_test_config_file_info: ~azure.developer.loadtesting.models.TestRunFileInfo + :ivar additional_file_info: Additional supported files for the test run. + :vartype additional_file_info: list[~azure.developer.loadtesting.models.TestRunFileInfo] + """ + + config_file_info: Optional["_models.TestRunFileInfo"] = rest_field(name="configFileInfo") + """File info.""" + test_script_file_info: Optional["_models.TestRunFileInfo"] = rest_field(name="testScriptFileInfo") + """File info.""" + user_prop_file_info: Optional["_models.TestRunFileInfo"] = rest_field(name="userPropFileInfo") + """File info.""" + input_artifacts_zip_file_info: Optional["_models.TestRunFileInfo"] = rest_field(name="inputArtifactsZipFileInfo") + """File info.""" + url_test_config_file_info: Optional["_models.TestRunFileInfo"] = rest_field(name="urlTestConfigFileInfo") + """The config json file for url based test.""" + additional_file_info: Optional[List["_models.TestRunFileInfo"]] = rest_field( + name="additionalFileInfo", visibility=["read"] + ) + """Additional supported files for the test run.""" + + @overload + def __init__( + self, + *, + config_file_info: Optional["_models.TestRunFileInfo"] = None, + test_script_file_info: Optional["_models.TestRunFileInfo"] = None, + user_prop_file_info: Optional["_models.TestRunFileInfo"] = None, + input_artifacts_zip_file_info: Optional["_models.TestRunFileInfo"] = None, + url_test_config_file_info: Optional["_models.TestRunFileInfo"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestRunOutputArtifacts(_model_base.Model): + """The output artifacts for the test run. + + :ivar result_file_info: File info. + :vartype result_file_info: ~azure.developer.loadtesting.models.TestRunFileInfo + :ivar logs_file_info: File info. + :vartype logs_file_info: ~azure.developer.loadtesting.models.TestRunFileInfo + :ivar artifacts_container_info: The container for test run artifacts. + :vartype artifacts_container_info: ~azure.developer.loadtesting.models.ArtifactsContainerInfo + :ivar report_file_info: The report file for the test run. + :vartype report_file_info: ~azure.developer.loadtesting.models.TestRunFileInfo + """ + + result_file_info: Optional["_models.TestRunFileInfo"] = rest_field(name="resultFileInfo") + """File info.""" + logs_file_info: Optional["_models.TestRunFileInfo"] = rest_field(name="logsFileInfo") + """File info.""" + artifacts_container_info: Optional["_models.ArtifactsContainerInfo"] = rest_field(name="artifactsContainerInfo") + """The container for test run artifacts.""" + report_file_info: Optional["_models.TestRunFileInfo"] = rest_field(name="reportFileInfo") + """The report file for the test run.""" + + @overload + def __init__( + self, + *, + result_file_info: Optional["_models.TestRunFileInfo"] = None, + logs_file_info: Optional["_models.TestRunFileInfo"] = None, + artifacts_container_info: Optional["_models.ArtifactsContainerInfo"] = None, + report_file_info: Optional["_models.TestRunFileInfo"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestRunServerMetricConfig(_model_base.Model): + """Test run server metrics configuration. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + :ivar test_run_id: Test run identifier. + :vartype test_run_id: str + :ivar metrics: Azure resource metrics collection {metric id : metrics object} (Refer : + https://learn.microsoft.com/en-us/rest/api/monitor/metric-definitions/list#metricdefinition + for metric id). + :vartype metrics: dict[str, ~azure.developer.loadtesting.models.ResourceMetric] + :ivar created_date_time: The creation datetime(RFC 3339 literal format). + :vartype created_date_time: ~datetime.datetime + :ivar created_by: The user that created. + :vartype created_by: str + :ivar last_modified_date_time: The last Modified datetime(RFC 3339 literal format). + :vartype last_modified_date_time: ~datetime.datetime + :ivar last_modified_by: The user that last modified. + :vartype last_modified_by: str + """ + + test_run_id: Optional[str] = rest_field(name="testRunId", visibility=["read"]) + """Test run identifier.""" + metrics: Optional[Dict[str, "_models.ResourceMetric"]] = rest_field() + """Azure resource metrics collection {metric id : metrics object} (Refer : + https://learn.microsoft.com/en-us/rest/api/monitor/metric-definitions/list#metricdefinition + for metric id).""" + created_date_time: Optional[datetime.datetime] = rest_field( + name="createdDateTime", visibility=["read"], format="rfc3339" + ) + """The creation datetime(RFC 3339 literal format).""" + created_by: Optional[str] = rest_field(name="createdBy", visibility=["read"]) + """The user that created.""" + last_modified_date_time: Optional[datetime.datetime] = rest_field( + name="lastModifiedDateTime", visibility=["read"], format="rfc3339" + ) + """The last Modified datetime(RFC 3339 literal format).""" + last_modified_by: Optional[str] = rest_field(name="lastModifiedBy", visibility=["read"]) + """The user that last modified.""" + + @overload + def __init__( + self, + *, + metrics: Optional[Dict[str, "_models.ResourceMetric"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TestRunStatistics(_model_base.Model): + """Test run statistics. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + :ivar transaction: Transaction name. + :vartype transaction: str + :ivar sample_count: Sampler count. + :vartype sample_count: float + :ivar error_count: Error count. + :vartype error_count: float + :ivar error_pct: Error percentage. + :vartype error_pct: float + :ivar mean_res_time: Mean response time. + :vartype mean_res_time: float + :ivar median_res_time: Median response time. + :vartype median_res_time: float + :ivar max_res_time: Max response time. + :vartype max_res_time: float + :ivar min_res_time: Minimum response time. + :vartype min_res_time: float + :ivar pct1_res_time: 90 percentile response time. + :vartype pct1_res_time: float + :ivar pct2_res_time: 95 percentile response time. + :vartype pct2_res_time: float + :ivar pct3_res_time: 99 percentile response time. + :vartype pct3_res_time: float + :ivar pct75_res_time: 75 percentile response time. + :vartype pct75_res_time: float + :ivar pct96_res_time: 96 percentile response time. + :vartype pct96_res_time: float + :ivar pct97_res_time: 97 percentile response time. + :vartype pct97_res_time: float + :ivar pct98_res_time: 98 percentile response time. + :vartype pct98_res_time: float + :ivar pct999_res_time: 99.9 percentile response time. + :vartype pct999_res_time: float + :ivar pct9999_res_time: 99.99 percentile response time. + :vartype pct9999_res_time: float + :ivar throughput: Throughput. + :vartype throughput: float + :ivar received_k_bytes_per_sec: Received network bytes. + :vartype received_k_bytes_per_sec: float + :ivar sent_k_bytes_per_sec: Send network bytes. + :vartype sent_k_bytes_per_sec: float + """ + + transaction: Optional[str] = rest_field(visibility=["read"]) + """Transaction name.""" + sample_count: Optional[float] = rest_field(name="sampleCount", visibility=["read"]) + """Sampler count.""" + error_count: Optional[float] = rest_field(name="errorCount", visibility=["read"]) + """Error count.""" + error_pct: Optional[float] = rest_field(name="errorPct", visibility=["read"]) + """Error percentage.""" + mean_res_time: Optional[float] = rest_field(name="meanResTime", visibility=["read"]) + """Mean response time.""" + median_res_time: Optional[float] = rest_field(name="medianResTime", visibility=["read"]) + """Median response time.""" + max_res_time: Optional[float] = rest_field(name="maxResTime", visibility=["read"]) + """Max response time.""" + min_res_time: Optional[float] = rest_field(name="minResTime", visibility=["read"]) + """Minimum response time.""" + pct1_res_time: Optional[float] = rest_field(name="pct1ResTime", visibility=["read"]) + """90 percentile response time.""" + pct2_res_time: Optional[float] = rest_field(name="pct2ResTime", visibility=["read"]) + """95 percentile response time.""" + pct3_res_time: Optional[float] = rest_field(name="pct3ResTime", visibility=["read"]) + """99 percentile response time.""" + pct75_res_time: Optional[float] = rest_field(name="pct75ResTime", visibility=["read"]) + """75 percentile response time.""" + pct96_res_time: Optional[float] = rest_field(name="pct96ResTime", visibility=["read"]) + """96 percentile response time.""" + pct97_res_time: Optional[float] = rest_field(name="pct97ResTime", visibility=["read"]) + """97 percentile response time.""" + pct98_res_time: Optional[float] = rest_field(name="pct98ResTime", visibility=["read"]) + """98 percentile response time.""" + pct999_res_time: Optional[float] = rest_field(name="pct999ResTime", visibility=["read"]) + """99.9 percentile response time.""" + pct9999_res_time: Optional[float] = rest_field(name="pct9999ResTime", visibility=["read"]) + """99.99 percentile response time.""" + throughput: Optional[float] = rest_field(visibility=["read"]) + """Throughput.""" + received_k_bytes_per_sec: Optional[float] = rest_field(name="receivedKBytesPerSec", visibility=["read"]) + """Received network bytes.""" + sent_k_bytes_per_sec: Optional[float] = rest_field(name="sentKBytesPerSec", visibility=["read"]) + """Send network bytes.""" + + +class TestServerMetricConfig(_model_base.Model): + """Test server metrics configuration. + + Readonly variables are only populated by the server, and will be ignored when sending a request. + + + :ivar test_id: Test identifier. + :vartype test_id: str + :ivar metrics: Azure resource metrics collection {metric id : metrics object} (Refer : + https://learn.microsoft.com/en-us/rest/api/monitor/metric-definitions/list#metricdefinition + for metric id). Required. + :vartype metrics: dict[str, ~azure.developer.loadtesting.models.ResourceMetric] + :ivar created_date_time: The creation datetime(RFC 3339 literal format). + :vartype created_date_time: ~datetime.datetime + :ivar created_by: The user that created. + :vartype created_by: str + :ivar last_modified_date_time: The last Modified datetime(RFC 3339 literal format). + :vartype last_modified_date_time: ~datetime.datetime + :ivar last_modified_by: The user that last modified. + :vartype last_modified_by: str + """ + + test_id: Optional[str] = rest_field(name="testId", visibility=["read"]) + """Test identifier.""" + metrics: Dict[str, "_models.ResourceMetric"] = rest_field() + """Azure resource metrics collection {metric id : metrics object} (Refer : + https://learn.microsoft.com/en-us/rest/api/monitor/metric-definitions/list#metricdefinition + for metric id). Required.""" + created_date_time: Optional[datetime.datetime] = rest_field( + name="createdDateTime", visibility=["read"], format="rfc3339" + ) + """The creation datetime(RFC 3339 literal format).""" + created_by: Optional[str] = rest_field(name="createdBy", visibility=["read"]) + """The user that created.""" + last_modified_date_time: Optional[datetime.datetime] = rest_field( + name="lastModifiedDateTime", visibility=["read"], format="rfc3339" + ) + """The last Modified datetime(RFC 3339 literal format).""" + last_modified_by: Optional[str] = rest_field(name="lastModifiedBy", visibility=["read"]) + """The user that last modified.""" + + @overload + def __init__( + self, + *, + metrics: Dict[str, "_models.ResourceMetric"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class TimeSeriesElement(_model_base.Model): + """The time series returned when a data query is performed. + + :ivar data: An array of data points representing the metric values. + :vartype data: list[~azure.developer.loadtesting.models.MetricValue] + :ivar dimension_values: The dimension values. + :vartype dimension_values: list[~azure.developer.loadtesting.models.DimensionValue] + """ + + data: Optional[List["_models.MetricValue"]] = rest_field() + """An array of data points representing the metric values.""" + dimension_values: Optional[List["_models.DimensionValue"]] = rest_field(name="dimensionValues") + """The dimension values.""" + + @overload + def __init__( + self, + *, + data: Optional[List["_models.MetricValue"]] = None, + dimension_values: Optional[List["_models.DimensionValue"]] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) diff --git a/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/_patch.py b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/_patch.py new file mode 100644 index 000000000000..f7dd32510333 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/azure/developer/loadtesting/models/_patch.py @@ -0,0 +1,20 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test.py new file mode 100644 index 000000000000..bb0c36fe5ed4 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test.py @@ -0,0 +1,85 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python create_or_update_test.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.create_or_update_test( + test_id="12345678-1234-1234-1234-123456789012", + body={ + "autoStopCriteria": {"autoStopDisabled": True, "errorRate": 70, "errorRateTimeWindowInSeconds": 60}, + "description": "sample description", + "displayName": "Performance_LoadTest", + "engineBuiltInIdentityIds": [ + "/subscriptions/10000000-0000-0000-0000-000000000000/resourceGroups/samplerg1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sampleresourcename" + ], + "engineBuiltInIdentityType": "UserAssigned", + "environmentVariables": {"envvar1": "sampletext"}, + "keyvaultReferenceIdentityId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/sampleprovider/sampleresourcetype/sampleresourcename", + "keyvaultReferenceIdentityType": "UserAssigned", + "loadTestConfiguration": {"engineInstances": 6, "splitAllCSVs": True}, + "metricsReferenceIdentityId": "/subscriptions/10000000-0000-0000-0000-000000000000/resourceGroups/samplerg1/providers/Microsoft.ManagedIdentity/userAssignedIdentities/sampleresourcename", + "metricsReferenceIdentityType": "UserAssigned", + "passFailCriteria": { + "passFailMetrics": { + "fefd759d-7fe8-4f83-8b6d-aeebe0f491fe": { + "action": "continue", + "aggregate": "percentage", + "clientMetric": "response_time_ms", + "condition": ">", + "value": 20, + } + }, + "passFailServerMetrics": { + "fefd759d-7fe8-4f83-8b6d-aeebe0f491fe": { + "action": "continue", + "aggregation": "Average", + "condition": ">", + "metricName": "Percentage CPU", + "metricNamespace": "Microsoft.Compute/virtualMachines", + "resourceId": "/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyVM", + "value": 20, + } + }, + }, + "secrets": { + "secret1": { + "type": "AKV_SECRET_URI", + "value": "https://samplevault.vault.azure.net/secrets/samplesecret/f113f91fd4c44a368049849c164db827", + } + }, + "subnetId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/Microsoft.Network/virtualNetworks/samplenetworkresource/subnets/AAAAA0A0A0", + }, + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/CreateOrUpdateTest.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_app_components.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_app_components.py new file mode 100644 index 000000000000..fe04dcd90f3a --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_app_components.py @@ -0,0 +1,51 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python create_or_update_test_app_components.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.create_or_update_app_components( + test_id="ee843bd9-a6d4-4364-a45c-427a03c39fa7", + body={ + "components": { + "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appcomponentresource": { + "displayName": "Performance_LoadTest_Insights", + "kind": "web", + "resourceName": "appcomponentresource", + "resourceType": "microsoft.insights/components", + } + } + }, + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/CreateOrUpdateTestAppComponents.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_profile.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_profile.py new file mode 100644 index 000000000000..b8a790617025 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_profile.py @@ -0,0 +1,54 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python create_or_update_test_profile.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.create_or_update_test_profile( + test_profile_id="12345678-1234-1234-1234-123456789012", + body={ + "description": "sample description", + "displayName": "Performance_TestProfile", + "targetResourceConfigurations": { + "configurations": { + "config1": {"httpConcurrency": 16, "instanceMemoryMB": 2048}, + "config2": {"httpConcurrency": 16, "instanceMemoryMB": 4096}, + }, + "kind": "FunctionsFlexConsumption", + }, + "targetResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/Microsoft.Web/sites/myfunctionapp", + "testId": "12346-abcd-6789", + }, + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/CreateOrUpdateTestProfile.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_profile_run.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_profile_run.py new file mode 100644 index 000000000000..c2519277ed10 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_profile_run.py @@ -0,0 +1,46 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python create_or_update_test_profile_run.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.create_or_update_test_profile_run( + test_profile_run_id="12316678-1234-1234-1234-122451189012", + body={ + "description": "sample description", + "displayName": "Performance_TestProfile_Run1", + "testProfileId": "12345678-1234-1234-1234-123456789012", + }, + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/CreateOrUpdateTestProfileRun.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_run.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_run.py new file mode 100644 index 000000000000..ef8f59647344 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_run.py @@ -0,0 +1,79 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python create_or_update_test_run.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.begin_test_run( + test_run_id="12316678-1234-1234-1234-122451189012", + body={ + "autoStopCriteria": {"autoStopDisabled": True, "errorRate": 70, "errorRateTimeWindowInSeconds": 60}, + "debugLogsEnabled": True, + "description": "sample description", + "displayName": "Performance_LoadTest_Run1", + "environmentVariables": {"envvar1": "sampletext"}, + "loadTestConfiguration": {"engineInstances": 6, "splitAllCSVs": True}, + "passFailCriteria": { + "passFailMetrics": { + "fefd759d-7fe8-4f83-8b6d-aeebe0f491fe": { + "action": "continue", + "aggregate": "percentage", + "clientMetric": "response_time_ms", + "condition": ">", + "value": 20, + } + }, + "passFailServerMetrics": { + "fefd759d-7fe8-4f83-8b6d-aeebe0f491fe": { + "action": "continue", + "aggregation": "Average", + "condition": ">", + "metricName": "Percentage CPU", + "metricNamespace": "Microsoft.Compute/virtualMachines", + "resourceId": "/subscriptions/12345678-1234-1234-1234-123456789abc/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/MyVM", + "value": 20, + } + }, + }, + "requestDataLevel": "NONE", + "secrets": { + "secret1": { + "type": "AKV_SECRET_URI", + "value": "https://samplevault.vault.azure.net/secrets/samplesecret/f113f91fd4c44a368049849c164db827", + } + }, + "testId": "12345678-1234-1234-1234-123456789012", + }, + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/CreateOrUpdateTestRun.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_run_app_components.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_run_app_components.py new file mode 100644 index 000000000000..8674128e8549 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_run_app_components.py @@ -0,0 +1,51 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python create_or_update_test_run_app_components.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.create_or_update_app_components( + test_run_id="ee843bd9-a6d4-4364-a45c-427a03c39fa7", + body={ + "components": { + "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appcomponentresource": { + "displayName": "Performance_LoadTest_Insights", + "kind": "web", + "resourceName": "appcomponentresource", + "resourceType": "microsoft.insights/components", + } + } + }, + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/CreateOrUpdateTestRunAppComponents.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_run_server_metrics_config.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_run_server_metrics_config.py new file mode 100644 index 000000000000..7f4741881fd2 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_run_server_metrics_config.py @@ -0,0 +1,54 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python create_or_update_test_run_server_metrics_config.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.create_or_update_server_metrics_config( + test_run_id="edc6e529-d009-4b99-b763-ca492e3a2823", + body={ + "metrics": { + "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appcomponentresource/providers/microsoft.insights/metricdefinitions/requests/duration": { + "aggregation": "Average", + "displayDescription": "sample description", + "metricNamespace": "microsoft.insights/components", + "name": "requests/duration", + "resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appcomponentresource", + "resourceType": "microsoft.insights/components", + "unit": None, + } + } + }, + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/CreateOrUpdateTestRunServerMetricsConfig.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_server_metrics_config.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_server_metrics_config.py new file mode 100644 index 000000000000..2bb29d9944ad --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/create_or_update_test_server_metrics_config.py @@ -0,0 +1,54 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python create_or_update_test_server_metrics_config.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.create_or_update_server_metrics_config( + test_id="edc6e529-d009-4b99-b763-ca492e3a2823", + body={ + "metrics": { + "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appcomponentresource/providers/microsoft.insights/metricdefinitions/requests/duration": { + "aggregation": "Average", + "displayDescription": "sample description", + "metricNamespace": "microsoft.insights/components", + "name": "requests/duration", + "resourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/samplerg/providers/microsoft.insights/components/appcomponentresource", + "resourceType": "microsoft.insights/components", + "unit": None, + } + } + }, + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/CreateOrUpdateTestServerMetricsConfig.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test.py new file mode 100644 index 000000000000..ea15239252f0 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test.py @@ -0,0 +1,40 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python delete_test.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + client.delete_test( + test_id="12345678-1234-1234-1234-123456789012", + ) + + +# x-ms-original-file: 2024-12-01-preview/DeleteTest.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_file.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_file.py new file mode 100644 index 000000000000..c29679a53251 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_file.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python delete_test_file.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + client.delete_test_file( + test_id="12345678-1234-1234-1234-123456789012", + file_name="app.jmx", + ) + + +# x-ms-original-file: 2024-12-01-preview/DeleteTestFile.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_profile.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_profile.py new file mode 100644 index 000000000000..0e9b84a0bc65 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_profile.py @@ -0,0 +1,40 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python delete_test_profile.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + client.delete_test_profile( + test_profile_id="12345678-1234-1234-1234-123456789012", + ) + + +# x-ms-original-file: 2024-12-01-preview/DeleteTestProfile.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_profile_run.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_profile_run.py new file mode 100644 index 000000000000..66e953e2328e --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_profile_run.py @@ -0,0 +1,40 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python delete_test_profile_run.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + client.delete_test_profile_run( + test_profile_run_id="12316678-1234-1234-1234-122451189012", + ) + + +# x-ms-original-file: 2024-12-01-preview/DeleteTestProfileRun.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_run.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_run.py new file mode 100644 index 000000000000..0c7b8824a811 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/delete_test_run.py @@ -0,0 +1,40 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python delete_test_run.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + client.delete_test_run( + test_run_id="12316678-1234-1234-1234-122451189012", + ) + + +# x-ms-original-file: 2024-12-01-preview/DeleteTestRun.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test.py new file mode 100644 index 000000000000..b3f96425935c --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python get_test.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_test( + test_id="12345678-1234-1234-1234-123456789012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/GetTest.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_file.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_file.py new file mode 100644 index 000000000000..915ca32fb4c7 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_file.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python get_test_file.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_test_file( + test_id="12345678-1234-1234-1234-123456789012", + file_name="sample.jmx", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/GetTestFile.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_profile.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_profile.py new file mode 100644 index 000000000000..1741693e1dc0 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_profile.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python get_test_profile.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_test_profile( + test_profile_id="12345678-1234-1234-1234-123456789012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/GetTestProfile.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_profile_run_executed.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_profile_run_executed.py new file mode 100644 index 000000000000..96a1b8607118 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_profile_run_executed.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python get_test_profile_run_executed.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_test_profile_run( + test_profile_run_id="12316678-1234-1234-1234-122451189012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/GetTestProfileRun_Executed.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_profile_run_executing.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_profile_run_executing.py new file mode 100644 index 000000000000..14527bd20372 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_profile_run_executing.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python get_test_profile_run_executing.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_test_profile_run( + test_profile_run_id="12316678-1234-1234-1234-122451189012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/GetTestProfileRun_Executing.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_run.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_run.py new file mode 100644 index 000000000000..0832efaa7f43 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_run.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python get_test_run.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_test_run( + test_run_id="12316678-1234-1234-1234-122451189012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/GetTestRun.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_run_file.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_run_file.py new file mode 100644 index 000000000000..73b86eaae66a --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/get_test_run_file.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python get_test_run_file.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_test_run_file( + test_run_id="12316678-1234-1234-1234-122451189012", + file_name="sample.jmx", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/GetTestRunFile.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_metric_dimension_values.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_metric_dimension_values.py new file mode 100644 index 000000000000..3934b03fc4d8 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_metric_dimension_values.py @@ -0,0 +1,45 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_metric_dimension_values.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.list_metric_dimension_values( + test_run_id="12316678-1234-1234-1234-122451189012", + name="SamplerName", + metric_name="ActiveThreads", + metric_namespace="LoadTestRunMetrics", + time_interval="2022-09-24T19:00:40Z/2022-09-25T19:28:40Z", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/ListMetricDimensionValues.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_app_components.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_app_components.py new file mode 100644 index 000000000000..0fda7a77e15a --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_app_components.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_app_components.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_app_components( + test_id="ee843bd9-a6d4-4364-a45c-427a03c39fa7", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/ListTestAppComponents.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_files.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_files.py new file mode 100644 index 000000000000..773efd436868 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_files.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_files.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.list_test_files( + test_id="12345678-1234-1234-1234-123456789012", + ) + for item in response: + print(item) + + +# x-ms-original-file: 2024-12-01-preview/ListTestFiles.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_profile_runs.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_profile_runs.py new file mode 100644 index 000000000000..f0926267ff9b --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_profile_runs.py @@ -0,0 +1,40 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_profile_runs.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.list_test_profile_runs() + for item in response: + print(item) + + +# x-ms-original-file: 2024-12-01-preview/ListTestProfileRuns.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_profiles.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_profiles.py new file mode 100644 index 000000000000..499a5d8db6d8 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_profiles.py @@ -0,0 +1,40 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_profiles.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.list_test_profiles() + for item in response: + print(item) + + +# x-ms-original-file: 2024-12-01-preview/ListTestProfiles.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_app_components.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_app_components.py new file mode 100644 index 000000000000..c09fd7224379 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_app_components.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_run_app_components.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_app_components( + test_run_id="ee843bd9-a6d4-4364-a45c-427a03c39fa7", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/ListTestRunAppComponents.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_metrics.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_metrics.py new file mode 100644 index 000000000000..8108a51bbb19 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_metrics.py @@ -0,0 +1,45 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_run_metrics.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.list_metrics( + test_run_id="12316678-1234-1234-1234-122451189012", + metric_name="ActiveThreads", + metric_namespace="LoadTestRunMetrics", + time_interval="2022-09-24T19:00:40Z/2022-09-25T19:28:40Z", + ) + for item in response: + print(item) + + +# x-ms-original-file: 2024-12-01-preview/ListTestRunMetrics.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_metrics_definitions.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_metrics_definitions.py new file mode 100644 index 000000000000..fc68dce3774c --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_metrics_definitions.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_run_metrics_definitions.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_metric_definitions( + test_run_id="12316678-1234-1234-1234-122451189012", + metric_namespace="LoadTestRunMetrics", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/ListTestRunMetricsDefinitions.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_metrics_namespaces.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_metrics_namespaces.py new file mode 100644 index 000000000000..3e80b525ba61 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_metrics_namespaces.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_run_metrics_namespaces.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_metric_namespaces( + test_run_id="12316678-1234-1234-1234-122451189012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/ListTestRunMetricsNamespaces.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_server_metrics_config.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_server_metrics_config.py new file mode 100644 index 000000000000..eead0f2f8e1d --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_run_server_metrics_config.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_run_server_metrics_config.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_server_metrics_config( + test_run_id="12345678-1234-1234-1234-123456789012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/ListTestRunServerMetricsConfig.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_runs.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_runs.py new file mode 100644 index 000000000000..bd523abe36c3 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_runs.py @@ -0,0 +1,40 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_runs.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.list_test_runs() + for item in response: + print(item) + + +# x-ms-original-file: 2024-12-01-preview/ListTestRuns.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_server_metrics_config.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_server_metrics_config.py new file mode 100644 index 000000000000..51dff2ec7cca --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_test_server_metrics_config.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_test_server_metrics_config.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.get_server_metrics_config( + test_id="12345678-1234-1234-1234-123456789012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/ListTestServerMetricsConfig.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_tests.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_tests.py new file mode 100644 index 000000000000..d97b49bcef68 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/list_tests.py @@ -0,0 +1,40 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python list_tests.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.list_tests() + for item in response: + print(item) + + +# x-ms-original-file: 2024-12-01-preview/ListTests.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/stop_test_profile_run.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/stop_test_profile_run.py new file mode 100644 index 000000000000..c67d7f0df557 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/stop_test_profile_run.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python stop_test_profile_run.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.stop_test_profile_run( + test_profile_run_id="12316678-1234-1234-1234-122451189012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/StopTestProfileRun.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/stop_test_run.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/stop_test_run.py new file mode 100644 index 000000000000..33e6a5066c42 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/stop_test_run.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python stop_test_run.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.stop_test_run( + test_run_id="12316678-1234-1234-1234-122451189012", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/StopTestRun.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_samples/upload_test_file.py b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/upload_test_file.py new file mode 100644 index 000000000000..b88d9746c34f --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_samples/upload_test_file.py @@ -0,0 +1,43 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.developer.loadtesting import LoadTestAdministrationClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-developer-loadtesting +# USAGE + python upload_test_file.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = LoadTestAdministrationClient( + endpoint="ENDPOINT", + credential=DefaultAzureCredential(), + ) + + response = client.begin_upload_test_file( + test_id="12345678-1234-1234-1234-123456789012", + file_name="sample.jmx", + body="application/octet-stream content", + ) + print(response) + + +# x-ms-original-file: 2024-12-01-preview/UploadTestFile.json +if __name__ == "__main__": + main() diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_tests/conftest.py b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/conftest.py new file mode 100644 index 000000000000..b8fa4802d749 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/conftest.py @@ -0,0 +1,86 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import os +import pytest +from dotenv import load_dotenv +from devtools_testutils import ( + test_proxy, + add_general_regex_sanitizer, + add_body_key_sanitizer, + add_header_regex_sanitizer, +) + +load_dotenv() + + +# For security, please avoid record sensitive identity information in recordings +@pytest.fixture(scope="session", autouse=True) +def add_sanitizers(test_proxy): + loadtestadministration_subscription_id = os.environ.get( + "LOADTESTADMINISTRATION_SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000" + ) + loadtestadministration_tenant_id = os.environ.get( + "LOADTESTADMINISTRATION_TENANT_ID", "00000000-0000-0000-0000-000000000000" + ) + loadtestadministration_client_id = os.environ.get( + "LOADTESTADMINISTRATION_CLIENT_ID", "00000000-0000-0000-0000-000000000000" + ) + loadtestadministration_client_secret = os.environ.get( + "LOADTESTADMINISTRATION_CLIENT_SECRET", "00000000-0000-0000-0000-000000000000" + ) + add_general_regex_sanitizer( + regex=loadtestadministration_subscription_id, value="00000000-0000-0000-0000-000000000000" + ) + add_general_regex_sanitizer(regex=loadtestadministration_tenant_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestadministration_client_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer( + regex=loadtestadministration_client_secret, value="00000000-0000-0000-0000-000000000000" + ) + + loadtestrun_subscription_id = os.environ.get("LOADTESTRUN_SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000") + loadtestrun_tenant_id = os.environ.get("LOADTESTRUN_TENANT_ID", "00000000-0000-0000-0000-000000000000") + loadtestrun_client_id = os.environ.get("LOADTESTRUN_CLIENT_ID", "00000000-0000-0000-0000-000000000000") + loadtestrun_client_secret = os.environ.get("LOADTESTRUN_CLIENT_SECRET", "00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestrun_subscription_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestrun_tenant_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestrun_client_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestrun_client_secret, value="00000000-0000-0000-0000-000000000000") + + loadtestadministration_subscription_id = os.environ.get( + "LOADTESTADMINISTRATION_SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000" + ) + loadtestadministration_tenant_id = os.environ.get( + "LOADTESTADMINISTRATION_TENANT_ID", "00000000-0000-0000-0000-000000000000" + ) + loadtestadministration_client_id = os.environ.get( + "LOADTESTADMINISTRATION_CLIENT_ID", "00000000-0000-0000-0000-000000000000" + ) + loadtestadministration_client_secret = os.environ.get( + "LOADTESTADMINISTRATION_CLIENT_SECRET", "00000000-0000-0000-0000-000000000000" + ) + add_general_regex_sanitizer( + regex=loadtestadministration_subscription_id, value="00000000-0000-0000-0000-000000000000" + ) + add_general_regex_sanitizer(regex=loadtestadministration_tenant_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestadministration_client_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer( + regex=loadtestadministration_client_secret, value="00000000-0000-0000-0000-000000000000" + ) + + loadtestrun_subscription_id = os.environ.get("LOADTESTRUN_SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000") + loadtestrun_tenant_id = os.environ.get("LOADTESTRUN_TENANT_ID", "00000000-0000-0000-0000-000000000000") + loadtestrun_client_id = os.environ.get("LOADTESTRUN_CLIENT_ID", "00000000-0000-0000-0000-000000000000") + loadtestrun_client_secret = os.environ.get("LOADTESTRUN_CLIENT_SECRET", "00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestrun_subscription_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestrun_tenant_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestrun_client_id, value="00000000-0000-0000-0000-000000000000") + add_general_regex_sanitizer(regex=loadtestrun_client_secret, value="00000000-0000-0000-0000-000000000000") + + add_header_regex_sanitizer(key="Set-Cookie", value="[set-cookie;]") + add_header_regex_sanitizer(key="Cookie", value="cookie;") + add_body_key_sanitizer(json_path="$..access_token", value="access_token") diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_administration.py b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_administration.py new file mode 100644 index 000000000000..73e763854e50 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_administration.py @@ -0,0 +1,67 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from devtools_testutils import recorded_by_proxy +from testpreparer import LoadTestAdministrationClientTestBase, LoadTestAdministrationPreparer + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestLoadTestAdministration(LoadTestAdministrationClientTestBase): + @LoadTestAdministrationPreparer() + @recorded_by_proxy + def test_create_or_update_test_profile(self, loadtestadministration_endpoint): + client = self.create_client(endpoint=loadtestadministration_endpoint) + response = client.create_or_update_test_profile( + test_profile_id="str", + body={ + "testProfileId": "str", + "createdBy": "str", + "createdDateTime": "2020-02-20 00:00:00", + "description": "str", + "displayName": "str", + "lastModifiedBy": "str", + "lastModifiedDateTime": "2020-02-20 00:00:00", + "targetResourceConfigurations": "target_resource_configurations", + "targetResourceId": "str", + "testId": "str", + }, + ) + + # please add some check logic here by yourself + # ... + + @LoadTestAdministrationPreparer() + @recorded_by_proxy + def test_delete_test_profile(self, loadtestadministration_endpoint): + client = self.create_client(endpoint=loadtestadministration_endpoint) + response = client.delete_test_profile( + test_profile_id="str", + ) + + # please add some check logic here by yourself + # ... + + @LoadTestAdministrationPreparer() + @recorded_by_proxy + def test_get_test_profile(self, loadtestadministration_endpoint): + client = self.create_client(endpoint=loadtestadministration_endpoint) + response = client.get_test_profile( + test_profile_id="str", + ) + + # please add some check logic here by yourself + # ... + + @LoadTestAdministrationPreparer() + @recorded_by_proxy + def test_list_test_profiles(self, loadtestadministration_endpoint): + client = self.create_client(endpoint=loadtestadministration_endpoint) + response = client.list_test_profiles() + result = [r for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_administration_async.py b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_administration_async.py new file mode 100644 index 000000000000..4a7314c322b1 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_administration_async.py @@ -0,0 +1,68 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from devtools_testutils.aio import recorded_by_proxy_async +from testpreparer import LoadTestAdministrationPreparer +from testpreparer_async import LoadTestAdministrationClientTestBaseAsync + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestLoadTestAdministrationAsync(LoadTestAdministrationClientTestBaseAsync): + @LoadTestAdministrationPreparer() + @recorded_by_proxy_async + async def test_create_or_update_test_profile(self, loadtestadministration_endpoint): + client = self.create_async_client(endpoint=loadtestadministration_endpoint) + response = await client.create_or_update_test_profile( + test_profile_id="str", + body={ + "testProfileId": "str", + "createdBy": "str", + "createdDateTime": "2020-02-20 00:00:00", + "description": "str", + "displayName": "str", + "lastModifiedBy": "str", + "lastModifiedDateTime": "2020-02-20 00:00:00", + "targetResourceConfigurations": "target_resource_configurations", + "targetResourceId": "str", + "testId": "str", + }, + ) + + # please add some check logic here by yourself + # ... + + @LoadTestAdministrationPreparer() + @recorded_by_proxy_async + async def test_delete_test_profile(self, loadtestadministration_endpoint): + client = self.create_async_client(endpoint=loadtestadministration_endpoint) + response = await client.delete_test_profile( + test_profile_id="str", + ) + + # please add some check logic here by yourself + # ... + + @LoadTestAdministrationPreparer() + @recorded_by_proxy_async + async def test_get_test_profile(self, loadtestadministration_endpoint): + client = self.create_async_client(endpoint=loadtestadministration_endpoint) + response = await client.get_test_profile( + test_profile_id="str", + ) + + # please add some check logic here by yourself + # ... + + @LoadTestAdministrationPreparer() + @recorded_by_proxy_async + async def test_list_test_profiles(self, loadtestadministration_endpoint): + client = self.create_async_client(endpoint=loadtestadministration_endpoint) + response = client.list_test_profiles() + result = [r async for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_run.py b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_run.py new file mode 100644 index 000000000000..4c03a37dcf45 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_run.py @@ -0,0 +1,85 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from devtools_testutils import recorded_by_proxy +from testpreparer import LoadTestRunClientTestBase, LoadTestRunPreparer + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestLoadTestRun(LoadTestRunClientTestBase): + @LoadTestRunPreparer() + @recorded_by_proxy + def test_create_or_update_test_profile_run(self, loadtestrun_endpoint): + client = self.create_client(endpoint=loadtestrun_endpoint) + response = client.create_or_update_test_profile_run( + test_profile_run_id="str", + body={ + "testProfileRunId": "str", + "createdBy": "str", + "createdDateTime": "2020-02-20 00:00:00", + "description": "str", + "displayName": "str", + "durationInSeconds": 0, + "endDateTime": "2020-02-20 00:00:00", + "errorDetails": [{"message": "str"}], + "lastModifiedBy": "str", + "lastModifiedDateTime": "2020-02-20 00:00:00", + "recommendations": [{"category": "str", "configurations": ["str"]}], + "startDateTime": "2020-02-20 00:00:00", + "status": "str", + "targetResourceConfigurations": "target_resource_configurations", + "targetResourceId": "str", + "testProfileId": "str", + "testRunDetails": {"str": {"configurationId": "str", "properties": {"str": "str"}, "status": "str"}}, + }, + ) + + # please add some check logic here by yourself + # ... + + @LoadTestRunPreparer() + @recorded_by_proxy + def test_delete_test_profile_run(self, loadtestrun_endpoint): + client = self.create_client(endpoint=loadtestrun_endpoint) + response = client.delete_test_profile_run( + test_profile_run_id="str", + ) + + # please add some check logic here by yourself + # ... + + @LoadTestRunPreparer() + @recorded_by_proxy + def test_get_test_profile_run(self, loadtestrun_endpoint): + client = self.create_client(endpoint=loadtestrun_endpoint) + response = client.get_test_profile_run( + test_profile_run_id="str", + ) + + # please add some check logic here by yourself + # ... + + @LoadTestRunPreparer() + @recorded_by_proxy + def test_list_test_profile_runs(self, loadtestrun_endpoint): + client = self.create_client(endpoint=loadtestrun_endpoint) + response = client.list_test_profile_runs() + result = [r for r in response] + # please add some check logic here by yourself + # ... + + @LoadTestRunPreparer() + @recorded_by_proxy + def test_stop_test_profile_run(self, loadtestrun_endpoint): + client = self.create_client(endpoint=loadtestrun_endpoint) + response = client.stop_test_profile_run( + test_profile_run_id="str", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_run_async.py b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_run_async.py new file mode 100644 index 000000000000..879b3ab332d8 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/test_load_test_run_async.py @@ -0,0 +1,86 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from devtools_testutils.aio import recorded_by_proxy_async +from testpreparer import LoadTestRunPreparer +from testpreparer_async import LoadTestRunClientTestBaseAsync + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestLoadTestRunAsync(LoadTestRunClientTestBaseAsync): + @LoadTestRunPreparer() + @recorded_by_proxy_async + async def test_create_or_update_test_profile_run(self, loadtestrun_endpoint): + client = self.create_async_client(endpoint=loadtestrun_endpoint) + response = await client.create_or_update_test_profile_run( + test_profile_run_id="str", + body={ + "testProfileRunId": "str", + "createdBy": "str", + "createdDateTime": "2020-02-20 00:00:00", + "description": "str", + "displayName": "str", + "durationInSeconds": 0, + "endDateTime": "2020-02-20 00:00:00", + "errorDetails": [{"message": "str"}], + "lastModifiedBy": "str", + "lastModifiedDateTime": "2020-02-20 00:00:00", + "recommendations": [{"category": "str", "configurations": ["str"]}], + "startDateTime": "2020-02-20 00:00:00", + "status": "str", + "targetResourceConfigurations": "target_resource_configurations", + "targetResourceId": "str", + "testProfileId": "str", + "testRunDetails": {"str": {"configurationId": "str", "properties": {"str": "str"}, "status": "str"}}, + }, + ) + + # please add some check logic here by yourself + # ... + + @LoadTestRunPreparer() + @recorded_by_proxy_async + async def test_delete_test_profile_run(self, loadtestrun_endpoint): + client = self.create_async_client(endpoint=loadtestrun_endpoint) + response = await client.delete_test_profile_run( + test_profile_run_id="str", + ) + + # please add some check logic here by yourself + # ... + + @LoadTestRunPreparer() + @recorded_by_proxy_async + async def test_get_test_profile_run(self, loadtestrun_endpoint): + client = self.create_async_client(endpoint=loadtestrun_endpoint) + response = await client.get_test_profile_run( + test_profile_run_id="str", + ) + + # please add some check logic here by yourself + # ... + + @LoadTestRunPreparer() + @recorded_by_proxy_async + async def test_list_test_profile_runs(self, loadtestrun_endpoint): + client = self.create_async_client(endpoint=loadtestrun_endpoint) + response = client.list_test_profile_runs() + result = [r async for r in response] + # please add some check logic here by yourself + # ... + + @LoadTestRunPreparer() + @recorded_by_proxy_async + async def test_stop_test_profile_run(self, loadtestrun_endpoint): + client = self.create_async_client(endpoint=loadtestrun_endpoint) + response = await client.stop_test_profile_run( + test_profile_run_id="str", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_tests/testpreparer.py b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/testpreparer.py new file mode 100644 index 000000000000..1bd789626e17 --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/testpreparer.py @@ -0,0 +1,78 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from azure.developer.loadtesting import LoadTestAdministrationClient, LoadTestRunClient +from devtools_testutils import AzureRecordedTestCase, PowerShellPreparer +import functools + + +class LoadTestAdministrationClientTestBase(AzureRecordedTestCase): + + def create_client(self, endpoint): + credential = self.get_credential(LoadTestAdministrationClient) + return self.create_client_from_credential( + LoadTestAdministrationClient, + credential=credential, + endpoint=endpoint, + ) + + +LoadTestAdministrationPreparer = functools.partial( + PowerShellPreparer, + "loadtestadministration", + loadtestadministration_endpoint="https://fake_loadtestadministration_endpoint.com", +) + + +class LoadTestRunClientTestBase(AzureRecordedTestCase): + + def create_client(self, endpoint): + credential = self.get_credential(LoadTestRunClient) + return self.create_client_from_credential( + LoadTestRunClient, + credential=credential, + endpoint=endpoint, + ) + + +LoadTestRunPreparer = functools.partial( + PowerShellPreparer, "loadtestrun", loadtestrun_endpoint="https://fake_loadtestrun_endpoint.com" +) + + +class LoadTestAdministrationClientTestBase(AzureRecordedTestCase): + + def create_client(self, endpoint): + credential = self.get_credential(LoadTestAdministrationClient) + return self.create_client_from_credential( + LoadTestAdministrationClient, + credential=credential, + endpoint=endpoint, + ) + + +LoadTestAdministrationPreparer = functools.partial( + PowerShellPreparer, + "loadtestadministration", + loadtestadministration_endpoint="https://fake_loadtestadministration_endpoint.com", +) + + +class LoadTestRunClientTestBase(AzureRecordedTestCase): + + def create_client(self, endpoint): + credential = self.get_credential(LoadTestRunClient) + return self.create_client_from_credential( + LoadTestRunClient, + credential=credential, + endpoint=endpoint, + ) + + +LoadTestRunPreparer = functools.partial( + PowerShellPreparer, "loadtestrun", loadtestrun_endpoint="https://fake_loadtestrun_endpoint.com" +) diff --git a/sdk/loadtesting/azure-developer-loadtesting/generated_tests/testpreparer_async.py b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/testpreparer_async.py new file mode 100644 index 000000000000..e2741000c48e --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/generated_tests/testpreparer_async.py @@ -0,0 +1,53 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from azure.developer.loadtesting.aio import LoadTestAdministrationClient, LoadTestRunClient +from devtools_testutils import AzureRecordedTestCase + + +class LoadTestAdministrationClientTestBaseAsync(AzureRecordedTestCase): + + def create_async_client(self, endpoint): + credential = self.get_credential(LoadTestAdministrationClient, is_async=True) + return self.create_client_from_credential( + LoadTestAdministrationClient, + credential=credential, + endpoint=endpoint, + ) + + +class LoadTestRunClientTestBaseAsync(AzureRecordedTestCase): + + def create_async_client(self, endpoint): + credential = self.get_credential(LoadTestRunClient, is_async=True) + return self.create_client_from_credential( + LoadTestRunClient, + credential=credential, + endpoint=endpoint, + ) + + +class LoadTestAdministrationClientTestBaseAsync(AzureRecordedTestCase): + + def create_async_client(self, endpoint): + credential = self.get_credential(LoadTestAdministrationClient, is_async=True) + return self.create_client_from_credential( + LoadTestAdministrationClient, + credential=credential, + endpoint=endpoint, + ) + + +class LoadTestRunClientTestBaseAsync(AzureRecordedTestCase): + + def create_async_client(self, endpoint): + credential = self.get_credential(LoadTestRunClient, is_async=True) + return self.create_client_from_credential( + LoadTestRunClient, + credential=credential, + endpoint=endpoint, + ) diff --git a/sdk/loadtesting/azure-developer-loadtesting/samples/begin_test_run.py b/sdk/loadtesting/azure-developer-loadtesting/samples/begin_test_run.py index f1a34f455b4e..516c22a682b8 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/samples/begin_test_run.py +++ b/sdk/loadtesting/azure-developer-loadtesting/samples/begin_test_run.py @@ -42,10 +42,10 @@ { "testId": TEST_ID, "displayName": "My New Load Test Run", - } + }, ) -#waiting for test run status to be completed with timeout = 3600 seconds +# waiting for test run status to be completed with timeout = 3600 seconds result = testRunPoller.result(3600) print(result["status"]) diff --git a/sdk/loadtesting/azure-developer-loadtesting/samples/create_or_update_test_function.py b/sdk/loadtesting/azure-developer-loadtesting/samples/create_or_update_test_function.py index 968373f5e794..231899a5e9d5 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/samples/create_or_update_test_function.py +++ b/sdk/loadtesting/azure-developer-loadtesting/samples/create_or_update_test_function.py @@ -48,37 +48,25 @@ }, "passFailCriteria": { "passFailMetrics": { - "condition1": { - "clientmetric": "response_time_ms", - "aggregate": "avg", - "condition": ">", - "value": 300 - }, - "condition2": { - "clientmetric": "error", - "aggregate": "percentage", - "condition": ">", - "value": 50 - }, + "condition1": {"clientmetric": "response_time_ms", "aggregate": "avg", "condition": ">", "value": 300}, + "condition2": {"clientmetric": "error", "aggregate": "percentage", "condition": ">", "value": 50}, "condition3": { "clientmetric": "latency", "aggregate": "avg", "condition": ">", "value": 200, - "requestName": "GetCustomerDetails" - } + "requestName": "GetCustomerDetails", + }, } }, "secrets": { "secret1": { "value": "https://sdk-testing-keyvault.vault.azure.net/secrets/sdk-secret", - "type": "AKV_SECRET_URI" + "type": "AKV_SECRET_URI", } }, - "environmentVariables": { - "my-varaible": "value" - } - } + "environmentVariables": {"my-varaible": "value"}, + }, ) print(result) diff --git a/sdk/loadtesting/azure-developer-loadtesting/samples/get_metrics.py b/sdk/loadtesting/azure-developer-loadtesting/samples/get_metrics.py index 0a6fb452426e..69f781d231fb 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/samples/get_metrics.py +++ b/sdk/loadtesting/azure-developer-loadtesting/samples/get_metrics.py @@ -56,7 +56,7 @@ TEST_RUN_ID, metric_name=metric_definitions["value"][0]["name"], metric_namespace=metric_namespaces["value"][0]["name"], - time_interval=test_run_response["startDateTime"]+"/"+test_run_response["endDateTime"] + time_interval=test_run_response["startDateTime"] + "/" + test_run_response["endDateTime"], ) for page in metrics.by_page(): diff --git a/sdk/loadtesting/azure-developer-loadtesting/setup.py b/sdk/loadtesting/azure-developer-loadtesting/setup.py index efe061bdca5c..0d0752f9040b 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/setup.py +++ b/sdk/loadtesting/azure-developer-loadtesting/setup.py @@ -2,7 +2,7 @@ # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. -# Code generated by Microsoft (R) AutoRest Code Generator. +# Code generated by Microsoft (R) Python Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- # coding: utf-8 @@ -13,7 +13,7 @@ PACKAGE_NAME = "azure-developer-loadtesting" -PACKAGE_PPRINT_NAME = "Azure Developer LoadTesting" +PACKAGE_PPRINT_NAME = "Azure Developer Loadtesting" # a-b-c => a/b/c package_folder_path = PACKAGE_NAME.replace("-", "/") @@ -29,7 +29,7 @@ setup( name=PACKAGE_NAME, version=version, - description="Microsoft Azure Developer LoadTesting Client Library for Python", + description="Microsoft {} Client Library for Python".format(PACKAGE_PPRINT_NAME), long_description=open("README.md", "r").read(), long_description_content_type="text/markdown", license="MIT License", @@ -38,15 +38,15 @@ url="https://github.com/Azure/azure-sdk-for-python/tree/main/sdk", keywords="azure, azure sdk", classifiers=[ - "Development Status :: 5 - Production/Stable", + "Development Status :: 4 - Beta", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "License :: OSI Approved :: MIT License", ], zip_safe=False, @@ -60,12 +60,12 @@ ), include_package_data=True, package_data={ - "pytyped": ["py.typed"], + "azure.developer.loadtesting": ["py.typed"], }, install_requires=[ - "isodate<1.0.0,>=0.6.1", - "azure-core<2.0.0,>=1.24.0", - "typing-extensions>=4.3.0; python_version<'3.8.0'", + "isodate>=0.6.1", + "azure-core>=1.30.0", + "typing-extensions>=4.6.0", ], - python_requires=">=3.7", + python_requires=">=3.8", ) diff --git a/sdk/loadtesting/azure-developer-loadtesting/tests/conftest.py b/sdk/loadtesting/azure-developer-loadtesting/tests/conftest.py index b8c81835777c..65b0a4c7af53 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/tests/conftest.py +++ b/sdk/loadtesting/azure-developer-loadtesting/tests/conftest.py @@ -30,10 +30,16 @@ from dotenv import load_dotenv -from devtools_testutils import test_proxy, add_general_regex_sanitizer, add_body_key_sanitizer, add_header_regex_sanitizer +from devtools_testutils import ( + test_proxy, + add_general_regex_sanitizer, + add_body_key_sanitizer, + add_header_regex_sanitizer, +) load_dotenv() + @pytest.fixture(scope="session", autouse=True) def add_sanitizers(test_proxy): subscription_id = os.environ.get("LOADTESTING_SUBSCRIPTION_ID", "00000000-0000-0000-0000-000000000000") diff --git a/sdk/loadtesting/azure-developer-loadtesting/tests/test_admin_ops.py b/sdk/loadtesting/azure-developer-loadtesting/tests/test_admin_ops.py index b79e97d3be18..bd3111634bbd 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/tests/test_admin_ops.py +++ b/sdk/loadtesting/azure-developer-loadtesting/tests/test_admin_ops.py @@ -15,6 +15,8 @@ DISPLAY_NAME = "TestingResourcePyTest" NON_EXISTING_RESOURCE = "nonexistingresource" + + class TestLoadTestAdministrationClient(LoadtestingTest): def setup_create_load_test(self, endpoint): @@ -36,13 +38,17 @@ def setup_create_load_test(self, endpoint): "passFailCriteria": {"passFailMetrics": {}}, "keyvaultReferenceIdentityType": "SystemAssigned", "keyvaultReferenceIdentityId": None, - } + }, ) def setup_upload_test_file(self, endpoint): client = self.create_administration_client(endpoint) self.setup_file_name = "sample.jmx" - client.begin_upload_test_file(self.setup_load_test_id, "sample.jmx", open(os.path.join(Path(__file__).resolve().parent, "sample.jmx"), "rb")) + client.begin_upload_test_file( + self.setup_load_test_id, + "sample.jmx", + open(os.path.join(Path(__file__).resolve().parent, "sample.jmx"), "rb"), + ) def setup_app_components(self, endpoint, resource_id): client = self.create_administration_client(endpoint) @@ -60,6 +66,7 @@ def setup_app_components(self, endpoint, resource_id): }, }, ) + @LoadtestingPowerShellPreparer() @recorded_by_proxy def test_create_or_update_load_test(self, loadtesting_endpoint, loadtesting_test_id): @@ -140,7 +147,6 @@ def test_list_load_tests(self, loadtesting_endpoint): result = client.list_tests() assert result is not None - @LoadtestingPowerShellPreparer() @recorded_by_proxy def test_get_test_file(self, loadtesting_endpoint): @@ -169,7 +175,6 @@ def test_delete_test_file(self, loadtesting_endpoint): with pytest.raises(ResourceNotFoundError): client.delete_test_file(self.setup_load_test_id, "nonexistent.jmx") - @LoadtestingPowerShellPreparer() @recorded_by_proxy def list_test_files(self, loadtesting_endpoint): @@ -193,17 +198,15 @@ def test_create_or_update_app_components(self, loadtesting_endpoint, loadtesting result = client.create_or_update_app_components( loadtesting_test_id, { - "components": - { - loadtesting_resource_id: - { + "components": { + loadtesting_resource_id: { "resourceId": loadtesting_resource_id, "resourceName": "App-Service-Sample-Demo", "resourceType": "Microsoft.Web/sites", - "kind": "web" + "kind": "web", } } - } + }, ) assert result is not None @@ -219,7 +222,7 @@ def test_create_or_update_app_components(self, loadtesting_endpoint, loadtesting "kind": "web", } } - } + }, ) @LoadtestingPowerShellPreparer() @@ -243,8 +246,11 @@ def test_file_upload_poller(self, loadtesting_endpoint): self.setup_create_load_test(loadtesting_endpoint) client = self.create_administration_client(loadtesting_endpoint) - poller = client.begin_upload_test_file(self.setup_load_test_id, "sample.jmx", - open(os.path.join(Path(__file__).resolve().parent, "sample.jmx"), "rb")) + poller = client.begin_upload_test_file( + self.setup_load_test_id, + "sample.jmx", + open(os.path.join(Path(__file__).resolve().parent, "sample.jmx"), "rb"), + ) result = poller.result(1000) assert poller.status() is not None @@ -253,7 +259,9 @@ def test_file_upload_poller(self, loadtesting_endpoint): @LoadtestingPowerShellPreparer() @recorded_by_proxy - def test_create_or_update_server_metrics_config(self, loadtesting_endpoint, loadtesting_resource_id, loadtesting_test_id): + def test_create_or_update_server_metrics_config( + self, loadtesting_endpoint, loadtesting_resource_id, loadtesting_test_id + ): set_bodiless_matcher() client = self.create_administration_client(loadtesting_endpoint) @@ -268,10 +276,10 @@ def test_create_or_update_server_metrics_config(self, loadtesting_endpoint, load "name": "requests/duration", "aggregation": "Average", "unit": None, - "resourceType": "microsoft.insights/components" + "resourceType": "microsoft.insights/components", } } - } + }, ) assert result is not None diff --git a/sdk/loadtesting/azure-developer-loadtesting/tests/test_async_admin_ops.py b/sdk/loadtesting/azure-developer-loadtesting/tests/test_async_admin_ops.py index 53f564567b6d..31c796f2afb9 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/tests/test_async_admin_ops.py +++ b/sdk/loadtesting/azure-developer-loadtesting/tests/test_async_admin_ops.py @@ -17,6 +17,8 @@ DISPLAY_NAME = "TestingResourcePyTest" NON_EXISTING_RESOURCE = "nonexistingresource" + + class TestLoadTestAdministrationClient(LoadtestingAsyncTest): async def setup_create_load_test(self, endpoint): @@ -38,13 +40,17 @@ async def setup_create_load_test(self, endpoint): "passFailCriteria": {"passFailMetrics": {}}, "keyvaultReferenceIdentityType": "SystemAssigned", "keyvaultReferenceIdentityId": None, - } + }, ) async def setup_upload_test_file(self, endpoint): client = self.create_administration_client(endpoint) self.setup_file_name = "sample.jmx" - await client.begin_upload_test_file(self.setup_load_test_id, "sample.jmx", open(os.path.join(Path(__file__).resolve().parent, "sample.jmx"), "rb")) + await client.begin_upload_test_file( + self.setup_load_test_id, + "sample.jmx", + open(os.path.join(Path(__file__).resolve().parent, "sample.jmx"), "rb"), + ) async def setup_app_components(self, endpoint, resource_id): client = self.create_administration_client(endpoint) @@ -62,6 +68,7 @@ async def setup_app_components(self, endpoint, resource_id): }, }, ) + @LoadtestingPowerShellPreparer() @recorded_by_proxy_async async def test_create_or_update_load_test(self, loadtesting_endpoint, loadtesting_test_id): @@ -142,7 +149,6 @@ async def test_list_load_tests(self, loadtesting_endpoint): result = client.list_tests() assert result is not None - @LoadtestingPowerShellPreparer() @recorded_by_proxy_async async def test_get_test_file(self, loadtesting_endpoint): @@ -171,7 +177,6 @@ async def test_delete_test_file(self, loadtesting_endpoint): with pytest.raises(ResourceNotFoundError): await client.delete_test_file(self.setup_load_test_id, "nonexistent.jmx") - @LoadtestingPowerShellPreparer() @recorded_by_proxy_async async def list_test_files(self, loadtesting_endpoint): @@ -188,24 +193,24 @@ async def list_test_files(self, loadtesting_endpoint): @LoadtestingPowerShellPreparer() @recorded_by_proxy_async - async def test_create_or_update_app_components(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_resource_id): + async def test_create_or_update_app_components( + self, loadtesting_endpoint, loadtesting_test_id, loadtesting_resource_id + ): set_bodiless_matcher() client = self.create_administration_client(loadtesting_endpoint) result = await client.create_or_update_app_components( loadtesting_test_id, { - "components": - { - loadtesting_resource_id: - { + "components": { + loadtesting_resource_id: { "resourceId": loadtesting_resource_id, "resourceName": "App-Service-Sample-Demo", "resourceType": "Microsoft.Web/sites", - "kind": "web" + "kind": "web", } } - } + }, ) assert result is not None @@ -221,7 +226,7 @@ async def test_create_or_update_app_components(self, loadtesting_endpoint, loadt "kind": "web", } } - } + }, ) @LoadtestingPowerShellPreparer() @@ -245,8 +250,11 @@ async def test_file_upload_poller(self, loadtesting_endpoint): await self.setup_create_load_test(loadtesting_endpoint) client = self.create_administration_client(loadtesting_endpoint) - poller = await client.begin_upload_test_file(self.setup_load_test_id, "sample.jmx", - open(os.path.join(Path(__file__).resolve().parent, "sample.jmx"), "rb")) + poller = await client.begin_upload_test_file( + self.setup_load_test_id, + "sample.jmx", + open(os.path.join(Path(__file__).resolve().parent, "sample.jmx"), "rb"), + ) result = await poller.result() assert poller.status() is not None @@ -255,7 +263,9 @@ async def test_file_upload_poller(self, loadtesting_endpoint): @LoadtestingPowerShellPreparer() @recorded_by_proxy_async - async def test_create_or_update_server_metrics_config(self, loadtesting_endpoint, loadtesting_resource_id, loadtesting_test_id): + async def test_create_or_update_server_metrics_config( + self, loadtesting_endpoint, loadtesting_resource_id, loadtesting_test_id + ): set_bodiless_matcher() client = self.create_administration_client(loadtesting_endpoint) @@ -270,10 +280,10 @@ async def test_create_or_update_server_metrics_config(self, loadtesting_endpoint "name": "requests/duration", "aggregation": "Average", "unit": None, - "resourceType": "microsoft.insights/components" + "resourceType": "microsoft.insights/components", } } - } + }, ) assert result is not None diff --git a/sdk/loadtesting/azure-developer-loadtesting/tests/test_async_run_ops.py b/sdk/loadtesting/azure-developer-loadtesting/tests/test_async_run_ops.py index 6265141f4b6e..23b1f2e74bc6 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/tests/test_async_run_ops.py +++ b/sdk/loadtesting/azure-developer-loadtesting/tests/test_async_run_ops.py @@ -17,6 +17,8 @@ DISPLAY_NAME = "TestingResourcePyTest" NON_EXISTING_RESOURCE = "nonexistingresource" + + class TestRunOps(LoadtestingAsyncTest): async def setup_loadtest(self, endpoint, test_id): @@ -37,7 +39,7 @@ async def setup_loadtest(self, endpoint, test_id): "passFailCriteria": {"passFailMetrics": {}}, "keyvaultReferenceIdentityType": "SystemAssigned", "keyvaultReferenceIdentityId": None, - } + }, ) validation_poller = await admin_client.begin_upload_test_file( @@ -56,7 +58,7 @@ async def setup_test_run(self, endpoint, test_id, test_run_id): { "testId": test_id, "displayName": "My New Load Test Run from PyTest", - } + }, ) await run_poller.result() @@ -74,7 +76,7 @@ async def test_test_run_poller(self, loadtesting_endpoint, loadtesting_test_id, { "testId": loadtesting_test_id, "displayName": "My New Load Test Run from PyTest", - } + }, ) result = await run_poller.result() @@ -111,7 +113,6 @@ async def test_delete_test_run(self, loadtesting_endpoint, loadtesting_test_id, with pytest.raises(ResourceNotFoundError): await run_client.delete_test_run(NON_EXISTING_RESOURCE) - @LoadtestingPowerShellPreparer() @recorded_by_proxy_async async def test_get_test_run_file(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id): @@ -130,7 +131,6 @@ async def test_get_test_run_file(self, loadtesting_endpoint, loadtesting_test_id with pytest.raises(HttpResponseError): await run_client.get_test_run_file(loadtesting_test_run_id, NON_EXISTING_RESOURCE) - @LoadtestingPowerShellPreparer() @recorded_by_proxy_async async def test_list_test_runs(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id): @@ -143,7 +143,6 @@ async def test_list_test_runs(self, loadtesting_endpoint, loadtesting_test_id, l result = run_client.list_test_runs() assert result is not None - @LoadtestingPowerShellPreparer() @recorded_by_proxy_async async def test_stop_test_run(self, loadtesting_endpoint): @@ -162,7 +161,7 @@ async def test_stop_test_run(self, loadtesting_endpoint): { "testId": "new-load-test-from-pytest-aio-abc", "displayName": "My New Load Test Run from PyTest", - } + }, ) result = await run_client.stop_test_run("my-new-test-run-from-pytest-aio-abc") @@ -182,21 +181,24 @@ async def test_get_metrics(self, loadtesting_endpoint, loadtesting_test_id, load metric_namespaces = await run_client.get_metric_namespaces(loadtesting_test_run_id) assert metric_namespaces is not None - metric_definitions = await run_client.get_metric_definitions(loadtesting_test_run_id, - metric_namespace=metric_namespaces["value"][0]["name"]) + metric_definitions = await run_client.get_metric_definitions( + loadtesting_test_run_id, metric_namespace=metric_namespaces["value"][0]["name"] + ) assert metric_definitions is not None metrics = run_client.list_metrics( test_run_id=loadtesting_test_run_id, metric_name=metric_definitions["value"][0]["name"], metric_namespace=metric_namespaces["value"][0]["name"], - time_interval=test_run_response["startDateTime"] + "/" + test_run_response["endDateTime"] + time_interval=test_run_response["startDateTime"] + "/" + test_run_response["endDateTime"], ) assert metrics is not None @LoadtestingPowerShellPreparer() @recorded_by_proxy_async - async def test_create_or_update_app_component(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id): + async def test_create_or_update_app_component( + self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id + ): set_bodiless_matcher() await self.setup_test_run(loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id) @@ -206,17 +208,15 @@ async def test_create_or_update_app_component(self, loadtesting_endpoint, loadte result = await run_client.create_or_update_app_components( loadtesting_test_run_id, { - "components": - { - loadtesting_resource_id: - { - "resourceId": loadtesting_resource_id, - "resourceName": "App-Service-Sample-Demo", - "resourceType": "Microsoft.Web/sites", - "kind": "web" - } + "components": { + loadtesting_resource_id: { + "resourceId": loadtesting_resource_id, + "resourceName": "App-Service-Sample-Demo", + "resourceType": "Microsoft.Web/sites", + "kind": "web", } - } + } + }, ) assert result is not None @@ -224,22 +224,22 @@ async def test_create_or_update_app_component(self, loadtesting_endpoint, loadte await run_client.create_or_update_app_components( NON_EXISTING_RESOURCE, { - "components": - { - loadtesting_resource_id: - { - "resourceId": loadtesting_resource_id, - "resourceName": "App-Service-Sample-Demo", - "resourceType": "Microsoft.Web/sites", - "kind": "web" - } + "components": { + loadtesting_resource_id: { + "resourceId": loadtesting_resource_id, + "resourceName": "App-Service-Sample-Demo", + "resourceType": "Microsoft.Web/sites", + "kind": "web", } - } + } + }, ) @LoadtestingPowerShellPreparer() @recorded_by_proxy_async - async def test_get_app_component(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id): + async def test_get_app_component( + self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id + ): set_bodiless_matcher() await self.setup_test_run(loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id) @@ -250,7 +250,9 @@ async def test_get_app_component(self, loadtesting_endpoint, loadtesting_test_id @LoadtestingPowerShellPreparer() @recorded_by_proxy_async - async def test_create_or_update_server_metrics_config(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id): + async def test_create_or_update_server_metrics_config( + self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id + ): set_bodiless_matcher() await self.setup_test_run(loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id) @@ -267,20 +269,22 @@ async def test_create_or_update_server_metrics_config(self, loadtesting_endpoint "name": "requests/duration", "aggregation": "Average", "unit": None, - "resourceType": "microsoft.insights/components" + "resourceType": "microsoft.insights/components", } } - } + }, ) assert result is not None @LoadtestingPowerShellPreparer() @recorded_by_proxy_async - async def test_get_server_metrics_config(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id): + async def test_get_server_metrics_config( + self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id + ): set_bodiless_matcher() await self.setup_test_run(loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id) run_client = self.create_run_client(loadtesting_endpoint) result = await run_client.get_server_metrics_config(loadtesting_test_run_id) - assert result is not None \ No newline at end of file + assert result is not None diff --git a/sdk/loadtesting/azure-developer-loadtesting/tests/test_run_ops.py b/sdk/loadtesting/azure-developer-loadtesting/tests/test_run_ops.py index 23781caa0436..b5994edc89af 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/tests/test_run_ops.py +++ b/sdk/loadtesting/azure-developer-loadtesting/tests/test_run_ops.py @@ -16,6 +16,7 @@ DISPLAY_NAME = "TestingResourcePyTest" NON_EXISTING_RESOURCE = "nonexistingresource" + class TestRunOps(LoadtestingTest): def setup_loadtest(self, endpoint, test_id): @@ -36,7 +37,7 @@ def setup_loadtest(self, endpoint, test_id): "passFailCriteria": {"passFailMetrics": {}}, "keyvaultReferenceIdentityType": "SystemAssigned", "keyvaultReferenceIdentityId": None, - } + }, ) validation_poller = admin_client.begin_upload_test_file( @@ -55,7 +56,7 @@ def setup_test_run(self, endpoint, test_id, test_run_id): { "testId": test_id, "displayName": "My New Load Test Run from PyTest", - } + }, ) run_poller.result(10800) @@ -110,7 +111,6 @@ def test_delete_test_run(self, loadtesting_endpoint, loadtesting_test_id, loadte with pytest.raises(ResourceNotFoundError): run_client.delete_test_run(NON_EXISTING_RESOURCE) - @LoadtestingPowerShellPreparer() @recorded_by_proxy def test_get_test_run_file(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id): @@ -129,7 +129,6 @@ def test_get_test_run_file(self, loadtesting_endpoint, loadtesting_test_id, load with pytest.raises(HttpResponseError): run_client.get_test_run_file(loadtesting_test_run_id, NON_EXISTING_RESOURCE) - @LoadtestingPowerShellPreparer() @recorded_by_proxy def test_list_test_runs(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id): @@ -142,7 +141,6 @@ def test_list_test_runs(self, loadtesting_endpoint, loadtesting_test_id, loadtes result = run_client.list_test_runs() assert result is not None - @LoadtestingPowerShellPreparer() @recorded_by_proxy def test_stop_test_run(self, loadtesting_endpoint): @@ -161,7 +159,7 @@ def test_stop_test_run(self, loadtesting_endpoint): { "testId": "new-load-test-from-pytest-abc", "displayName": "My New Load Test Run from PyTest", - } + }, ) result = run_client.stop_test_run("my-new-test-run-from-pytest") @@ -170,7 +168,6 @@ def test_stop_test_run(self, loadtesting_endpoint): with pytest.raises(ResourceNotFoundError): run_client.stop_test_run(NON_EXISTING_RESOURCE) - @LoadtestingPowerShellPreparer() @recorded_by_proxy def test_get_metrics(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id): @@ -185,21 +182,24 @@ def test_get_metrics(self, loadtesting_endpoint, loadtesting_test_id, loadtestin metric_namespaces = run_client.get_metric_namespaces(loadtesting_test_run_id) assert metric_namespaces is not None - metric_definitions = run_client.get_metric_definitions(loadtesting_test_run_id, - metric_namespace=metric_namespaces["value"][0]["name"]) + metric_definitions = run_client.get_metric_definitions( + loadtesting_test_run_id, metric_namespace=metric_namespaces["value"][0]["name"] + ) assert metric_definitions is not None metrics = run_client.list_metrics( test_run_id=loadtesting_test_run_id, metric_name=metric_definitions["value"][0]["name"], metric_namespace=metric_namespaces["value"][0]["name"], - time_interval=test_run_response["startDateTime"] + "/" + test_run_response["endDateTime"] + time_interval=test_run_response["startDateTime"] + "/" + test_run_response["endDateTime"], ) assert metrics is not None @LoadtestingPowerShellPreparer() @recorded_by_proxy - def test_create_or_update_app_component(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id): + def test_create_or_update_app_component( + self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id + ): set_bodiless_matcher() self.setup_test_run(loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id) @@ -209,17 +209,15 @@ def test_create_or_update_app_component(self, loadtesting_endpoint, loadtesting_ result = run_client.create_or_update_app_components( loadtesting_test_run_id, { - "components": - { - loadtesting_resource_id: - { - "resourceId": loadtesting_resource_id, - "resourceName": "App-Service-Sample-Demo", - "resourceType": "Microsoft.Web/sites", - "kind": "web" - } + "components": { + loadtesting_resource_id: { + "resourceId": loadtesting_resource_id, + "resourceName": "App-Service-Sample-Demo", + "resourceType": "Microsoft.Web/sites", + "kind": "web", } - } + } + }, ) assert result is not None @@ -227,22 +225,22 @@ def test_create_or_update_app_component(self, loadtesting_endpoint, loadtesting_ run_client.create_or_update_app_components( NON_EXISTING_RESOURCE, { - "components": - { - loadtesting_resource_id: - { - "resourceId": loadtesting_resource_id, - "resourceName": "App-Service-Sample-Demo", - "resourceType": "Microsoft.Web/sites", - "kind": "web" - } + "components": { + loadtesting_resource_id: { + "resourceId": loadtesting_resource_id, + "resourceName": "App-Service-Sample-Demo", + "resourceType": "Microsoft.Web/sites", + "kind": "web", } - } + } + }, ) @LoadtestingPowerShellPreparer() @recorded_by_proxy - def test_get_app_component(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id): + def test_get_app_component( + self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id + ): set_bodiless_matcher() self.setup_test_run(loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id) @@ -253,7 +251,9 @@ def test_get_app_component(self, loadtesting_endpoint, loadtesting_test_id, load @LoadtestingPowerShellPreparer() @recorded_by_proxy - def test_create_or_update_server_metrics_config(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id): + def test_create_or_update_server_metrics_config( + self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id + ): set_bodiless_matcher() self.setup_test_run(loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id) @@ -270,20 +270,22 @@ def test_create_or_update_server_metrics_config(self, loadtesting_endpoint, load "name": "requests/duration", "aggregation": "Average", "unit": None, - "resourceType": "microsoft.insights/components" + "resourceType": "microsoft.insights/components", } } - } + }, ) assert result is not None @LoadtestingPowerShellPreparer() @recorded_by_proxy - def test_get_server_metrics_config(self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id): + def test_get_server_metrics_config( + self, loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id, loadtesting_resource_id + ): set_bodiless_matcher() self.setup_test_run(loadtesting_endpoint, loadtesting_test_id, loadtesting_test_run_id) run_client = self.create_run_client(loadtesting_endpoint) result = run_client.get_server_metrics_config(loadtesting_test_run_id) - assert result is not None \ No newline at end of file + assert result is not None diff --git a/sdk/loadtesting/azure-developer-loadtesting/tests/testcase.py b/sdk/loadtesting/azure-developer-loadtesting/tests/testcase.py index 4c662118b11c..995f1458f793 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/tests/testcase.py +++ b/sdk/loadtesting/azure-developer-loadtesting/tests/testcase.py @@ -9,6 +9,7 @@ from devtools_testutils import AzureRecordedTestCase, PowerShellPreparer from azure.developer.loadtesting import LoadTestAdministrationClient, LoadTestRunClient + class LoadtestingTest(AzureRecordedTestCase): def create_administration_client(self, endpoint): diff --git a/sdk/loadtesting/azure-developer-loadtesting/tsp-location.yaml b/sdk/loadtesting/azure-developer-loadtesting/tsp-location.yaml new file mode 100644 index 000000000000..e24a815f501f --- /dev/null +++ b/sdk/loadtesting/azure-developer-loadtesting/tsp-location.yaml @@ -0,0 +1,4 @@ +directory: specification/loadtestservice/LoadTestService +commit: ce46dc3e04b0bc3a7b04d9c715c1107186978a5c +repo: Azure/azure-rest-api-specs +additionalDirectories: