库函数可用于使用 Selenium 的 Python Canary 脚本 - Amazon CloudWatch
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

库函数可用于使用 Selenium 的 Python Canary 脚本

本节列出了可用于 Python Canary 脚本的 Selenium 库函数。

适用于所有 Canary 的 Python 和 Selenium 库类和函数

以下适用于 Python 的 CloudWatch Synthetics Selenium 库函数适用于所有 Canary。

SyntheticsConfiguration 类

您可以使用 SyntheticsConfiguration 类配置 Synthetics 库函数的行为。例如,您可以使用此类将 executeStep() 函数配置为不捕获屏幕截图。

您可以在全局级别设置 CloudWatch Synthetics 配置。

函数定义:

set_config(选项)

from aws_synthetics.common import synthetics_configuration

options 是一个对象,它是一组可配置的选项,用于您的 Canary。以下部分说明了 中的可能字段options

  • screenshot_on_step_start (布尔值)—是否在开始步骤之前拍摄屏幕截图。

  • screenshot_on_step_success (布尔值)— 成功完成步骤后是否拍摄屏幕截图。

  • screenshot_on_step_failure (布尔值)— 是否在步骤失败后拍摄屏幕截图。

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)。默认情况下,启用所有这些方法。

UI Canary 中的用法

首先,导入合成依赖项并提取配置。然后,通过使用以下选项之一调用 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()

您可以在代码中的任何时间点启用和禁用屏幕截图。例如,要仅为一个步骤禁用屏幕截图,请在运行该步骤之前禁用屏幕截图,然后在该步骤之后启用屏幕截图。

SyntheticsLogger 类

synthetics_logger 将日志写入控制台和同一日志级别的本地日志文件。仅当日志级别与所调用的日志函数所需的日志记录级别相同或比其级别低时,此日志文件才会写入到这两个位置。

本地日志文件中的日志记录语句前面加上“DEBUG:”、“INFO:”等,以便与所调用的函数的日志级别相匹配。

synthetics_logger 不需要使用 创建上传到Amazon S3结果位置的日志文件。您可以在 /tmp 文件夹中创建不同的日志文件。在 /tmp 文件夹下创建的任何文件都将作为构件上传到 S3 存储桶中的结果位置。

要使用 synthetics_logger,请执行以下操作:

from aws_synthetics.common import synthetics_logger

有用的函数定义:

获取日志级别:

log_level = synthetics_logger.get_level()

设置日志级别:

synthetics_logger.set_level()

使用指定级别记录消息。关卡可以是 DEBUGINFOWARNERROR,如以下语法示例所示:

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)

有关调试参数的信息,请参阅 logging.debug 上的标准 Python 文档

在这些日志记录函数中, message 是消息格式字符串。argsmsg使用字符串格式运算符合并到 中的参数。

中具有三个关键字参数kwargs

  • exc_info– 如果未计算为 false,则 会将异常信息添加到日志记录消息中。

  • stack_info– 默认为 false。如果为 true,则 将堆栈信息添加到日志记录消息,包括实际的日志记录调用。

  • extra– 第三个可选关键字参数,可用于传入词典,该词典用于使用用户定义的属性填充为日志记录事件__dict__创建的 LogRecord 的 。

示例:

使用级别 记录消息DEBUG

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

使用 级别记录消息INFOlogger.log 是 的同义词logger.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。 异常信息将添加到日志记录消息中。您应该仅从异常处理程序调用此函数。

有关异常参数的信息,请参阅 logging.exception 中的标准 Python 文档

message 是消息格式字符串。argsmsg使用字符串格式运算符合并到 中的参数。

中具有三个关键字参数kwargs

  • exc_info– 如果未计算为 false,则 会将异常信息添加到日志记录消息中。

  • stack_info– 默认为 false。如果为 true,则 将堆栈信息添加到日志记录消息,包括实际的日志记录调用。

  • extra– 第三个可选关键字参数,可用于传入词典,该词典使用用户定义的属性填充为日志记录事件__dict__创建的 LogRecord 的 。

示例:

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(),返回的浏览器实例的类型是 SyntheticsBrowserSyntheticsBrowser 类控制 ChromeDriver,并允许 Canary 脚本驱动浏览器,从而允许 Selenium WebDriver 使用 Synthetics。

除了标准 Selenium 方法之外,它还提供以下方法。

set_viewport_size(宽度,高度)

设置浏览器的视区。示例:

browser.set_viewport_size(1920, 1080)

set_viewport_size(宽度,高度)

将屏幕截图保存到 /tmp 目录中。屏幕截图从该位置上传到 S3 存储桶中的 Canary artifacts 文件夹。

filename 是屏幕截图的文件名,后缀是用于命名屏幕截图的可选字符串。

示例:

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

SyntheticsWebDriver 类

要使用此类,请在脚本中使用以下内容:

from aws_synthetics.selenium import synthetics_webdriver

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 抛出的内容。

示例:

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