跳转到主要内容

Gazoo设备管理器

项目描述

Gazoo设备管理器(GDM)

gazoo_device是一个用于与智能设备交互的Python包。
它包含Gazoo设备管理器(GDM),该管理器定义了一个通用设备接口。通用设备接口标准化了设备交互,允许测试编写者尽管底层通信类型、操作系统和逻辑存在差异,也能在设备之间共享测试。
GDM可以作为Python包使用于测试,并自带CLI以快速进行设备交互。
GDM是一个开放源代码架构,它能够实现设备无关的交互。GDM使用的设备控制器包含在单独的Python包中,并且可以注册到GDM架构中。
GDM在测试主机上运行,通过一个或多个设备传输(如SSH、ADB、HTTPS、UART)与物理设备进行通信。GDM不需要设备固件提供任何额外支持。

GDM被用于Google Nest的大多数端到端设备测试中。

目录

  1. 安装
    1. 卸载
  2. 快速入门
  3. GDM中的设备控制器
  4. 配置文件
  5. 日志
  6. 检测设备
  7. 使用CLI
    1. 在没有物理设备的情况下探索设备功能
    2. 在有物理设备的情况下探索设备功能
    3. 基本CLI使用
  8. 使用gazoo_device Python包
  9. 如何使用GDM与测试框架
    1. GDM与Mobly
    2. GDM与Unittest
  10. 贡献者文档
  11. 许可证
  12. 免责声明

安装

支持的宿主操作系统

  • Debian;
  • Ubuntu;
  • MacOS.

Windows不支持。

注意:64位Ubuntu 20.04 LTS上的Raspberry Pi 4也支持作为宿主(请参阅相关的设备设置部分)。

MacOS先决条件

  1. 安装Xcode命令行工具

    xcode-select --install
    
  2. 安装Brew(MacOS包管理器)

    https://brew.sh.cn/

  3. 验证您的系统python3可执行文件。

    1. 检查Python 3是否可用

      which python3
      
    2. 检查您的Python 3版本至少为3.9

      python3 -V
      
    3. 检查您的python3可执行文件是否有pip模块

      python3 -m pip --version
      

安装步骤

  1. 下载GDM安装程序存档

    curl -OL https://github.com/google/gazoo-device/releases/latest/download/gdm-install.sh
    
  2. 运行安装程序

    bash gdm-install.sh
    

    在安装结束时,您应该看到以下消息

    Install done (exit 0)
    
  3. gdm添加到您的$PATH

    将以下行添加到~/.bash_profile~/.bashrc

    export PATH="${PATH}:${HOME}/gazoo/bin"
    
  4. [可选] 安装可选依赖项

    由于许可限制,GDM的一些依赖项是可选的,并且安装程序不会自动安装。

    要使用GDM通过GDM闪烁NRF52840 DK和EFR32开发板,请安装J-Link SDK:https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack.

    针对Apple M1用户的其他注意事项:请确保在macOS下下载“64位Apple M1安装程序”。

    要确定您的Mac是否使用M1芯片,请在终端中运行

    arch
    

    。如果您看到arm64,则您的Mac使用M1。

    要使用GDM通过GDM闪烁ESP32开发板,请安装esptool

    ~/gazoo/gdm/virtual_env/bin/pip install esptool==4.1
    

GDM安装会在~/gazoo/gdm/virtual_env创建一个用于CLI的虚拟环境。
gdm CLI命令在此虚拟环境中运行。

运行几个GDM CLI命令以验证GDM是否正常工作

gdm -v
gdm devices
gdm

gdm -v显示GDM启动程序和Python包的版本

Gazoo Device Manager launcher 1.0
Gazoo Device Manager 1.0.0

gdm devices的典型输出

Device          Alias           Type         Model                Connected
--------------- --------------- -----------  ----------------     ------------

Other Devices   Alias           Type         Model                Available
--------------- --------------- -----------  ----------------     ------------

0 total Gazoo device(s) available.

gdm显示帮助菜单。

更新GDM到最新版本

gdm update-gdm

更新(或降级)GDM到特定版本

gdm update-gdm <version>  # Example: gdm update-gdm 1.0.0

在虚拟环境中安装GDM

/path_to_virtual_env/bin/pip install gazoo-device

卸载

卸载GDM

curl -OL https://github.com/google/gazoo-device/releases/latest/download/gdm-cleanup.sh
bash gdm-cleanup.sh

快速入门

这是快速上手GDM的快捷方式。您需要一个Raspberry Pi。

  1. 在宿主上安装GDM.
  2. 将Raspberry Pi设置为GDM中的辅助设备,并尝试CLI.
  3. 使用您选择的测试框架运行示例设备测试.

GDM中的设备控制器

为了与设备交互,GDM为每个物理设备创建一个Python设备控制器对象。GDM设备控制器的生命周期如下

  1. 一个新的设备连接到宿主并被GDM检测到(一次性设置步骤),这使得设备被GDM所知

    gdm detect
    
  2. 在测试开始或CLI设备交互开始时创建设备控制器实例;

  3. 通过设备控制器实例发出一个或多个设备命令;

  4. 在测试完成或CLI交互完成后关闭设备控制器实例;

  5. 如果设备永久性地从宿主断开连接,则通过将其从GDM所知的设备列表中删除来删除它(也是一个一次性步骤);

    gdm delete device-1234
    

