Funções da biblioteca disponíveis para scripts do canário do Python usando Selenium - Amazon CloudWatch

Funções da biblioteca disponíveis para scripts do canário do Python usando Selenium

Esta seção lista as funções de biblioteca do Selenium disponíveis para scripts do canário Python.

Classes e funções da biblioteca Python e Selenium que se aplicam a todos os canaries

As seguintes funções de biblioteca do Selenium do CloudWatch Synthetics para Python são úteis para todos os canaries.

Classe SyntheticsConfiguration

É possível usar a classe SyntheticsConfiguration para configurar o comportamento das funções da biblioteca do Synthetics. Por exemplo, você pode usar essa classe para configurar a função executeStep() para não obter capturas de tela.

É possível definir as configurações do CloudWatch Synthetics no nível global.

Definições de função:

set_config(options)

from aws_synthetics.common import synthetics_configuration

options é um objeto, que é um conjunto de opções configuráveis para seu canário. As seções a seguir explicam os campos possíveis em options.

  • screenshot_on_step_start (booliano): se fará ou nãi uma captura de tela antes de iniciar uma etapa.

  • screenshot_on_step_success (booliano): se fará ou não uma captura de tela depois de concluir uma etapa bem-sucedida.

  • screenshot_on_step_failure (booliano): se fará ou não uma captura de tela depois de que uma etapa falhar.

with_screenshot_on_step_start(screenshot_on_step_start)

Aceita um argumento booliano, que indica se uma captura de tela deverá ou não ser obtida antes de iniciar uma etapa.

with_screenshot_on_step_success(screenshot_on_step_success)

Aceita um argumento booliano, que indica se uma captura de tela deverá ou não ser obtida após a conclusão de uma etapa.

with_screenshot_on_step_failure(screenshot_on_step_failure)

Aceita um argumento booliano, que indica se uma captura de tela deverá ou não ser obtida depois que uma etapa falhar.

get_screenshot_on_step_start()

Retorna se uma captura de tela será ou não obtida antes de iniciar uma etapa.

get_screenshot_on_step_success()

Retorna se uma captura de telam será ou não obtida depois que uma etapa for concluída.

get_screenshot_on_step_failure()

Retorna se uma captura de tela será ou não obtida depois que uma etapa falhar.

disable_step_screenshots()

Desabilita todas as opções de captura de tela (get_screenshot_on_step_start, get_screenshot_on_step_success e get_screenshot_on_step_failure).

enable_step_screenshots()

Habilita todas as opções de captura de tela (get_screenshot_on_step_start, get_screenshot_on_step_success e get_screenshot_on_step_failure). Por padrão, todas essas métricas são permitidas.

setConfig(options) em relação a métricas do CloudWatch

Para canários que usam syn-python-selenium-1.1 ou posteriores, (options) para setConfig pode incluir os seguintes parâmetros boolianos que determinam quais métricas serão publicadas pelo canário. O padrão para cada uma dessas opções é true. As opções que começam com aggregated determinam se a métrica será emitida sem a dimensão CanaryName. É possível usar essas métricas para ver os resultados agregados de todos os seus canaries. As outras opções determinam se a métrica será emitida com a dimensão CanaryName. Você pode usar essas métricas para ver os resultados de cada canário individual.

