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

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

库函数可用于 Node.js Canary 脚本

本节列出了可用于 Node.js Canary 脚本的库函数。

适用于所有 Canary 的 Node.js 库类和函数

以下适用于 Node.js 的 CloudWatch Synthetics 库函数对所有 Canary 都非常有用。

Synthetics 类

所有 Canary 的以下函数都位于 Synthetics 类中。

addExecutionError(errorMessage,ex);

errorMessage 描述错误,ex是遇到的异常

您可以使用 addExecutionError 为 Canary 设置执行错误。它使 Canary 失败,而不会中断脚本执行。这不会影响您的successPercent指标。

仅当错误不重要,无法指示 Canary 脚本成功或失败时,才应将错误作为执行错误进行跟踪。

addExecutionError 以下是使用 的示例。您正在监控终端节点的可用性,并在页面加载后拍摄屏幕截图。由于拍摄屏幕截图失败并不能确定终端节点的可用性,您可以捕获在拍摄屏幕截图时遇到的任何错误,并将它们添加为执行错误。您的可用性指标仍会指示终端节点已启动并正在运行,但您的 Canary 状态将标记为失败。以下示例代码块捕获此类错误并添加为执行错误。

try { await synthetics.takeScreenshot(stepName, "loaded"); } catch(ex) { synthetics.addExecutionError('Unable to take screenshot ', ex); }

getCanaryName();

返回 Canary 的名称。

getRuntimeVersion();

此函数在运行时版本 syn-nodejs-puppeteer-3.0 及更高版本中可用。它返回 Canary 的 Synthetics 运行时版本。例如,返回值可以是 syn-nodejs-puppeteer-3.0

getLogLevel();

检索 Synthetics 库的当前日志级别。可能的值包括:

  • 0 – 调试

  • 1 – 信息

  • 2 – 警告

  • 3 – 错误

例如:

let logLevel = synthetics.getLogLevel();

setLogLevel();

设置 Synthetics 库的日志级别。可能的值包括:

  • 0 – 调试

  • 1 – 信息

  • 2 – 警告

  • 3 – 错误

例如:

synthetics.setLogLevel(0);

SyntheticsConfiguration 类

此类仅在syn-nodejs-2.1运行时版本 或更高版本中可用。

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

您可以在全局级别设置 CloudWatch Synthetics 配置,这些配置将应用于 Canary 的所有步骤。您还可以通过传递配置键/值对来在步骤级别覆盖这些配置。

