适用于 AWS AWS IoT Greengrass 的 IDT 故障排除 - AWS IoT Greengrass
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

适用于 AWS AWS IoT Greengrass 的 IDT 故障排除

适用于 AWS IoT 的 IDT IoT Greengrass 根据错误类型将这些错误写入到不同的位置。错误将被写入到控制台、日志文件和测试报告。

解决适用于 AWS IoT IoT Greengrass 的 IDT 错误

使用 IDT 时,您必须先获取正确的配置文件,然后才能运行适用于 AWS AWS IoT Greengrass 的 IDT。如果出现解析和配置错误,第一步应找到并使用适合您的环境的配置模板。

如果仍有问题,请参阅以下调试过程。

在哪里查找错误?

测试运行时,控制台上会显示高级别错误,并且在完成所有测试时,会显示失败测试的摘要。awsiotdevicetester_report.xml 包含导致测试失败的所有错误的摘要。每次测试运行的日志文件都存储在一个以 UUID 命名的目录中,用于在测试运行期间在控制台上显示的测试执行。

测试日志目录位于 <device-tester-extract-location>/results/<execution-id>/logs/。此目录包含以下对调试有用的文件。

File 描述
test_manager.log

测试正在运行时写入控制台的所有日志。结果的摘要位于该文件的末尾,其中包含失败的测试的列表。

此文件中的警告和错误日志可以为您提供有关失败的一些信息。

<test-group-id>__<test-name>.log 特定测试的详细日志。

测试时出现找不到命令错误

您需要较旧版本的 OpenSSL 库 (libssl1) 才能在 AWS AWS IoT Greengrass 设备上运行测试。当前的大多数 Linux 发行版都使用 libssl 1.0.2 或更高版本 (v1.1.0)。

例如,在 Raspberry Pi 上,可以运行以下命令来安装所需的 libssl 版本:

  1. wget http://ftp.us.debian.org/debian/pool/main/o/openssl/libssl1.0.0_1.0.2l-1~bpo8+1_armhf.deb
  2. sudo dpkg -i libssl1.0.0_1.0.2l-1~bpo8+1_armhf.deb

冲突错误

有时,在多个设备上并发运行 AWS AWS IoT Greengrass 资格套件时,您可能会看到以下错误。

ConflictException: Component [com.example.IDTHelloWorld : 1.0.0] for account [account-id] already exists with state: [DEPLOYABLE] { RespMetadata: { StatusCode: 409, RequestID: “id” }, Message_: “Component [com.example.IDTHelloWorld : 1.0.0] for account [account-id] already exists with state: [DEPLOYABLE]” }

AWS AWS IoT Greengrass 资格套件尚不支持并发测试执行。按顺序为每个设备运行资格套件。

无法启动测试错误

您可能会遇到指向测试尝试启动时失败的错误。有几种可能的原因,因此,请执行以下操作:

  • 确保包含在执行命令中的池名称实际存在。池名称将从您的 device.json 文件中直接引用。

  • 确保池中的设备具有正确的配置参数。

解析错误

有时候,JSON 配置中的输入错误会导致解析错误。大部分情况下,问题是因 JSON 文件中漏掉括号、逗号或引号所导致。IDT 执行 JSON 验证并输入调试信息。它输出发生错误的行、行号以及语法错误的列号。这些信息应足以帮助您修复错误,但是如果仍不能定位错误,则可以通过您的 IDE、文本编辑器(例如 Atom 或 Sublime)或 JSONLint 等在线工具手动执行验证。

权限被拒绝错误

IDT 将对所测试设备中的各种目录和文件执行操作。其中一些操作需要根用户访问权限。要自动执行这些操作,IDT 必须能够在不键入密码的情况下使用 sudo 运行命令。

请按照以下步骤操作,以允许在不键入密码的情况下进行 sudo 访问。

注意

userusername 是指 IDT 用来访问所测试设备的 SSH 用户。

  1. 使用 sudo usermod -aG sudo <ssh-username> 将 SSH 用户添加到 sudo 组。

  2. 注销,然后重新登录,以使更改生效。

  3. 打开 /etc/sudoers 文件,并将以下行添加到文件末尾:<ssh-username> ALL=(ALL) NOPASSWD: ALL

    注意

    作为最佳实践,我们建议您在编辑 sudo visudo 时使用 /etc/sudoers

缺少必需参数错误

由于将新功能添加到 IDT 中,可能会对配置文件进行更改。使用旧配置文件可能会破坏您的配置。如果出现这种情况,<test_case_id>.log 下的 /results/<execution-id>/logs 文件明确列出了所有缺少的参数。IDT 还将验证 JSON 配置文件架构,以确保使用支持的最新版本。

macOS 上的安全异常

当您在使用 macOS 10.15 的主机上运行 IDT 时,IDT 的记录票证检测不正确,IDT 无法运行。要运行 IDT,您需要为devicetester_mac_x86-64可执行文件授予安全例外。请执行下列操作之一:

向 IDT 可执行文件授予安全异常

  1. 从 Apple 菜单启动 System Preferences (系统首选项)。

  2. 选择 Security & Privacy (安全性和隐私),然后在 General (常规) 选项卡上,单击锁定图标以更改安全设置。

  3. 查找消息"devicetester_mac_x86-64" was blocked from use because it is not from an identified developer.,然后选择 Allow Anyway。

  4. 接受安全警告。

SSH 连接错误

当 IDT 无法连接到所测试设备时,会在 /results/<execution-id>/logs/<test-case-id>.log 中记录连接失败。SSH 失败消息将显示在此日志文件的顶部,因为连接到所测试设备是 IDT 最先执行的操作之一。

大多数 Windows 配置使用 PuTTy 终端应用程序连接到 Linux 主机。该应用程序要求将标准 PEM 私有密钥文件转换为称为 PPK 的专有 Windows 格式。在 device.json 文件中配置 IDT 时,仅使用 PEM 文件。如果您使用 PPK 文件,IDT 将无法与 AWS AWS IoT Greengrass 设备创建 SSH 连接,并且无法运行测试。

超时错误

您可以通过指定超时乘数来增加每个测试的超时,该超时乘数应用于每个测试超时的默认值。为此标志配置的任何值都必须大于或等于 1.0。

要使用超时乘数,请在运行测试时使用标志 --timeout-multiplier。例如:

./devicetester_linux run-suite --suite-id GGV2Q_1.0.0 --pool-id DevicePool1 --timeout-multiplier 2.5

有关更多信息,请运行 run-suite --help