Selenium을 사용하는 Python canary 스크립트에 사용할 수 있는 라이브러리 함수 - Amazon CloudWatch

Selenium을 사용하는 Python canary 스크립트에 사용할 수 있는 라이브러리 함수

이 단원에서는 Python canary 스크립트에 사용할 수 있는 Selenium 라이브러리 함수를 설명합니다.

모든 canary에 적용되는 Python 및 Selenium 라이브러리 클래스 및 함수

다음 Python용 CloudWatch Synthetics Selenium 라이브러리 함수는 모든 canary에 사용할 수 있습니다.

SyntheticsConfiguration 클래스

SyntheticsConfiguration 클래스를 사용하여 Synthetics 라이브러리 함수의 동작을 구성할 수 있습니다. 예를 들어 이 클래스를 사용하여 스크린샷을 캡처하지 않도록 executeStep() 함수를 구성할 수 있습니다.

글로벌 수준에서 CloudWatch Synthetics 구성을 설정할 수 있습니다.

함수 정의:

set_config(options)

from aws_synthetics.common import synthetics_configuration

options는 canary에 대해 구성 가능한 옵션의 집합인 객체입니다. 다음 단원에서는 options의 가능한 필드를 설명합니다.

  • screenshot_on_step_start(boolean) - 단계를 시작하기 전에 스크린샷을 생성할지 여부입니다.

  • screenshot_on_step_success(boolean) - 성공적인 단계를 완료한 후 스크린샷을 생성할지 여부입니다.

  • screenshot_on_step_failure(boolean) - 단계가 실패한 후 스크린샷을 생성할지 여부입니다.

with_screenshot_on_step_start(screenshot_on_step_start)

단계를 시작하기 전에 스크린샷을 생성할지 여부를 나타내는 부울 인수를 허용합니다.

with_screenshot_on_step_success(screenshot_on_step_success)

단계를 성공적으로 완료한 후 스크린샷을 생성할지 여부를 나타내는 부울 인수를 허용합니다.

with_screenshot_on_step_failure(screenshot_on_step_failure)

단계가 실패한 후 스크린샷을 생성할지 여부를 나타내는 부울 인수를 허용합니다.

get_screenshot_on_step_start()

단계를 시작하기 전에 스크린샷을 생성할지 여부를 반환합니다.

get_screenshot_on_step_success()

단계를 성공적으로 완료한 후 스크린샷을 생성할지 여부를 반환합니다.

get_screenshot_on_step_failure()

단계가 실패한 후 스크린샷을 생성할지 여부를 반환합니다.

disable_step_screenshots()

모든 스크린샷 옵션(get_screenshot_on_step_start, get_screenshot_on_step_success, get_screenshot_on_step_failure)을 사용 중지합니다.

enable_step_screenshots()

모든 스크린샷 옵션(get_screenshot_on_step_start, get_screenshot_on_step_success, get_screenshot_on_step_failure)을 사용하도록 설정합니다. 기본적으로 이러한 메서드는 모두 사용 설정되어 있습니다.

CloudWatch 지표에 관한 setConfig(options)

syn-python-selenium-1.1 이상을 사용하는 canary의 경우 setConfig(options)에는 canary에서 게시하는 지표를 결정하는 다음 부울 파라미터가 포함될 수 있습니다. 이러한 각 옵션의 기본값은 true입니다. aggregated로 시작하는 옵션은 CanaryName 측정기준 없이 지표를 내보낼지 여부를 결정합니다. 이러한 지표를 사용하여 모든 canary에 대한 집계 결과를 확인할 수 있습니다. 다른 옵션은 CanaryName 측정기준과 함께 지표를 내보낼지 여부를 결정합니다. 이러한 지표를 사용하여 각 개별 canary의 결과를 확인할 수 있습니다.