请注意,在GDM的上下文中,“设备”一词是模糊的:它可以指设备控制器或物理设备。设备控制器也可以称为设备类。

配置文件

GDM设备配置位于~/gazoo/gdm/conf

您不应该直接修改它们。相反,请使用 set-propget-prop 命令

  • 设置可选设备属性

    gdm set-prop device-1234 property-name property-value
    
  • 检索设备属性

    gdm get-prop device-1234 property-name
    
  • 设置管理器属性

    gdm set-prop manager property-name property-value
    
  • 检索管理器属性

    gdm get-prop manager property-name
    

日志

默认情况下,所有GDM日志都发送到 ~/gazoo/gdm/log/。日志详细程度、输出目录和标准输出行为可以通过向 Manager.__init__ 的参数进行配置(参见 gazoo_device/manager.py)。

GDM创建三种类型的日志文件。

gdm.txt 日志

所有GDM日志都存放在这里。设备日志不会捕获在此文件中。此日志文件在GDM调用之间持续存在。它提供了最佳的历史记录,但可能难以确定特定设备交互的日志。

设备日志文件,例如 linuxexample-1eb2-20201113-123538.txt

这些捕获GDM与设备之间的所有通信。每行日志都以前缀 GDM-<字母或数字> 开头,例如 GDM-MGDM-0GDM-1

GDM-M 是GDM编写的日志。这包括GDM写入的命令、GDM在写入命令后期望找到的正则表达式以及响应的最大时间窗口,以及expect的结果(如果有任何匹配的正则表达式)。

GDM-0GDM-1 和其他 GDM-<数字> 日志来自设备传输。数字对应于传输的索引(由 gazoo_device/switchboard/communication_types.py 中通信类型的 get_transport_list() 方法定义)。
对于某些通信类型,例如SSH和ADB,日志和命令响应来自不同的传输。在这种情况下,设备响应来自 GDM-0,设备日志来自 GDM-1
对于其他通信类型,可能只有一个传输,在这种情况下,设备响应和日志都来自 GDM-0

设备日志文件名在每次CLI交互时都会记录。例如:linuxexample-1eb2 logging to file /Users/artorl/gdm/log/linuxexample-1eb2-20201113-123548.txt

设备日志事件文件,例如 linuxexample-1eb2-20201113-123548-events.txt

这些包含设备日志事件。要捕获的日志事件由 gazoo_device/filters/ 中的日志事件过滤器定义。

日志过滤过程实时接收所有设备日志,并将匹配任何设备日志过滤器的行捕获到设备日志事件文件中。

日志事件文件名构建为 <日志文件名>-events.txt。例如,linuxexample-1eb2-20201113-123548-events.txtlinuxexample-1eb2-20201113-123548.txt 设备日志文件的日志事件文件。

检测设备

要检测连接到您主机的所有设备,请在主机上运行 gdm detect。这是一个一次性步骤,当GDM在主机上安装或连接到主机的新设备时需要执行。设备在使用GDM之前通常需要特殊的设置。这可能包括特殊的电缆连接配置、重命名串行电缆、将设备固件更新到特定版本、在静态IP地址上设置设备或设置对设备的无密码SSH访问。有关说明,请参阅 docs/device_setup/

设备检测填充设备配置

  • 持久属性存储在 ~/gazoo/gdm/conf/devices.json 中;
  • 可选(可设置)属性存储在 ~/gazoo/gdm/conf/device_options.json 中。

要查看GDM当前已知的所有设备,请运行 gdm devices

