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

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

可用于 Canary 脚本的库函数

CloudWatch 合成材料包括几个内置类和函数,您可以在编写要用作会议的Node.js脚本时调用它们。

部分适用于UI和API限制。其他函数仅适用于 UI Canary。UI Canary 是使用 getPage() 函数,并使用 Puppeteer 作为 Web 驱动程序进行导航和与网页交互的 Canary。

适用于所有龋齿的库类和功能

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

getLogLevel();

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

  • 0 – 调试

  • 1 – 信息

  • 2 – 警告

  • 3 – 错误

示例:

let logLevel = synthetics.getLogLevel();

setLogLevel();

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

  • 0 – 调试

  • 1 – 信息

  • 2 – 警告

  • 3 – 错误

示例:

synthetics.setLogLevel(0);

Synthetics Logger

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

本地日志文件中的日志记录语句用“DEBUG: ","INFO:",等等,以匹配称为的函数的日志级别。

假设您想以与合成可自由日志记录相同的日志记录级别运行合成日志库,您可以使用合成日志记录器。

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

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

const log = require('SyntheticsLogger');

有用的函数定义:

log.debug(message, ex);

Parameters message 是记录的消息。ex 是记录的例外情况(如果有)。

示例:

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

log.error(message, ex);

Parameters message 是记录的消息。ex 是记录的例外情况(如果有)。

示例:

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

log.info(message, ex);

Parameters message 是记录的消息。ex 是记录的例外情况(如果有)。

示例:

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

log.log(message, ex);

这是 log.info 的一个别名。

Parameters message 是记录的消息。ex 是记录的例外情况(如果有)。

示例:

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

log.warn(message, ex);

Parameters message 是记录的消息。ex 是记录的例外情况(如果有)。

示例:

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

仅适用于UI龋齿的库类和功能

以下 CloudWatch Synthetics 库函数仅适用于 UI Canary。

合成类

以下功能属于Synthetics类。

async addUserAgent(page, userAgentString);

此函数附加 userAgentString 到指定页面的用户-代理标题。

示例:

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

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

async executeStep(stepName = null, functionToExecute);

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

  • 记录步骤开始。

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

  • 启动计时器。

  • 执行提供的函数。

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

  • 计时器结束。

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

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

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

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

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

如果开胃菜使用 syn-nodejs-2.0 运行时,此函数还将步骤执行摘要添加到canary的报告。总结包括有关每个步骤的详细信息,例如开始时间、结束时间、状态(通过/失败)、失败原因(如果失败)和在每个步骤执行期间捕获的屏幕截图。

示例:

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

响应:

返回 functionToExecute 返回的内容。

getPage();

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

示例:

let page = synthetics.getPage();

响应:

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

getRequestResponseLogHelper();

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

示例:

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

响应:

{RequestResponseLogHelper}

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(stepName, suffix);

此功能仅在使用 syn-nodejs-2.0-beta 运行时版本或更新版本。

使用当前页面的屏幕截图(.PNG),可选 stepName 和可选的后缀。的 stepName 是捕获屏幕截图的步骤的名称。的 suffix 是可选的用于命名屏幕截图的串。

返回 ScreenshotResult 对象。屏幕截图上传到为编剧指定的S3bucket。

示例:

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

此示例捕获和上传名为 01-navigateToUrl-loaded.png 到开胃菜的S3bucket。

损坏链接检查程序报告类

这类课程提供添加合成链接的方法。它仅在使用 syn-nodejs-2.0-beta 运行时版本或更新版本。

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

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

有用的函数定义:

添加链接(syntheticsLink,isBroken)

syntheticsLinkSyntheticsLink 对象表示链接。此功能根据状态代码添加链接。默认情况下,如果状态代码不可用或状态代码为400或更高,则认为链接已中断。您可以通过传递可选参数来覆盖此默认行为 isBrokenLink 价值为 truefalse.

此函数没有返回值。

getLinks()

此函数返回一系列 SyntheticsLink 包含在损坏链接检查器报告中的对象。

获得总计转链()

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

获得已检查的总链接数()

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

如何使用断链检查器报告

以下编剧脚本代码片段展示了导航至链接并将其添加至损坏链接检查器报告的示例。

  1. 导入 SyntheticsLink, BrokenLinkCheckerReport、和 Synthetics.

    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中。这会创建一个名为 BrokenLinkCheckerReport.json S3bucket中,用于每次开腹操作。您可以在控制台中看到每个运行次数的链接报告以及屏幕截图、日志和HAR文件。

    await synthetics.addReport(brokenLinkCheckerReport);

本课程提供包装信息的方法。它仅在使用 syn-nodejs-2.0-beta 运行时版本或更新版本。

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

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

此功能返回 syntheticsLinkObject

有用的函数定义:

含Url(url)

url 是URL串。此功能返回 syntheticsLinkObject

含文本(text)

text 是代表锚文本的串。此功能返回 syntheticsLinkObject。它添加与链接对应的锚文本。

与ParentUrl(parentUrl)

parentUrl 是表示父(源页面)URL的串。此功能返回 syntheticsLinkObject

有状态代码(statusCode)

statusCode 是一个表示状态代码的串。此功能返回 syntheticsLinkObject

与失败原因(failureReason)

failureReason 是一个表示失败原因的串。此功能返回 syntheticsLinkObject

添加屏幕截图结果(screenshotResult)

screenshotResult 是对象。这是 ScreenshotResult 合成功能返回的 takeScreenshot。该对象包括以下内容:

  • fileName— 代表 screenshotFileName

  • pageUrl (可选)

  • error (可选)