canary에서 내보내는 CloudWatch 지표 목록은 canary가 게시한 CloudWatch 지표 단원을 참조하세요.

  • failed_canary_metric(boolean) - 이 canary에 대한 Failed 지표를 (CanaryName 측정기준과 함께) 내보낼지 여부입니다. 기본값은 true입니다.

  • failed_requests_metric(boolean) - 이 canary에 대한 Failed requests 지표를 (CanaryName 측정기준과 함께) 내보낼지 여부입니다. 기본값은 true입니다.

  • 2xx_metric(boolean) - 이 canary에 대한 2xx 지표를 (CanaryName 측정기준과 함께) 내보낼지 여부입니다. 기본값은 true입니다.

  • 4xx_metric(boolean) - 이 canary에 대한 4xx 지표를 (CanaryName 측정기준과 함께) 내보낼지 여부입니다. 기본값은 true입니다.

  • 5xx_metric(boolean) - 이 canary에 대한 5xx 지표를 (CanaryName 측정기준과 함께) 내보낼지 여부입니다. 기본값은 true입니다.

  • step_duration_metric(boolean) - 이 canary에 대한 Step duration 지표를 (CanaryName StepName 측정기준과 함께) 내보낼지 여부입니다. 기본값은 true입니다.

  • step_success_metric(boolean) - 이 canary에 대한 Step success 지표를 (CanaryName StepName 측정기준과 함께) 내보낼지 여부입니다. 기본값은 true입니다.

  • aggregated_failed_canary_metric(boolean) - 이 canary에 대한 Failed 지표를 (CanaryName 측정기준 없이) 내보낼지 여부입니다. 기본값은 true입니다.

  • aggregated_failed_requests_metric(boolean) - 이 canary에 대한 Failed Requests 지표를 (CanaryName 측정기준 없이) 내보낼지 여부입니다. 기본값은 true입니다.

  • aggregated_2xx_metric(boolean) - 이 canary에 대한 2xx 지표를 (CanaryName 측정기준 없이) 내보낼지 여부입니다. 기본값은 true입니다.

  • aggregated_4xx_metric(boolean) - 이 canary에 대한 4xx 지표를 (CanaryName 측정기준 없이) 내보낼지 여부입니다. 기본값은 true입니다.

  • aggregated_5xx_metric(boolean) - 이 canary에 대한 5xx 지표를 (CanaryName 측정기준 없이) 내보낼지 여부입니다. 기본값은 true입니다.

with_2xx_metric(2xx_metric)

이 canary에 대한 CanaryName 측정기준과 함께 2xx 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

with_4xx_metric(4xx_metric)

이 canary에 대한 CanaryName 측정기준과 함께 4xx 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

with_5xx_metric(5xx_metric)

이 canary에 대한 CanaryName 측정기준과 함께 5xx 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

withAggregated2xxMetric(aggregated2xxMetric)

이 canary에 대한 측정기준 없이 2xx 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

withAggregated4xxMetric(aggregated4xxMetric)

이 canary에 대한 측정기준 없이 4xx 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

with_aggregated_5xx_metric(aggregated_5xx_metric)

이 canary에 대한 측정기준 없이 5xx 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

with_aggregated_failed_canary_metric(aggregated_failed_canary_metric)

이 canary에 대한 측정기준 없이 Failed 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

with_aggregated_failed_requests_metric(aggregated_failed_requests_metric)

이 canary에 대한 측정기준 없이 Failed requests 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

with_failed_canary_metric(failed_canary_metric)

이 canary에 대한 CanaryName 측정기준과 함께 Failed 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

with_failed_requests_metric(failed_requests_metric)

이 canary에 대한 CanaryName 측정기준과 함께 Failed requests 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

with_step_duration_metric(step_duration_metric)

이 canary에 대한 CanaryName 측정기준과 함께 Duration 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

with_step_success_metric(step_success_metric)

이 canary에 대한 CanaryName 측정기준과 함께 StepSuccess 지표를 내보낼지 여부를 지정하는 부울 인수를 허용합니다.

지표를 사용 또는 사용 중지하는 메서드

disable_aggregated_request_metrics()

canary가 CanaryName 측정기준 없이 내보내지는 모든 요청 지표를 내보내지 못하도록 합니다.

disable_request_metrics()

canary별 지표와 모든 canary에서 집계된 지표를 모두 포함하여 모든 요청 지표를 사용 중지합니다.

disable_step_metrics()

단계 성공 지표 및 단계 지속 시간 지표 모두를 포함하여 모든 단계 지표를 사용 중지합니다.

enable_aggregated_request_metrics()

canary가 CanaryName 측정기준 없이 내보내지는 모든 요청 지표를 내보낼 수 있도록 합니다.

enable_request_metrics()

canary별 지표와 모든 canary에서 집계된 지표를 모두 포함하여 모든 요청 지표를 사용하도록 설정합니다.

enable_step_metrics()

단계 성공 지표 및 단계 지속 시간 지표 모두를 포함하여 모든 단계 지표를 사용 설정합니다.

UI canary의 사용