Para obter uma lista de métricas do CloudWatch emitidas por canaries, consulte Métricas do CloudWatch publicadas por canaries.

  • failed_canary_metric (booliano): se deverá ou não emitir a métrica Failed (com a dimensão CanaryName) para esse canário. O padrão é true.

  • failed_requests_metric (booliano): se deverá ou não emitir a métrica Failed requests (com a dimensão CanaryName) para esse canário. O padrão é true.

  • 2xx_metric (booliano): se deverá ou não emitir a métrica 2xx (com a dimensão CanaryName) para esse canário. O padrão é true.

  • 4xx_metric (booliano): se deverá ou não emitir a métrica 4xx (com a dimensão CanaryName) para esse canário. O padrão é true.

  • 5xx_metric (booliano): se deverá ou não emitir a métrica 5xx (com a dimensão CanaryName) para esse canário. O padrão é true.

  • step_duration_metric (booliano): se deverá ou não emitir a métrica Step duration (com as dimensões CanaryName StepName) para esse canário. O padrão é true.

  • step_success_metric (booliano): se deverá ou não emitir a métrica Step success (com as dimensões CanaryName StepName) para esse canário. O padrão é true.

  • aggregated_failed_canary_metric (booliano): se deverá ou não emitir a métrica Failed (sem a dimensão CanaryName) para esse canário. O padrão é true.

  • aggregated_failed_requests_metric (booliano): se deverá ou não emitir a métrica Failed Requests (sem a dimensão CanaryName) para esse canário. O padrão é true.

  • aggregated_2xx_metric (booliano): se deverá ou não emitir a métrica 2xx (sem a dimensão CanaryName) para esse canário. O padrão é true.

  • aggregated_4xx_metric (booliano): se deverá ou não emitir a métrica 4xx (sem a dimensão CanaryName) para esse canário. O padrão é true.

  • aggregated_5xx_metric (booliano): se deverá ou não emitir a métrica 5xx (sem a dimensão CanaryName) para esse canário. O padrão é true.

