Funciones de la biblioteca disponibles para los scripts de valores controlados de Python que usan Selenium - Amazon CloudWatch

Funciones de la biblioteca disponibles para los scripts de valores controlados de Python que usan Selenium

Esta sección enumera las funciones de biblioteca Selenium disponibles para los scripts valores controlados de Python.

Clases y funciones de biblioteca de Python y Selenium que se aplican a todos los canaries

Las siguientes funciones de biblioteca de CloudWatch Synthetics para Python son útiles para todos los canaries.

Clase SyntheticsConfiguration

Se puede utilizar la clase SyntheticsConfiguration para configurar el comportamiento de las funciones de biblioteca de Synthetics. Por ejemplo, se puede utilizar esta clase para configurar la función executeStep() para no hacer capturas de pantalla.

Se pueden establecer las configuraciones de CloudWatch Synthetics a nivel global.

Definiciones de la función

set_config(options)

from aws_synthetics.common import synthetics_configuration

options es un objeto, que es un conjunto de opciones configurables para el valor controlado. En las siguientes secciones se explican los posibles campos en options.

  • screenshot_on_step_start (booleano): si se debe tomar una captura de pantalla antes de comenzar un paso.

  • screenshot_on_step_success (booleano): si se debe tomar una captura de pantalla después de completar un paso correctamente.

  • screenshot_on_step_failure (booleano): si se debe tomar una captura de pantalla después de que un paso falla.

with_screenshot_on_step_start(screenshot_on_step_start)

Acepta un argumento booleano, que indica si se debe tomar una captura de pantalla antes de iniciar un paso.

with_screenshot_on_step_success(screenshot_on_step_success)

Acepta un argumento booleano, que indica si se debe tomar una captura de pantalla después de completar un paso correctamente.

with_screenshot_on_step_failure(screenshot_on_step_failure)

Acepta un argumento booleano, que indica si se debe tomar una captura de pantalla después de que un paso falla.

get_screenshot_on_step_start()

Muestra si se debe tomar una captura de pantalla antes de iniciar un paso.

get_screenshot_on_step_success()

Muestra si se debe realizar una captura de pantalla después de completar un paso correctamente.

get_screenshot_on_step_failure()

Muestra si se debe tomar una captura de pantalla después de que un paso falla.

disable_step_screenshots()

Desactiva todas las opciones de captura de pantalla (get_screenshot_on_step_start, get_screenshot_on_step_success, y get_screenshot_on_step_failure).

enable_step_screenshots()

Habilita todas las opciones de captura de pantalla (get_screenshot_on_step_start, get_screenshot_on_step_success y get_screenshot_on_step_failure). Estos métodos no están habilitados de forma predeterminada.

setConfig(options) con respecto a las métricas de CloudWatch

Para los valores controlados que utilizan syn-python-selenium-1.1 o posteriores, las (opciones) para setConfig pueden incluir los siguientes parámetros booleanos que determinan qué métricas publica el valor controlado. El valor predeterminado para cada una de estas opciones es true. Las opciones que comienzan con aggregated determinan si la métrica se emite sin la dimensión CanaryName. Se pueden utilizar estas métricas para ver los resultados agregados de todos los canaries. Las otras opciones determinan si la métrica se emite con la dimensión CanaryName. Se pueden usar estas métricas para ver los resultados de cada valor controlado individualmente.