먼저, Synthetics 종속 항목을 가져오고 구성을 가져옵니다. 다음으로, 다음 옵션 중 하나를 사용하여 setConfig 메서드를 호출함으로써 각 옵션의 구성을 설정합니다.

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

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

모든 스크린샷을 사용 중지하려면 이 예와 같이 disableStepScreenshots() 함수를 사용합니다.

synthetics_configuration.disable_step_screenshots()

코드의 어느 지점에서든 스크린샷을 사용 및 사용 중지할 수 있습니다. 예를 들어 한 단계에 대해서만 스크린샷을 사용 중지하려면 해당 단계를 실행하기 전에 스크린샷을 사용 중지한 다음, 이 단계가 끝나면 스크린샷을 사용하도록 설정합니다.

UI canary에 대한 set_config(options)

syn-python-selenium-1.1을 시작으로 UI canary의 경우 set_config에 다음 부울 파라미터가 포함될 수 있습니다.

  • continue_on_step_failure(boolean) - 단계가 실패한 후 canary 스크립트를 계속 실행할지 여부입니다(단계 실패에 대해서는 executeStep 함수 참조). 단계가 실패한 경우 canary 실행은 여전히 ​​실패로 표시됩니다. 기본값은 false입니다.

SyntheticsLogger 클래스

synthetics_logger는 동일한 로그 수준에서 콘솔과 로컬 로그 파일 모두에 로그를 작성합니다. 이 로그 파일은 로그 수준이 호출된 로그 함수의 원하는 로깅 수준 이하인 경우에만 두 위치에 기록됩니다.

로컬 로그 파일의 로깅 문 앞에는 호출된 함수의 로그 수준과 일치하도록 “DEBUG: “, “INFO: “등이 추가됩니다.

Amazon S3 결과 위치에 업로드되는 로그 파일을 생성할 때는 synthetics_logger를 사용할 필요가 없습니다. 대신 /tmp 폴더에 다른 로그 파일을 생성할 수 있습니다. /tmp 폴더 아래에 생성된 파일은 S3 버킷의 결과 위치에 아티팩트로 업로드됩니다.

synthetics_logger를 사용하려면

from aws_synthetics.common import synthetics_logger

유용한 함수 정의:

로그 수준 가져오기:

log_level = synthetics_logger.get_level()

로그 수준 설정:

synthetics_logger.set_level()

지정된 수준의 메시지를 로그합니다. 수준은 다음 구문 예와 같이 DEBUG, INFO, WARN 또는 ERROR일 수 있습니다.

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)

디버그 파라미터에 대한 자세한 내용은 표준 Python 설명서의 logging.debug를 참조하세요.

이러한 로깅 함수에서 message는 메시지 형식 문자열입니다. args는 문자열 형식 지정 연산자를 사용하여 msg에 병합되는 인수입니다.

kwargs에는 다음과 같은 세 가지 키워드 인수가 있습니다.

  • exc_info - false로 평가되지 않은 경우 예외 정보를 로깅 메시지에 추가합니다.

  • stack_info - 기본값은 false입니다. true인 경우 실제 로깅 호출을 포함하여 스택 정보를 로깅 메시지에 추가합니다.

  • extra - 사용자 정의 속성으로 로깅 이벤트에 대해 생성된 LogRecord__dict__를 채우는 데 사용되는 사전을 전달하는 데 사용할 수 있는 세 번째 선택적 키워드 인수입니다.

예시:

DEBUG 수준의 메시지 로그:

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

INFO 수준의 메시지 로그(logger.loglogger.info의 동의어임):

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

또는

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

WARN 수준의 메시지 로그:

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

ERROR 수준의 메시지 로그:

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

예외 로그:

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

ERROR 수준의 메시지를 로그합니다. 예외 정보가 로깅 메시지에 추가됩니다. 예외 핸들러에서만 이 함수를 호출해야 합니다.

예외 파라미터에 대한 자세한 내용은 표준 Python 설명서의 logging.exception을 참조하세요.

message는 메시지 형식 문자열입니다. args는 문자열 형식 지정 연산자를 사용하여 msg에 병합되는 인수입니다.

kwargs에는 다음과 같은 세 가지 키워드 인수가 있습니다.

  • exc_info - false로 평가되지 않은 경우 예외 정보를 로깅 메시지에 추가합니다.

  • stack_info - 기본값은 false입니다. true인 경우 실제 로깅 호출을 포함하여 스택 정보를 로깅 메시지에 추가합니다.

  • extra - 사용자 정의 속성으로 로깅 이벤트에 대해 생성된 LogRecord__dict__를 채우는 데 사용되는 사전을 전달하는 데 사용할 수 있는 세 번째 선택적 키워드 인수입니다.