with_2xx_metric(2xx_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica 2xx com a dimensão CanaryName para esse canário.

with_4xx_metric(4xx_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica 4xx com a dimensão CanaryName para esse canário.

with_5xx_metric(5xx_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica 5xx com a dimensão CanaryName para esse canário.

withAggregated2xxMetric(aggregated2xxMetric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica 2xx sem dimensão para esse canário.

withAggregated4xxMetric(aggregated4xxMetric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica 4xx sem dimensão para esse canário.

with_aggregated_5xx_metric(aggregated_5xx_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica 5xx sem dimensão para esse canário.

with_aggregated_failed_canary_metric(aggregated_failed_canary_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica Failed sem dimensão para esse canário.

with_aggregated_failed_requests_metric(aggregated_failed_requests_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica Failed requests sem dimensão para esse canário.

with_failed_canary_metric(failed_canary_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica Failed com a dimensão CanaryName para esse canário.

with_failed_requests_metric(failed_requests_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica Failed requests com a dimensão CanaryName para esse canário.

with_step_duration_metric(step_duration_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica Duration com a dimensão CanaryName para esse canário.

with_step_success_metric(step_success_metric)

Aceita um argumento booliano, que especifica se deverá emitir ou não uma métrica StepSuccess com a dimensão CanaryName para esse canário.

Métodos para habilitar ou desabilitar métricas

disable_aggregated_request_metrics()

Não permite que o canário emita todas as métricas de solicitação emitidas sem a dimensão CanaryName.

disable_request_metrics()

Desabilita todas as métricas de solicitação, inclusive métricas por canário e métricas agregadas em todos os canários.

disable_step_metrics()

Desativa todas as métricas de etapa, incluindo métricas de sucesso e de duração da etapa.

enable_aggregated_request_metrics()

Habilita o canário a emitir todas as métricas de solicitação emitidas sem a dimensão CanaryName.

enable_request_metrics()

Habilita todas as métricas de solicitação, inclusive métricas por canário e métricas agregadas em todos os canários.

enable_step_metrics()

Ativa todas as métricas de etapa, incluindo métricas de sucesso e métricas de duração da etapa.

Uso em canaries de interface do usuário

Primeiro, importe a dependência do Synthetics e busque a configuração. Em seguida, defina a configuração para cada opção chamando o método SetConfig usando uma das opções a seguir.

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

Ou

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

Para desabilitar todas as capturas de tela, use a função disableStepScreenshots() como neste exemplo.

synthetics_configuration.disable_step_screenshots()

É possível habilitar e desabilitar as capturas de tela em qualquer ponto do código. Por exemplo, para desabilitar capturas de tela apenas para uma etapa, desabilite-as antes de executar essa etapa e habilite-as após a etapa.

set_config(options) para canaries de interface do usuário

Começando com syn-python-selenium-1.1, para os canaries de interface do usuário, set_config pode incluir os seguintes parâmetros boolianos:

  • continue_on_step_failure (booliano): se continuará ou não executando o script do canário após a falha de uma etapa (isso se refere à função executeStep). Se alguma etapa falhar, a execução do canário ainda será marcada como falha. O padrão é false.

Classe SyntheticsLogger

O synthetics_logger grava logs no console e em um arquivo de log local no mesmo nível de log. Este arquivo de logs é gravado em ambos os locais apenas se o nível de registo estiver no nível de registo pretendido ou abaixo da função de registo que foi chamada.

As instruções de log no arquivo de log local são precedidas por "DEBUG: ", "INFO: " e assim por diante para corresponder ao nível de log da função que foi chamada.

Não é necessário usar o synthetics_logger para criar um arquivo de log que está carregando o local de resultados do Amazon S3. Em vez disso, você pode criar um arquivo de log diferente na pasta /tmp. Todos os arquivos criados sob a pasta /tmp são carregados para o local de resultados no bucket do S3 como artefatos.

Para usar synthetics_logger:

from aws_synthetics.common import synthetics_logger

Definições úteis de função:

Obter nível do log:

log_level = synthetics_logger.get_level()

Definir nível do log:

synthetics_logger.set_level()

Registre em log uma mensagem com um nível especificado. O nível pode ser DEBUG, INFO, WARN ou ERROR, como nos exemplos de sintaxe a seguir:

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 obter informações sobre parâmetros de depuração, consulte a documentação padrão do Python em logging.debug

Nessas funções de log, message é a string do formato da mensagem. args são os argumentos que são mesclados em msg usando o operador de formatação de string.

Há três argumentos de palavra-chave em kwargs:

  • exc_info: se não for avaliado como false, adicionará informações de exceção à mensagem de log.

  • stack_info: o padrão é false. Se true, adicionará informações de pilha à mensagem de log, incluindo a chamada de log real.

  • extra: o terceiro argumento opcional de palavra-chave, que você pode usar para aprovar um dicionário que é usado para preencher o __dict__ do LogRecord criado para o evento de log com atributos definidos pelo usuário.

Exemplos:

Registrar em log uma mensagem com o nível DEBUG:

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

Registrar em log uma mensagem com o nível INFO. logger.log é sinônimo de logger.info:

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

or

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

Registrar uma mensagem com o nível WARN:

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

Registrar uma mensagem com o nível ERROR:

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

Registre em log uma exceção:

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

Regista uma mensagem com o nível ERROR. Informações de exceção são adicionadas à mensagem de log. Você deve chamar essa função apenas a partir de um manipulador de exceção.

Para obter informações sobre parâmetros de exceção, consulte a documentação padrão do Python em logging.exception

A message é a string de formato da mensagem. args são os argumentos, que são mesclados em msg usando o operador de formatação de string.

Há três argumentos de palavra-chave em kwargs:

  • exc_info: se não for avaliado como false, adicionará informações de exceção à mensagem de log.

  • stack_info: o padrão é false. Se true, adicionará informações de pilha à mensagem de log, incluindo a chamada de log real.

  • extra: o terceiro argumento opcional de palavra-chave, que você pode usar para aprovar um dicionário que é usado para preencher o __dict__ do LogRecord criado para o evento de log com atributos definidos pelo usuário.

Exemplo: .

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

Classes e funções de biblioteca Python e Selenium que se aplicam apenas a canaries de interface do usuário

As seguintes funções de biblioteca do Selenium do CloudWatch Synthetics para Python são úteis somente para canaries de interface do usuário.

Classe SyntheticsBrowser

Quando você cria uma instância do navegador chamando synthetics_webdriver.Chrome(), a instância do navegador retornada é do tipo SyntheticsBrowser. A classe SyntheticsBrowser controla o ChromeDriver e permite que o script do canário conduza o navegador, permitindo que o Selenium WebDriver funcione com o Synthetics.

Além dos métodos padrão do Selenium, ele também fornece os métodos abaixo.

set_viewport_size(width, height)

Define o visor do navegador. Exemplo: .

browser.set_viewport_size(1920, 1080)

save_screenshot(filename, suffix)

Salva capturas de tela no diretório /tmp. As capturas de tela são carregadas de lá para a pasta de artefatos do canário no bucket do S3.

filename é o nome do arquivo para a captura de tela, e suffix é uma string opcional a ser usada para nomear a captura de tela.

Exemplo: .

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

Classe SyntheticsWebDriver

Para usar essa classe, use o seguinte no script:

from aws_synthetics.selenium import synthetics_webdriver

add_execution_error(errorMessage, ex);

errorMessage descreve o erro, e ex é a exceção encontrada

Você pode usar add_execution_error para definir erros de execução eu seu canário. Ele faz o canário falhar sem interromper a execução do script. Também não afeta suas métricas successPercent.

Convém rastrear erros como erros de execução somente se eles não forem importantes para indicar o sucesso ou falha do script do canário.

A seguir há um exemplo de uso do elemento add_execution_error. Você está monitorando a disponibilidade de seu endpoint e fazendo capturas de tela depois que a página foi carregada. Como a falha de obter uma captura de tela não determina a disponibilidade do endpoint, é possível detectar quaisquer erros encontrados durante a captura de tela e adicioná-los como erros de execução. Suas métricas de disponibilidade ainda indicarão que o endpoint está ativo e em execução, mas o status do canário será marcado como falha. O bloco de código de exemplo a seguir captura esse erro e adiciona-o como erro de execução.

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)

Anexa o valor de user_agent_str ao cabeçalho do atendente do usuário do navegador. É necessário atribuir user_agent_str antes de criar a instância do navegador.

Exemplo: .

synthetics_webdriver.add_user_agent('MyApp-1.0')

execute_step(step_name, function_to_execute)

Processa uma função. Ela também faz o seguinte:

  • Registra que a etapa começou.

  • Faz uma captura de tela chamada <stepName>-starting.

  • Inicia um temporizador.

  • Executa a função fornecida.

  • Se a função retornar normalmente, ela contará como aprovada. Se a função apresentar erro, ela contará como falha.

  • Encerra o temporizador.

  • Registra se a etapa foi aprovada ou falhou

  • Faz uma captura de tela chamada <stepName>-succeeded ou <stepName>-failed.

  • Emite a métrica stepName SuccessPercent, 100 para aprovação ou 0 para falha.

  • Emite a métrica stepName Duration com um valor de acordo com os horários inicial e final da etapa.

  • Finalmente, retorna o que functionToExecute retornou ou lança novamente o que functionToExecute lançou.

Exemplo: .

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)

get_http_response(url)

Faz uma solicitação HTTP à URL fornecida e retorna o código de resposta dessa solicitação HTTP. Se ocorrer uma exceção durante a solicitação HTTP, será retornada uma string com o valor "error".

Exemplo: .

response_code = syn_webdriver.get_http_response(url) if not response_code or response_code == "error" or response_code < 200 or response_code > 299: raise Exception("Failed to load page!")

Chrome()

Inicia uma instância do navegador Chromium e retorna a instância criada do navegador.

Exemplo: .

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

Para iniciar um navegador no modo anônimo, use o seguinte:

add_argument('——incognito')

Para adicionar configurações de proxy, use o seguinte:

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

Exemplo: .

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