您可以在步骤级别传入选项。有关示例,请参阅 async executeStep(stepName,functionToExecute,[stepConfigexecuteHttpStep(stepName, requestOptions, [回调], [stepConfig

函数定义:

setConfig(选项)

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

所有 Canary 的 setConfig选项)

对于使用 syn-nodejs-pupeteer-3.1 或更高版本的 setConfig(选项)可以包含以下布尔参数,以确定 Canary 发布哪些指标。每个选项的默认值为 true。以 开头的选项aggregated将确定是否在没有CanaryName维度的情况下发出指标。您可以使用这些指标查看所有 Canary 的聚合结果。其他选项确定指标是否随CanaryName维度一起发出。您可以使用这些指标查看每个单独 Canary 的结果。

有关 Canary 发出的CloudWatch指标的列表,请参阅CloudWatch Canary 发布的 指标

  • failedCanaryMetric (布尔值)— 是否为此 Canary 发出 Failed 指标(具有 CanaryName 维度)。默认值为 true

  • failedRequestsMetric (布尔值)— 是否为此 Canary 发出 Failed requests 指标(具有 CanaryName 维度)。默认值为 true

  • _2xxMetric (布尔值)— 是否为此 Canary 发出 2xx 指标(具有 CanaryName 维度)。默认值为 true

  • _4xxMetric (布尔值)— 是否为此 Canary 发出 4xx 指标(具有 CanaryName 维度)。默认值为 true

  • _5xxMetric (布尔值)— 是否为此 Canary 发出 5xx 指标(具有 CanaryName 维度)。默认值为 true

  • stepDurationMetric (布尔值)— 是否发出此 Canary 的 Step duration 指标(具有CanaryNameStepName维度)。默认值为 true

  • stepSuccessMetric (布尔值)— 是否发出此 Canary 的 Step success 指标(具有CanaryNameStepName维度)。默认值为 true

  • aggregatedFailedCanaryMetric (布尔值)— 是否为此 Canary 发出 Failed 指标(不带 CanaryName 维度)。默认值为 true

  • aggregatedFailedRequestsMetric (布尔值)— 是否为此 Canary 发出 Failed Requests 指标(不带 CanaryName 维度)。默认值为 true

  • aggregated2xxMetric (布尔值)— 是否为此 Canary 发出 2xx 指标(不带 CanaryName 维度)。默认值为 true

  • aggregated4xxMetric (布尔值)— 是否为此 Canary 发出 4xx 指标(不带 CanaryName 维度)。默认值为 true

  • aggregated5xxMetric (布尔值)— 是否为此 Canary 发出 5xx 指标(不带 CanaryName 维度)。默认值为 true

注意

DurationSuccessPercent 指标始终随指标一起发出CanaryName

启用或禁用指标的方法

disableAggregatedRequestMetrics()

禁止 Canary 发出无CanaryName维度发出的所有请求指标。

disableRequestMetrics()

禁用所有请求指标,包括每个 Canary 的指标以及跨所有 Canary 聚合的指标。

enableAggregatedRequestMetrics()

允许 Canary 发出所有不带CanaryName维度的请求指标。

enableRequestMetrics()

启用所有请求指标,包括每个 Canary 的指标以及跨所有 Canary 聚合的指标。

get2xxMetric()

返回 Canary 是否发出具有 2xx 维度的CanaryName指标。

get4xxMetric()

返回 Canary 是否发出具有 4xx 维度的CanaryName指标。

get5xxMetric()

返回 Canary 是否发出具有 5xx 维度的CanaryName指标。

getAggregated2xxMetric()

返回 Canary 是否发出不带维度的2xx指标。

getAggregated4xxMetric()

返回 Canary 是否发出不带维度的4xx指标。

getAggregatedFailedCanaryMetric()

返回 Canary 是否发出不带维度的Failed指标。

getAggregatedFailedRequestsMetric()

返回 Canary 是否发出不带维度的Failed requests指标。

getAggregated5xxMetric()

返回 Canary 是否发出不带维度的5xx指标。

getFailedCanaryMetric()

返回 Canary 是否发出具有 Failed 维度的CanaryName指标。

getFailedRequestsMetric()

返回 Canary 是否发出具有 Failed requests 维度的CanaryName指标。

getStepDurationMetric()

返回 Canary 是否发出具有此 Canary 的Duration维度的CanaryName指标。

getStepSuccessMetric()

返回 Canary 是否发出具有此 Canary 的StepSuccess维度的CanaryName指标。

with2xxMetric(_2xxMetric)

接受布尔值参数,该参数指定是否发出具有此 Canary 的2xx维度的CanaryName指标。

with4xxMetric(_4xxMetric)

接受布尔值参数,该参数指定是否发出具有此 Canary 的4xx维度的CanaryName指标。

with5xxMetric(_5xxMetric)

接受布尔值参数,该参数指定是否发出具有此 Canary 的5xx维度的CanaryName指标。

withAggregated2xxMetricaggregated2xxMetric)

接受布尔值参数,该参数指定是否为此 Canary 发出没有维度的2xx指标。

withAggregated4xxMetricaggregated4xxMetric)

接受布尔值参数,该参数指定是否发出没有维度的4xx指标用于此 Canary。

withAggregated5xxMetricaggregated5xxMetric)

接受布尔值参数,该参数指定是否为此 Canary 发出没有维度的5xx指标。

withAggregatedFailedCanaryMetric(aggregatedFailedCanaryMetric)

接受布尔值参数,该参数指定是否发出没有维度的Failed指标用于此 Canary。

withAggregatedFailedRequestsMetric(aggregatedFailedRequestsMetric)

接受布尔值参数,该参数指定是否发出没有维度的Failed requests指标用于此 Canary。

withFailedCanaryMetric(failedCanaryMetric)

接受布尔值参数,该参数指定是否发出具有此 Canary 的Failed维度的CanaryName指标。

withFailedRequestsMetric(failedRequestsMetric)

接受布尔值参数,该参数指定是否发出具有此 Canary 的Failed requests维度的CanaryName指标。

withStepDurationMetric(stepSuccessMetric)