检测输出示例(检测到 cambrionix-kljo

$ gdm detect

##### Step 1/3: Detecting potential new communication addresses. #####

        detecting potential AdbComms communication addresses
        detecting potential DockerComms communication addresses
'docker' is not installed. Cannot get Docker devices.
        detecting potential JlinkSerialComms communication addresses
        detecting potential PtyProcessComms communication addresses
        detecting potential SshComms communication addresses
        detecting potential SerialComms communication addresses
        detecting potential YepkitComms communication addresses
'ykushcmd' is not installed. Cannot get Yepkit serials.
        detecting potential PigweedSerialComms communication addresses
Found 1 possible serialcomms connections:
        /dev/tty.usbserial-DM01KLJO

##### Step 2/3 Identify Device Type of Connections. #####

Identifying serialcomms devices..
        /dev/tty.usbserial-DM01KLJO is a cambrionix.
        serialcomms device_type detection complete.

##### Step 3/3: Extract Persistent Info from Detected Devices. #####

Getting info from communication port /dev/tty.usbserial-DM01KLJO for cambrionix
        cambrionix_detect checking device readiness: attempt 1 of 1
        cambrionix_detect starting AuxiliaryDevice.check_device_ready
        cambrionix_detect health check 1/2 succeeded: Check device connected.
        cambrionix_detect health check 2/2 succeeded: Check clear flags.
        cambrionix_detect AuxiliaryDevice.check_device_ready successful. It took 0s.
        cambrionix_detect starting Cambrionix.get_detection_info
        cambrionix_detect Cambrionix.get_detection_info successful. It took 0s.

##### Detection Summary #####

        1 new devices detected:
                cambrionix-kljo
Device                     Alias           Type                 Model                Connected
-------------------------- --------------- -------------------- -------------------- ----------

Other Devices              Alias           Type                 Model                Available
-------------------------- --------------- -------------------- -------------------- ----------
cambrionix-kljo            <undefined>     cambrionix           PP15S                available

0 total Gazoo device(s) available.

设备名称创建为 devicetype-1234,其中设备类型由设备控制器提供,数字是设备序列号的最后4位。

检测仅检测 设备。它不会重新检测已知的设备。

  • 要删除已知设备

    gdm delete device-1234
    
  • 要重新检测设备

    gdm redetect device-1234
    

使用CLI

在没有物理设备的情况下探索设备功能

GDM配备了自动生成的文档。要访问它,您不需要设备。

要查看Manager类可用的所有命令,请运行

gdm

要开始探索设备文档,请运行

gdm man

这将列出所有支持的设备,并提供运行命令,如果您想探索特定设备的特性。

要查看设备类型支持的内容

gdm man device_type

例如

gdm man raspberrypi

要探索设备方法、属性或功能,请发出

gdm man device_type attribute_name

例如

gdm man raspberrypi firmware_version
gdm man raspberrypi reboot
gdm man raspberrypi file_transfer

要探索功能方法或属性,请发出

gdm man device_type capability_name method_or_property_name

例如

gdm man cambrionix switch_power off
gdm man raspberrypi file_transfer send_file_to_device

您还可以通过动态Fire CLI探索GDM功能。例如

gdm -- --help
gdm create_device -- --help

在有物理设备的情况下探索设备功能

如果您有一个物理设备,您可以使用动态Fire CLI来获取有关设备任何属性的说明。此文档没有限制,更详细、更准确,但缺点是需要物理设备。例如,假设已连接raspberrypi-kljo

gdm issue raspberrypi-kljo -- --help
gdm issue raspberrypi-kljo - reboot -- --help

基本CLI使用

假设您已连接raspberrypi-kljo

以下是一些常用的CLI命令

  • 列出所有已知的设备

    gdm devices
    
  • 检测新设备

    gdm detect
    

    gdm detect --static_ips=10.20.30.40,50.60.70.80
    

    注意:检测不会移除已知的GDM设备。

  • 设置设备属性(如别名)

    gdm set-prop raspberrypi-kljo alias rpi
    
  • 检查GDM版本

    gdm -v
    
  • 在设备上运行健康检查

    gdm health-check raspberrypi-kljo
    

    如果您设置了上面的别名,以下也将生效

    gdm health-check rpi
    
  • 运行健康检查,然后发出设备命令或检索属性

    gdm issue raspberrypi-kljo - reboot
    
  • 发出设备命令或检索属性而不运行健康检查

    gdm exec raspberrypi-kljo - reboot
    
  • 使用设备功能

    gdm issue raspberrypi-kljo - file_transfer - recv_file_from_device --src="/tmp/foo" --dest="/tmp/bar"
    

    (或使用gdm exec跳过健康检查)。

有时将参数传递给Fire CLI可能会有些棘手。请参阅Python Fire文档,并务必查看参数解析部分

最常用的设备方法是shell。它在设备上运行shell命令。对于主要设备是必需的,但对于辅助设备是可选的。GDM中唯一实现shell()的辅助设备是树莓派。如果您连接了树莓派,您可以尝试它

gdm issue raspberrypi-1234 - shell "echo 'foo'"

使用gazoo_device Python包

从已安装gazoo_device的虚拟环境启动Python。
您可以使用GDM CLI虚拟环境:~/gazoo/gdm/virtual_env/bin/python

from gazoo_device import Manager
manager = Manager()
rpi = manager.create_device('raspberrypi-962c')
rpi.reboot()

请注意,您创建的设备应在gdm devices的输出中显示为“可用”。

如何使用GDM与测试框架

GDM是框架无关的,可以与任何Python测试框架一起使用。
有关GDM + unittest和GDM + Mobly的示例,请参阅examples/device_tests/README.md

贡献者文档

如果您想将您设备的支持添加到GDM,请参阅CONTRIBUTING.md

许可证

Gazoo Device Manager采用Apache 2.0许可。

依赖项许可合规性

Gazoo Device Manager依赖于pyudev,它采用LGPL 2.1许可。
pyudev源代码可在以下位置找到:https://github.com/pyudev/pyudev

免责声明

这不是一个官方的Google产品。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

gazoo_device-1.123.0.tar.gz (382.0 kB 查看哈希值)

上传时间: 源代码

构建分发

gazoo_device-1.123.0-py3-none-any.whl (634.0 kB 查看哈希值)

上传时间: Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面