예제

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

UI canary에만 적용되는 Python 및 Selenium 라이브러리 클래스 및 함수

다음 Python용 CloudWatch Synthetics Selenium 라이브러리 함수는 UI canary에만 사용할 수 있습니다.

SyntheticsBrowser 클래스

synthetics_webdriver.Chrome()을 호출하여 브라우저 인스턴스를 생성할 때 반환되는 브라우저 인스턴스는 SyntheticsBrowser 유형입니다. SyntheticsBrowser 클래스는 ChromeDriver를 제어하고 canary 스크립트가 브라우저를 구동할 수 있도록 하여 Selenium WebDriver가 Synthetics와 함께 작동할 수 있도록 합니다.

이 클래스는 표준 Selenium 메서드 외에 다음 메서드도 제공합니다.

set_viewport_size(width, height)

브라우저의 뷰포트를 설정합니다. 예제

browser.set_viewport_size(1920, 1080)

save_screenshot(filename, suffix)

스크린샷을 /tmp 디렉터리에 저장합니다. 스크린샷은 이 디렉터리에서 S3 버킷의 canary 아티팩트 폴더로 업로드됩니다.

filename은 스크린샷의 파일 이름이며, suffix는 스크린샷의 이름을 지정하는 데 사용할 선택적 문자열입니다.

예제

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

SyntheticsWebDriver 클래스

이 클래스를 사용하려면 스크립트에서 다음을 사용합니다.

from aws_synthetics.selenium import synthetics_webdriver

add_execution_error(errorMessage, ex);

errorMessage는 오류를 설명하며, ex는 발생한 예외입니다.

add_execution_error를 사용하여 canary에 대한 실행 오류를 설정할 수 있습니다. 이 함수는 스크립트 실행을 중단하지 않고 canary에 실패합니다. 또한 successPercent 지표에 영향을 주지 않습니다.

오류가 canary 스크립트의 성공 또는 실패를 나타내는 데 중요하지 않은 경우에만 오류를 실행 오류로 추적해야 합니다.

add_execution_error의 사용 예는 다음과 같습니다. 엔드포인트의 가용성을 모니터링하고 페이지가 로드된 후에 스크린샷을 생성합니다. 스크린샷 캡처 실패가 엔드포인트의 가용성을 결정하지 않기 때문에 스크린샷을 생성하는 동안 발생한 오류를 포착하여 실행 오류로 추가할 수 있습니다. 가용성 지표는 여전히 ​​엔드포인트가 실행 중임을 나타내지만 canary 상태는 실패로 표시됩니다. 다음 샘플 코드 블록은 이러한 오류를 포착하여 실행 오류로 추가합니다.

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)

브라우저의 사용자 에이전트 헤더에 user_agent_str 값을 추가합니다. 브라우저 인스턴스를 생성하기 전에 user_agent_str을 할당해야 합니다.

예제

synthetics_webdriver.add_user_agent('MyApp-1.0')

execute_step(step_name, function_to_execute)

하나의 함수를 처리합니다. 또한 다음을 수행합니다.

  • 단계가 시작되었음을 기록합니다.

  • 이름이 <stepName>-starting인 스크린샷을 캡처합니다.

  • 타이머를 시작합니다.

  • 제공된 함수를 실행합니다.

  • 함수가 값을 정상적으로 반환하면 성공한 것으로 간주됩니다. 함수가 오류를 생성하면 실패한 것으로 간주됩니다.

  • 타이머를 종료합니다.

  • 단계 성공 또는 실패 여부를 기록합니다.

  • 이름이 <stepName>-succeeded 또는 <stepName>-failed인 스크린샷을 캡처합니다.

  • stepName SuccessPercent 지표(성공 시 100, 실패 시 0)를 내보냅니다.

  • 단계 시작 및 종료 시간 기준의 값을 사용하여 stepName Duration 지표를 내보냅니다.

  • 마지막으로, functionToExecute에서 반환된 값을 반환하고 functionToExecute에서 생성된 오류를 다시 생성합니다.

예제

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()

Chromium 브라우저의 인스턴스를 시작하고 브라우저의 생성된 인스턴스를 반환합니다.

예제

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

시크릿 모드로 브라우저를 시작하려면 다음을 사용하세요.

add_argument('——incognito')

프록시 설정을 추가하려면 다음을 사용하세요.

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

예제

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