接受布尔值参数,该参数指定是否发出具有此 Canary 的Duration维度的CanaryName指标。

withStepSuccessMetric(stepSuccessMetric)

接受布尔值参数,该参数指定是否发出具有此 Canary 的StepSuccess维度的CanaryName指标。

适用于 UI Canary 的 setConfig选项)

对于 UI setConfig 可以包含以下布尔参数:

  • continueOnStepFailure (布尔值)— 是否在某个步骤失败后继续运行 Canary 脚本(这是指 executeStep 函数)。如果任何步骤失败,则 Canary 运行仍将标记为失败。默认值为 false

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

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

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

启用或禁用屏幕截图的方法

disableStepScreenshots()

禁用所有屏幕截图选项screenshotOnStepStart、screenshotOnStepSuccess 和 screenshotOnStepFailure

enableStepScreenshots()

启用所有屏幕截图选项screenshotOnStepStart、screenshotOnStepSuccess 和 screenshotOnStepFailure 默认情况下,启用所有这些方法。

getScreenshotOnStepFailure()

返回在某个步骤失败后 Canary 是否拍摄屏幕截图。

getScreenshotOnStepStart()

返回 Canary 在开始步骤之前是否拍摄屏幕截图。

getScreenshotOnStepSuccess()

返回 Canary 是否在成功完成步骤后拍摄屏幕截图。

withScreenshotOnStepStart(screenshotOnStepStart)

接受布尔值参数,该参数指示是否在开始步骤之前拍摄屏幕截图。

withScreenshotOnStepSuccess(screenshotOnStepSuccess)

接受布尔值参数,该参数指示是否在成功完成步骤后拍摄屏幕截图。

withScreenshotOnStepFailure(screenshotOnStepFailure)

接受布尔值参数,该参数指示是否在步骤失败后拍摄屏幕截图。

UI Canary 中的用法

首先,导入合成依赖项并提取配置。

// Import Synthetics dependency const synthetics = require('Synthetics'); // Get Synthetics configuration const synConfig = synthetics.getConfiguration();

然后,使用以下选项之一调用 setConfig 方法以为每个选项设置配置。

// Set configuration values synConfig.setConfig({ screenshotOnStepStart: true, screenshotOnStepSuccess: false, screenshotOnStepFailure: false });

Or

synConfig.withScreenshotOnStepStart(false).withScreenshotOnStepSuccess(true).withScreenshotOnStepFailure(true)

要禁用所有屏幕截图,请使用 disableStepScreenshots) 函数,如本示例所示。

synConfig.disableStepScreenshots();

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

API Canary 的 setConfig选项)

对于 API setConfig 可以包含以下布尔参数:

  • continueOnHttpStepFailure (布尔值—)在 HTTP 步骤失败后是否继续运行 Canary 脚本(这是指 executeHttpStep 函数)。如果任何步骤失败,则 Canary 运行仍将标记为失败。默认值为 true

  • includeRequestHeaders (布尔值)— 是否在报告中包含请求标头。默认值为 false

  • includeResponseHeaders (布尔值)— 是否在报告中包含响应标头。默认值为 false

  • restrictedHeaders (数组)— 包含标头时要忽略的标头值的列表。这适用于请求和响应标头。例如,您可以通过将 includeRequestHeaders 传递为 true ,将 restrictedHeaders 传递为 来隐藏凭证['Authorization']

  • includeRequestBody (布尔值)— 是否将请求正文包含在报告中。默认值为 false

  • includeResponseBody (布尔值)— 是否在报告中包含响应正文。默认值为 false

适用于 API Canary 的函数

  • withIncludeRequestHeaders(includeRequestHeaders)

  • withIncludeResponseHeaders(includeRequestHeaders)

  • withRestrictedHeaders(restrictedHeaders)

  • withIncludeRequestBody(includeRequestBody)

  • withIncludeResponseBody(includeResponseBody)

  • enableReportingOptions()— 启用所有报告选项 - includeRequestHeadersincludeResponseHeadersincludeRequestBodyincludeResponseBody

  • disableReportingOptions()— 禁用所有报告选项 - includeRequestHeadersincludeResponseHeadersincludeRequestBodyincludeResponseBody

Synthetics 记录器

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

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