Para obtener una lista de las métricas de CloudWatch que los canaries emiten, consulte Métricas de CloudWatch que los canaries publican.

  • failed_canary_metric (booleano): si se debe emitir la métrica Failed (con la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

  • failed_requests_metric (booleano): si se debe emitir la métrica Failed requests (con la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

  • 2xx_metric (booleano): si se debe emitir la métrica 2xx (con la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

  • 4xx_metric (booleano): si se debe emitir la métrica 4xx (con la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

  • 5xx_metric (booleano): si se debe emitir la métrica 5xx (con la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

  • step_duration_metric (booleano): si se debe emitir la métrica Step duration (con las dimensiones CanaryName y StepName) para este valor controlado. El valor predeterminado es true.

  • step_success_metric (booleano): si se debe emitir la métrica Step success (con las dimensiones CanaryName y StepName) para este valor controlado. El valor predeterminado es true.

  • aggregated_failed_canary_metric (booleano): si se debe emitir la métrica Failed (sin la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

  • aggregated_failed_requests_metric (booleano): si se debe emitir la métrica Failed Requests (sin la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

  • aggregated_2xx_metric (booleano): si se debe emitir la métrica 2xx (sin la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

  • aggregated_4xx_metric (booleano): si se debe emitir la métrica 4xx (sin la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

  • aggregated_5xx_metric (booleano): si se debe emitir la métrica 5xx (sin la dimensión CanaryName) para este valor controlado. El valor predeterminado es true.

with_2xx_metric(2xx_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica 2xx con la dimensión CanaryName para este valor controlado.

with_4xx_metric(4xx_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica 4xx con la dimensión CanaryName para este valor controlado.

with_5xx_metric(5xx_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica 5xxcon la dimensión CanaryName para este valor controlado.

withAggregated2xxMetric(aggregated2xxMetric)

Acepta un argumento booleano, que especifica si se emitirá una métrica 2xxsin dimensión para este valor controlado.

withAggregated4xxMetric(aggregated4xxMetric)

Acepta un argumento booleano, que especifica si se emitirá una métrica 4xx sin dimensión para este valor controlado.

with_aggregated_5xx_metric(aggregated_5xx_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica 5xxsin dimensión para este valor controlado.

with_aggregated_failed_canary_metric(aggregated_failed_canary_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica Failedsin dimensión para este valor controlado.

with_aggregated_failed_requests_metric(aggregated_failed_requests_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica Failed requestssin dimensión para este valor controlado.

with_failed_canary_metric(failed_canary_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica Failed con la dimensión CanaryName para este valor controlado.

with_failed_requests_metric(failed_requests_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica Failed requests con la dimensión CanaryName para este valor controlado.

with_step_duration_metric(step_duration_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica Duration con la dimensión CanaryName para este valor controlado.

with_step_success_metric(step_success_metric)

Acepta un argumento booleano, que especifica si se emitirá una métrica StepSuccess con la dimensión CanaryName para este valor controlado.

Métodos para habilitar o desactivar métricas

disable_aggregated_request_metrics()

Desactiva que el valor controlado emita todas las métricas de solicitud que se emiten sin dimensión CanaryName.

disable_request_metrics()

Deshabilita todas las métricas de solicitud, incluidas las métricas por valor controlado y las métricas agregadas en todos los valores controlados.

disable_step_metrics()

Desactiva todas las métricas de pasos, incluidas las métricas de éxito y de duración de los pasos.

enable_aggregated_request_metrics()

Permite que el valor controlado emita todas las métricas de solicitud que se emiten sin dimensión CanaryName.

enable_request_metrics()

Habilita todas las métricas de solicitud, incluidas las métricas por valor controlado y las métricas agregadas en todos los valores controlados.

enable_step_metrics()

Habilita todas las métricas de pasos, incluidas las métricas de éxito y de duración de los pasos.

Uso en valores controlados de la IU

Primero, importe la relación de Synthetics y obtenga la configuración. A continuación, establezca la configuración para cada opción mediante llamadas al método SetConfig con una de las siguientes opciones.

from aws_synthetics.common import synthetics_configuration synthetics_configuration.set_config( { "screenshot_on_step_start": False, "screenshot_on_step_success": False, "screenshot_on_step_failure": True } ) or

Or (Disyunción)

synthetics_configuration.with_screenshot_on_step_start(False).with_screenshot_on_step_success(False).with_screenshot_on_step_failure(True)

Para desactivar todas las capturas de pantalla, utilice la función disableStepScreenshots() como en este ejemplo.

synthetics_configuration.disable_step_screenshots()

Puede habilitar y desactivar las capturas de pantalla en cualquier punto del código. Por ejemplo, para desactivar las capturas de pantalla solo para un paso, se deben desactivar antes de ejecutar ese paso y habilitarlas después del paso.

set_config(options) para los valores controlados de la interfaz de usuario

A partir de syn-python-selenium-1.1, para los valores controlados de la interfaz de usuario, set_config puede incluir los siguientes parámetros booleanos:

  • continue_on_step_failure (booleano): si se debe continuar con la ejecución del script valor controlado después de que un paso falle (esto se refiere a la función executeStep). Si algún paso falla, la ejecución del valor controlado seguirá marcándose como fallida. El valor predeterminado es false.

Clase SyntheticsLogger

synthetics_logger ingresa los registros tanto en la consola como en un archivo de registros local, en el mismo nivel de registro. Este archivo de registro se escribe en ambas ubicaciones solo si el nivel de registro coincide con el deseado para la función de registro a la que se llamó o está por debajo de este.

Los valores “DEBUG: ”, “INFO: ”, etc. se anteponen a las instrucciones de registro del archivo de registro local para que coincidan con el nivel de registro de la función a la que se llamó.

No es necesario utilizar synthetics_logger para crear un archivo de registros que se carga en la ubicación de resultados de Amazon S3. En su lugar, puede crear un archivo de registro distinto en la carpeta /tmp. Los archivos creados en la carpeta /tmp se cargan en la ubicación de resultados del bucket de S3 como artefactos.

Para utilizar synthetics_logger.

from aws_synthetics.common import synthetics_logger

Definiciones de funciones útiles:

Obtenga el nivel de registro:

log_level = synthetics_logger.get_level()

Establezca el nivel de registro:

synthetics_logger.set_level()

Registre un mensaje con un nivel especificado. El nivel puede ser DEBUG, INFO, WARN o ERROR, como en los siguientes ejemplos de sintaxis:

synthetics_logger.debug(message, *args, **kwargs)
synthetics_logger.info(message, *args, **kwargs)
synthetics_logger.log(message, *args, **kwargs)
synthetics_logger.warn(message, *args, **kwargs)
synthetics_logger.error(message, *args, **kwargs)

Para obtener información acerca de los parámetros de depuración, consulte los documentos estándar de Python en logging.debug

En estas funciones de registro, el message es la cadena del formato del mensaje. Los args son los argumentos que se fusionan en msg que usan el operador de formato de cadena.

Hay tres argumentos de palabras clave en kwargs:

  • exc_info: si no se evalúa como false, agrega información de excepción al mensaje de registro.

  • stack_info: el valor predeterminado es false. Si es VERDADERO, agrega información de pila al mensaje de registro, incluida la llamada de registro real.

  • extra: el tercer argumento opcional de palabra clave, que se puede utilizar para especificar un diccionario que se utiliza para rellenar el __dict__ del LogRecord que se ha creado para el evento de registro con atributos definidos por el usuario.

Ejemplos:

Registre un mensaje con el nivel DEBUG:

synthetics_logger.debug('Starting step - login.')

Registre un mensaje con el nivel INFO. logger.log es sinónimo de logger.info:

synthetics_logger.info('Successfully completed step - login.')

o

synthetics_logger.log('Successfully completed step - login.')

Registre un mensaje con el nivel WARN:

synthetics_logger.warn('Warning encountered trying to publish %s', 'CloudWatch Metric')

Registre un mensaje con el nivel ERROR:

synthetics_logger.error('Error encountered trying to publish %s', 'CloudWatch Metric')

Registre una excepción:

synthetics_logger.exception(message, *args, **kwargs)

Registre un mensaje con nivel ERROR. La información de excepción se agrega al mensaje de registro. Debe llamar a esta función solo desde un controlador de excepciones.

Para obtener información acerca de los parámetros de excepción, consulte los documentos estándar de Python en logging.exception

El message es la cadena en formato de mensaje. Los args son los argumentos, que se fusionan en msg mediante el operador de formato de cadena.

Hay tres argumentos de palabras clave en kwargs:

  • exc_info: si no se evalúa como false, agrega información de excepción al mensaje de registro.

  • stack_info: el valor predeterminado es false. Si es VERDADERO, agrega información de pila al mensaje de registro, incluida la llamada de registro real.

  • extra: el tercer argumento opcional de palabra clave, que se puede utilizar para especificar un diccionario que se utiliza para rellenar el __dict__ del LogRecord que se ha creado para el evento de registro con atributos que el usuario ha definido.

Ejemplo:

synthetics_logger.exception('Error encountered trying to publish %s', 'CloudWatch Metric')

Clases y funciones de biblioteca de Python y Selenium que se aplican solo a canaries de la UI

Las siguientes funciones de la biblioteca de Selenium de CloudWatch Synthetics para Python solo son útiles para los valores controlados de la UI.

Clase SyntheticsBrowser

Cuando se crea una instancia de navegador mediante una llamada a synthetics_webdriver.Chrome(), la instancia del navegador devuelta es del tipo SyntheticsBrowser. La clase SyntheticsBrowser controla el ChromeDriver y habilita el script valor controlado para manejar el navegador, lo que permite al WebDriver Selenium trabajar con Synthetics.

Además de los métodos estándar de Selenium, también proporciona los siguientes métodos.

set_viewport_size(ancho, alto)

Establece la ventana gráfica del navegador. Ejemplo:

browser.set_viewport_size(1920, 1080)

save_screenshot(nombre del archivo, sufijo)

Guarda capturas de pantalla en el directorio de /tmp. Las capturas de pantalla se cargan desde allí a la carpeta de artefactos de valores controlados en el bucket de S3.

nombre del archivo es el nombre del archivo para la captura de pantalla, y sufijo es una cadena opcional que se utilizará para nombrar la captura de pantalla.

Ejemplo:

browser.save_screenshot('loaded.png', 'page1')

Clase SyntheticsWebDriver

Para utilizar esta clase, utilice lo siguiente en su script:

from aws_synthetics.selenium import synthetics_webdriver

add_execution_error(errorMessage, ex);

errorMessage describe el error y ex es la excepción que se encuentra

add_execution_error puede usarse para establecer errores de ejecución para el valor controlado. Se produce un error en el valor controlado sin interrumpir la ejecución del script. Tampoco afecta a las métricas de successPercent.

Debe realizar un seguimiento de los errores como errores de ejecución sólo si no son importantes para indicar el éxito o el error del script valor controlado.

A continuación, se muestra un ejemplo del uso de un add_execution_error. Está supervisando la disponibilidad de su punto de conexión y tomando capturas de pantalla después de que la página se haya cargado. Debido a que el hecho de no tomar una captura de pantalla no determina la disponibilidad del punto de enlace, puede detectar cualquier error que encuentre al tomar capturas de pantalla y agregarlos como errores de ejecución. Las métricas de disponibilidad seguirán indicando que el punto de conexión está activo y en ejecución, pero el estado del valor controlado se marcará como fallido. El siguiente bloque de código de muestra detecta dicho error y lo agrega como un error de ejecución.

try: browser.save_screenshot("loaded.png") except Exception as ex: self.add_execution_error("Unable to take screenshot", ex)

add_user_agent(user_agent_str)

Añade el valor de user_agent_str a la cabecera del agente de usuario del navegador. Debe asignar user_agent_str antes de crear la instancia del navegador.

Ejemplo:

synthetics_webdriver.add_user_agent('MyApp-1.0')

execute_step(step_name, function_to_execute)

Procesa una función. También hace lo siguiente:

  • Registra que el paso se ha iniciado.

  • Toma una captura de pantalla denominada <stepName>-starting.

  • Inicia un temporizador.

  • Ejecuta la función proporcionada.

  • Si la función devuelve resultados normalmente, cuenta como superada. Si la función falla, cuenta como error.

  • Finaliza el temporizador.

  • Registra si el paso se ha superado o no.

  • Toma una captura de pantalla denominada <stepName>-succeeded o <stepName>-failed.

  • Emite la métrica stepName SuccessPercent, 100 para superado o 0 para no superado.

  • Emite la métrica stepName Duration, con un valor basado en las horas de inicio y de finalización del paso.

  • Por último, devuelve el mismo resultado que functionToExecute o vuelve a arrojar el mismo error que functionToExecute.

Ejemplo:

from selenium.webdriver.common.by import By def custom_actions(): #verify contains browser.find_element(By.XPATH, "//*[@id=\"id_1\"][contains(text(),'login')]") #click a button browser.find_element(By.XPATH, '//*[@id="submit"]/a').click() await synthetics_webdriver.execute_step("verify_click", custom_actions)

Chrome()

Lanza una instancia del navegador Chromium y muestra la instancia creada del navegador.

Ejemplo:

browser = synthetics_webdriver.Chrome() browser.get("https://example.com/)

Para lanzar un navegador en modo de incógnito, utilice lo siguiente:

add_argument('——incognito')

Para agregar la configuración del proxy, utilice lo siguiente:

add_argument('--proxy-server=%s' % PROXY)

Ejemplo:

from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("——incognito") browser = syn_webdriver.Chrome(chrome_options=chrome_options)