您可以使用 SyntheticsLogger假定您要在与 Synthetics Canary 日志记录相同的日志级别运行 Synthetics 库。

创建上传到 S3 结果位置的日志文件无需使用 SyntheticsLogger。您可以在 /tmp 文件夹中创建不同的日志文件。在 /tmp 文件夹下创建的任何文件都会作为构件上传到 S3 中的结果位置。

要使用 Synthetics 库日志记录程序,请执行以下操作:

const log = require('SyntheticsLogger');

有用的函数定义:

log.debug(message, ex);

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

log.debug("Starting step - login.");

log.error(message, ex);

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

try { await login(); catch (ex) { log.error("Error encountered in step - login.", ex); }

log.info(message, ex);

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

log.info("Successfully completed step - login.");

log.log(message, ex);

这是 log.info 的一个别名。

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

log.log("Successfully completed step - login.");

log.warn(message, ex);

参数:message 是要记录的消息。ex 是要记录的异常(如果有)。

例如:

log.warn("Exception encountered trying to publish CloudWatch Metric.", ex);

仅适用于 UI Canary 的 Node.js 库类和函数

以下适用于 Node.js 的 CloudWatch Synthetics 库函数仅适用于 UI Canary。

Synthetics 类

以下函数位于 Synthetics 类中。

async addUserAgent(page, userAgentString);

此函数附加 userAgentString 发送到指定页面的 user-agent 标头。

例如:

await synthetics.addUserAgent(page, "MyApp-1.0");

结果是页面的 User-Agent 标头被设置为 browsers-user-agent-header-valueMyApp-1.0

async executeStep(stepName,functionToExecute,[stepConfig

执行提供的步骤,并使用开始/通过/失败日志记录、开始/通过/失败屏幕截图,以及通过/失败和持续时间指标对其进行包装。

注意

如果您使用的是 syn-nodejs-2.1 或更高版本的运行时,则可以配置是否拍摄屏幕截图以及何时拍摄屏幕截图。有关更多信息,请参阅SyntheticsConfiguration 类

executeStep函数还将执行以下操作:

  • 记录步骤开始。

  • 获取名为 <stepName>-starting 的屏幕截图。

  • 启动计时器。

  • 执行提供的函数。

  • 如果函数正常返回,则计为通过。如果函数引发异常,则计为失败。

  • 结束计时器。

  • 记录步骤是通过还是失败

  • 获取名为 <stepName>-succeeded<stepName>-failed 的屏幕截图。

  • 发出 stepName SuccessPercent 指标,100 表示通过,0 表示失败。

  • 发出 stepName Duration 指标,指标的值基于步骤开始和结束时间。

  • 最后,返回 functionToExecute 返回的内容或重新抛出 functionToExecute 抛出的内容。

如果 Canary 使用syn-nodejs-2.0运行时 或更高版本,则此函数还会将步骤执行摘要添加到 Canary 的报告中。该摘要包含有关每个步骤的详细信息,例如,开始时间、结束时间、状态 (PASSED/FAILED)、失败原因 (如果失败) 和在每个步骤执行期间捕获的屏幕截图。

例如:

await synthetics.executeStep('navigateToUrl', async function (timeoutInMillis = 30000) { await page.goto(url, {waitUntil: ['load', 'networkidle0'], timeout: timeoutInMillis});});

响应:

返回 functionToExecute 返回的内容。

使用 syn-nodejs-2 的更新

从 开始syn-nodejs-2.2,您可以选择传递步骤配置以覆盖步骤级别的 CloudWatch Synthetics 配置。有关可以传递给 的选项的列表executeStep,请参阅SyntheticsConfiguration 类

以下示例将 的默认false配置覆盖continueOnStepFailuretrue ,并指定何时拍摄屏幕字符。

var stepConfig = { 'continueOnStepFailure': true, 'screenshotOnStepStart': false, 'screenshotOnStepSuccess': true, 'screenshotOnStepFailure': false } await executeStep('Navigate to amazon', async function (timeoutInMillis = 30000) { await page.goto(url, {waitUntil: ['load', 'networkidle0'], timeout: timeoutInMillis}); }, stepConfig);

getDefaultLaunchOptions();

getDefaultLaunchOptions() 函数返回 CloudWatch Synthetics 使用的浏览器启动选项。有关更多信息,请参阅 puppeteer.launch([选项])

// This function returns default launch options used by Synthetics. const defaultOptions = await synthetics.getDefaultLaunchOptions();

getPage();

返回当前打开的页面作为 Puppeteer 对象。有关更多信息,请参阅 Puppeteer API v1.14.0

例如:

let page = synthetics.getPage();

响应:

在当前浏览器会话中打开的页面(Puppeteer 对象)。

getRequestResponseLogHelper();

将此函数用作生成器模式,用于调整请求和响应日志记录标记。

例如:

synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper().withLogRequestHeaders(false));;

响应:

{RequestResponseLogHelper}

launch(选项)

此函数的选项仅在syn-nodejs-2.1运行时版本 或更高版本中可用。

此函数仅用于 UI Canary。它将关闭现有浏览器并启动一个新浏览器。

注意

CloudWatch Synthetics 始终在开始运行脚本之前启动浏览器。除非您希望使用自定义选项启动新浏览器,否则无需调用 launch()。

(选项)是在浏览器上设置的可配置选项集。有关更多信息,请参阅 puppeteer.launch([选项])。

如果您在没有选项的情况下调用此函数,Synthetics 将使用默认参数 executablePath、 和 启动浏览器defaultViewport。CloudWatch Synthetics 中的默认视区为 1920 by 1080。

您可以覆盖 CloudWatch Synthetics 使用的启动参数,并在启动浏览器时传递其他参数。例如,以下代码段使用默认参数和默认可执行文件路径启动浏览器,但视区为 800 x 600。

await synthetics.launch({ defaultViewport: { "deviceScaleFactor": 1, "width": 800, "height": 600 }});

以下示例代码将新ignoreHTTPSErrors参数添加到 CloudWatch Synthetics 启动参数:

await synthetics.launch({ ignoreHTTPSErrors: true });

您可以通过在 --disable-web-security Synthetics 启动参数中为 args 添加CloudWatch标记来禁用 Web 安全性:

// This function adds the --disable-web-security flag to the launch parameters const defaultOptions = await synthetics.getDefaultLaunchOptions(); const launchArgs = [...defaultOptions.args, '--disable-web-security']; await synthetics.launch({ args: launchArgs });

RequestResponseLogHelper 类

处理精细配置,以及创建请求和响应负载的字符串表示。

class RequestResponseLogHelper { constructor () { this.request = {url: true, resourceType: false, method: false, headers: false, postData: false}; this.response = {status: true, statusText: true, url: true, remoteAddress: false, headers: false}; } withLogRequestUrl(logRequestUrl); withLogRequestResourceType(logRequestResourceType); withLogRequestMethod(logRequestMethod); withLogRequestHeaders(logRequestHeaders); withLogRequestPostData(logRequestPostData); withLogResponseStatus(logResponseStatus); withLogResponseStatusText(logResponseStatusText); withLogResponseUrl(logResponseUrl); withLogResponseRemoteAddress(logResponseRemoteAddress); withLogResponseHeaders(logResponseHeaders);

例如:

synthetics.setRequestResponseLogHelper(getRequestResponseLogHelper() .withLogRequestPostData(true) .withLogRequestHeaders(true) .withLogResponseHeaders(true));

响应:

{RequestResponseLogHelper}

setRequestResponseLogHelper();

将此函数用作成生器模式,用于设置请求和响应日志记录标记。

例如:

synthetics.setRequestResponseLogHelper().withLogRequestHeaders(true).withLogResponseHeaders(true);

响应:

{RequestResponseLogHelper}

async takeScreenshot名称,后缀);

使用名称和后缀拍摄当前页面的屏幕截图 (.PNG) (可选)。

例如:

await synthetics.takeScreenshot("navigateToUrl", "loaded")

此示例捕获名为 的屏幕截图并将其上传到 Canary 01-navigateToUrl-loaded.png 的 S3 存储桶。

您可以通过传递 作为第一个参数来拍摄特定 Canary 步骤stepName的屏幕截图。屏幕截图链接到报告中的 Canary 步骤,以帮助您在调试时跟踪每个步骤。

CloudWatch Synthetics Canary 会在开始步骤( executeStep 函数)之前和步骤完成之后自动获取检查(除非您将 Canary 配置为禁用屏幕截图)。您可以通过在 takeScreesnot 函数中传入步骤名称来拍摄更多屏幕截图。

以下示例拍摄屏幕截图,并将 signupForm 作为 的值stepName。屏幕截图将命名为 02-signupForm-address ,并将链接到 Canary 报告中名为 signupForm 的步骤。

await synthetics.takeScreenshot('signupForm', 'address')

BrokenLinkCheckerReport 类

此类提供了添加合成链接的方法。它仅在使用 运行时syn-nodejs-2.0-beta的 版本或更高版本的 Canary 上受支持。

要使用 BrokenLinkCheckerReport,请在脚本中包含以下行:

const BrokenLinkCheckerReport = require('BrokenLinkCheckerReport'); const brokenLinkCheckerReport = new BrokenLinkCheckerReport();

有用的函数定义:

addLink(syntheticsLink,isBroken)

syntheticsLink 是表示链接SyntheticsLink的对象。此函数根据状态代码添加链接。默认情况下,如果状态代码不可用或状态代码为 400 或更高,则它会将链接视为断开。您可以通过传入isBrokenLink值为 true 或 的可选 参数来覆盖此默认行为false

此函数没有返回值。

getLinks()

此函数返回失效链接检查程序报告中包含的 SyntheticsLink 对象的数组。

getTotalBrokenLinks()

此函数返回一个数字,表示失效链接的总数。

getTotalLinksChecked()

此函数返回一个数字,表示报告中包含的总链接数。

如何使用 BrokenLinkCheckerReport

以下 Canary 脚本代码段演示了导航到链接并将它添加到失效链接检查程序报告的示例。

  1. 导入 SyntheticsLinkBrokenLinkCheckerReportSynthetics

    const BrokenLinkCheckerReport = require('BrokenLinkCheckerReport'); const SyntheticsLink = require('SyntheticsLink'); // Synthetics dependency const synthetics = require('Synthetics');
  2. 要添加指向报告的链接,请创建 的实例BrokenLinkCheckerReport

    let brokenLinkCheckerReport = new BrokenLinkCheckerReport();
  3. 导航到 URL 并将其添加到失效链接检查程序报告中。

    let url = "https://amazon.com"; let syntheticsLink = new SyntheticsLink(url); // Navigate to the url. let page = await synthetics.getPage(); // Create a new instance of Synthetics Link let link = new SyntheticsLink(url) try { const response = await page.goto(url, {waitUntil: 'domcontentloaded', timeout: 30000}); } catch (ex) { // Add failure reason if navigation fails. link.withFailureReason(ex); } if (response) { // Capture screenshot of destination page let screenshotResult = await synthetics.takeScreenshot('amazon-home', 'loaded'); // Add screenshot result to synthetics link link.addScreenshotResult(screenshotResult); // Add status code and status description to the link link.withStatusCode(response.status()).withStatusText(response.statusText()) } // Add link to broken link checker report. brokenLinkCheckerReport.addLink(link);
  4. 将报告添加到 Synthetics。这会为每个 Canary 运行在 S3 存储桶BrokenLinkCheckerReport.json中创建一个名为 的 JSON 文件。您可以在 控制台中查看每个 Canary 运行的链接报告以及屏幕截图、日志和 HAR 文件。

    await synthetics.addReport(brokenLinkCheckerReport);

此类提供了包装信息的方法。仅在使用 运行时syn-nodejs-2.0-beta的 版本或更高版本的 Canary 上支持它。

要使用 SyntheticsLink,请在脚本中包含以下行:

const SyntheticsLink = require('SyntheticsLink'); const syntheticsLink = new SyntheticsLink("https://www.amazon.com");

此函数返回 syntheticsLinkObject

有用的函数定义:

withUrl(url)

url 是 URL 字符串。此函数返回 syntheticsLinkObject

withText(text)

text 是一个表示锚点文本的字符串。此函数返回 syntheticsLinkObject。它添加与链接对应的锚点文本。

withParentUrl(parentUrl)

parentUrl 是表示父级(源页面)URL 的字符串。此函数返回 syntheticsLinkObject

withStatusCode(statusCode)

statusCode 是一个表示状态代码的字符串。此函数返回 syntheticsLinkObject

withFailureReason(failureReason)

failureReason 是一个表示失败原因的字符串。此函数返回 syntheticsLinkObject

addScreenshotResult(screenshotResult)

screenshotResult 是一个对象。它是 Synthetics 函数 返回ScreenshotResult的 的实例takeScreenshot。对象包括以下内容:

  • fileName— 一个表示 的字符串 screenshotFileName

  • pageUrl (可选)

  • error (可选)

仅适用于 API Canary 的 Node.js 库类和函数

以下适用于 Node.js 的 CloudWatch Synthetics 库函数仅适用于 API Canary。

executeHttpStep(stepName, requestOptions, [回调], [stepConfig

以步骤形式执行提供的 HTTP 请求,并发布 SuccessPercent (通过/失败) 和Duration指标。

executeHttpStep 在后台使用 HTTP 或 HTTPS 本机函数,具体取决于请求中指定的协议。

此函数还会将步骤执行摘要添加到 Canary 的报告中。该摘要包含有关每个 HTTP 请求的详细信息,例如:

  • 开始时间

  • 结束时间

  • 状态 (PASSED/FAILED)

  • 失败原因(如果失败)

  • HTTP 调用详细信息,例如请求/响应标头、正文、状态代码、状态消息和性能计时。

Parameters

stepName(String)

指定步骤的名称。此名称也用于发布此步骤的CloudWatch指标。

requestOptions(Object or String)

此参数的值可以是 URL、URL 字符串或对象。如果它是一个对象,则必须是一组可配置的选项才能发出 HTTP 请求。它支持 Node.js 文档中的 http.request(options[, backall]) 中的所有选项。

除了这些 Node.js 选项之外requestOptions 还支持其他参数 body。您可以使用 body 参数将数据作为请求正文传递。

回调 (response)

(可选) 这是一个通过 HTTP 响应调用的用户函数。响应的类型是 Class: IncomingMessage

stepConfig(object)

(可选) 使用此参数可在此步骤中使用不同的配置覆盖全局合成配置。

使用 executeHttpStep 的示例

以下一系列示例相互构建以说明此选项的各种用法。

第一个示例配置请求参数。您可以将 URL 作为 requestOptions传递:

let requestOptions = 'https://www.amazon.com';

或者,您可以传递一组选项:

let requestOptions = { 'hostname': ‘myproductsEndpoint.com, 'method': 'GET', 'path': '/test/product/validProductName', 'port': 443, 'protocol': 'https:' };

下一个示例创建一个接受响应的回调函数。默认情况下,如果您未指定回调,CloudWatchSynthetics 会验证状态是否在 200 到 299 之间(含 200 和 299)。

// Handle validation for positive scenario const callback = async function(res) { return new Promise((resolve, reject) => { if (res.statusCode < 200 || res.statusCode > 299) { throw res.statusCode + ' ' + res.statusMessage; } let responseBody = ''; res.on('data', (d) => { responseBody += d; }); res.on('end', () => { // Add validation on 'responseBody' here if required. For ex, your status code is 200 but data might be empty resolve(); }); }); };

下一个示例为此步骤创建一个配置,该配置将覆盖全局 CloudWatch Synthetics 配置。此示例中的步骤配置允许报告中的请求标头、响应标头、请求正文(发布数据)和响应正文,并限制“X-Amz-Security-Token”和“Authorization”标头值。默认情况下,出于安全原因,这些值不会包含在报告中。如果您选择包含这些存储桶,则数据仅存储在 S3 存储桶中。

// By default headers, post data, and response body are not included in the report for security reasons. // Change the configuration at global level or add as step configuration for individual steps let stepConfig = { includeRequestHeaders: true, includeResponseHeaders: true, restrictedHeaders: ['X-Amz-Security-Token', 'Authorization'], // Restricted header values do not appear in report generated. includeRequestBody: true, includeResponseBody: true };

最后一个示例将您的请求传递给 executeHttpStep 并命名步骤。

await synthetics.executeHttpStep('Verify GET products API', requestOptions, callback, stepConfig);

通过这组示例CloudWatch,Synthetics 会添加来自报告中的每个步骤的详细信息,并使用 stepName 为每个步骤生成指标。

您将看到successPercent该步骤的 durationVerify GET products API 指标。您可以通过监控 API 调用步骤的指标来监控 API 性能。

有关使用这些函数的示例完整脚本,请参阅多步骤 API Canary