认证自动化设置

如需自动执行认证测试,需要进行额外设置。

以下所有安装和配置步骤都发生在运行 GRL 自动化测试框架软件的 Windows 计算机上。请先下载并安装最新的 GRL 线程自动化测试框架,然后再继续。

安装后,被测设备 (DUT) 有两种自动化方法:

  1. OpenThread 自动化测试框架自动化工具
  2. 自动化测试框架自动 DUT 模式

OpenThread 自动化测试框架工具

安装

  1. 安装以下软件:
    • Python 2.7
    • Windows 版 Git(强烈建议使用 Bash 支持)
  2. 克隆 OpenThread 代码库以获取自动化脚本:
    git clone https://github.com/openthread/openthread
    
  3. 安装 Python 要求:
    cd tools/harness-automation
    pip install -r requirements.txt
    
  4. 安装 Google ChromeChromeDriver

配置

  1. 为自动化工具创建配置文件:
    cp autothreadharness/settings_sample.py autothreadharness/settings.py
    
  2. 根据文件中的说明更新该新配置文件。
  3. 将以下参数添加到自动化测试框架配置文件中(位于 C:\GRL\Thread1.1\Config\Configuration.ini):
    BrowserAutoNavigate = False

混合测试平台支持

自动化测试框架自动化工具还支持混合测试平台,其中每个测试用例中使用的参考设备是混合的设备集,而不是所有相同的设备。例如,您可以根据需要为每个测试用例混合使用全部四个线程参照设备并在 32 个 TI CC2538 板上运行所有线程。

如需使用混合测试平台,需要进行额外的配置:

  1. 将以下附加参数添加到位于 C:\GRL\Thread1.1\Config\Configuration.ini 的自动化测试框架配置文件中:
    EnableDeviceSelection = True
  2. 从线程组下载拓扑配置文件。将此文件作为 TopologyConfig.txt 添加到 C:\GRL\Thread1.1\Thread_Harness\TestScripts。此文件详细介绍了每个测试用例中每个角色要使用的参照设备。

针对其他混合床配置,可以修改线程组提供的拓扑配置文件,但如果使用的是官方认证,则必须使用原始配置。

可在拓扑配置文件中用于参考设备的有效值如下:

拓扑配置文件中的值 自动化测试框架参考设备
ARM ARM:NXP FRDM-K64F,配 Firefly 6LoWPAN Shield
NXP NXP(Freescale):USB-KW24D512 加密狗
OpenThread OpenThread:TI CC2538DK
SiLabs Silab:EM358x USB 记忆棒

拓扑配置文件中的每个测试用例条目都必须占用一行,并采用 role:device 对的格式,如下所示:

5.3.10-Leader:NXP,Router_1:OpenThread,BorderRouter:OpenThread,MED_1:ARM

自动化测试框架自动 DUT 模式

GRL 自动化测试框架软件提供高级自动发现功能 (Auto DUT),该功能可加快线程参考堆栈供应商的验证流程。

OpenThread 提供了一个线程主机控制器接口 (THCI) 示例,该框架允许自动化测试框架控制您的组件或产品,就像它是一个参考平台一样。根据特定平台的串行端口特性,DUT 可以执行以下任一操作:

充当现有的 OpenThread 参考平台

如果 DUT 的串行端口在 115200 8-N-1 设置下运行,并且设备在每次物理设备重置(例如,确认设备与 Windows 计算机有效连接)后都能够正确响应,则平台可以使用 OpenThread THCI 工具。此工具允许设备在测试期间充当 OpenThread 参考平台。

  1. 关闭 GRL 自动化测试框架(如果已打开)。
  2. 将设备连接到 Windows 计算机。
  3. 使用 Python pySerial 模块查找设备串行端口硬件标识符:
    1. 在 Windows 计算机上安装 pySerial
    2. 在 Windows 命令行中使用 Python 来枚举连接到机器的设备的所有硬件标识符(VID 和 PID)。在此输出中,一个设备使用 VID=1366 且 PID=1015 的标识符进行连接:
      python -m serial.tools.list_ports -v
      COM10
          desc: USB Serial Port (COM10)
          hwid: USB\VID_1366+PID_1015+MI_00
    3. 如果您已知道 COM 端口,则可以使用其他命令。例如,如果 COM 端口为 COM10
      python -c "import serial.tools.list_ports;print [ports[2] for ports in serial.tools.list_ports.comports() if ports[0] == 'COM10']"
      ['USB\VID_1366+PID_1015+MI_00']
  4. 更新 Golden Device 列表:
    1. 打开 C:\GRL\Thread1.1\Config\Configuration.ini
    2. 使用设备的 VID 和 PID 更新 GoldenDeviceHardwareIds 数组中的 OpenThread 组:
      GoldenDeviceHardwareIds = {
      'NXP': ['VID:PID=1FC9:0300','VID:PID=15A2:0300','VID:PID=1366:1015'],
      'SiLabs': 'VID:PID=10C4:8A5E',
      'ARM': 'VID:PID=0D28:0204',
      'OpenThread':['VID:PID=10C4:EA60','VID:PID=1366:1015']}
  5. 启用自动 DUT 模式

充当新的参考平台

如果 DUT 的串行端口在适当的串行端口设置下无法正常运行,或者设备在物理设备重置后无法正确响应(在重置后的 3-6 秒内输出不可读的代码),则可以自定义 OpenThread THCI,以在自动化测试框架中将该设备视为新平台。

例如,要使用 Nordic Semiconductor nRF52840 平台自定义 THCI,请执行以下操作:

  1. 关闭 GRL 自动化测试框架(如果已打开)。
  2. 根据目标设备的 UART 特性修改 /tools/harness-thci/OpenThread.py。不同设备之间的修改可能会有所不同。对于 Nordic nRF52840 平台:

    1. OpenThread.py 文件重命名为 nRF52840.py
    2. 将“OpenThread”的前三个实例更改为“nRF52840”:

      >> Device : nRF52840 THCI
      >> Class : nRF52840
      
      class nRF52840(IThci):
      
    3. 更改串行端口参数:

      def _connect(self):
          print 'My port is %s' % self.port
          if self.port.startswith('COM'):
              self.handle = serial.Serial(self.port, 115200, timeout=0)
              time.sleep(1)
              self.handle.write('\r\n')
              time.sleep(0.1)
              self._is_net = False
          elif ':' in self.port:
              host, port = self.port.split(':')
              self.handle = socket.create_connection((host, port))
              self.handle.setblocking(0)
              self._is_net = True
          else:
              raise Exception('Unknown port schema')
          self.UIStatusMsg = self.getVersionNumber()
      
    4. 更改休眠时间以消除设备重置后不可读代码输出所产生的影响:

      def powerDown(self):
          """power down the Thread device"""
          print '%s call powerDown' % self.port
          self._sendline('reset')
          self.isPowerDown = True
          time.sleep(8)  # New addition
      
      def reboot(self):
          """reset and rejoin to Thread Network without any timeout
      
          Returns:
              True: successful to reset and rejoin the Thread Network
              False: fail to reset and rejoin the Thread Network
          """
          print '%s call reboot' % self.port
          try:
              self._sendline('reset')
              self.isPowerDown = True
              time.sleep(8)  # Updated from 3 to 8
      
      def reset(self):
          """factory reset"""
          print '%s call reset' % self.port
          try:
              self._sendline('factoryreset')
              time.sleep(8)  # Updated from 3 to 8
              self._read()
      
      def resetAndRejoin(self, timeout):
          """reset and join back Thread Network with a given timeout delay
      
          Args:
              timeout: a timeout interval before rejoin Thread Network
      
          Returns:
              True: successful to reset and rejoin Thread Network
              False: fail to reset and rejoin the Thread Network
          """
          print '%s call resetAndRejoin' % self.port
          print timeout
          try:
              self._sendline('reset')
              self.isPowerDown = True
              time.sleep(timeout)
              if timeout < 8:      # Sleep a bit longer if the timeout is short
                  time.sleep(8 - timeout)
      
  3. 将修改后的 nRF52840.py 文件复制到 C:\GRL\Thread1.1\Thread_Harness\THCI

  4. 将新平台信息添加到自动化测试框架中:

    1. 创建图标(png 或 jpg 格式)的图标,以便更轻松地区分您的平台并将其复制到 C:\GRL\Thread1.1\Web\images
    2. 使用新的 DEVICE 部分更新 C:\GRL\Thread1.1\Web\data\deviceInputFields.xml,其中 thumbnail 参数是图标文件:

      <DEVICE name="nRF52840" thumbnail="nRF52840.jpg" description ="nRF52840: Nordic" THCI="nRF52840">
          <ITEM label="Serial Line"
                type="text"
                forParam="SerialPort"
                validation="COM"
                hint="eg: COM1">COM
          </ITEM>
          <ITEM label="Speed"
                type="text"
                forParam="SerialBaudRate"
                validation="baud-rate"
                hint="eg: 115200">115200
          </ITEM>
      </DEVICE>
      
  5. 将设备连接到 Windows 计算机。

  6. 使用 Python pySerial 模块查找设备串行端口硬件标识符:

    1. 在 Windows 计算机上安装 pySerial
    2. 在 Windows 命令行中使用 Python 来枚举连接到机器的设备的所有硬件标识符(VID 和 PID)。在此输出中,一个设备使用 VID=1366 且 PID=1015 的标识符进行连接:
      python -m serial.tools.list_ports -v
      COM10
          desc: USB Serial Port (COM10)
          hwid: USB\VID_1366+PID_1015+MI_00
    3. 如果您已知道 COM 端口,则可以使用其他命令。例如,如果 COM 端口为 COM10
      python -c "import serial.tools.list_ports;print [ports[2] for ports in serial.tools.list_ports.comports() if ports[0] == 'COM10']"
      ['USB\VID_1366+PID_1015+MI_00']
  7. 更新 Golden Device 列表:

    1. 打开 C:\GRL\Thread1.1\Config\Configuration.ini
    2. GoldenDeviceHardwareIds 数组中添加新的设备组,其中包含设备的 VID 和 PID:
      GoldenDeviceHardwareIds = {
      'NXP': ['VID:PID=1FC9:0300','VID:PID=15A2:0300','VID:PID=1366:1015'],
      'SiLabs': 'VID:PID=10C4:8A5E',
      'ARM': 'VID:PID=0D28:0204',
      'OpenThread':'VID:PID=10C4:EA60',
      'nRF52840': 'VID:PID=1366:1015'}
  8. 启用自动 DUT 模式

启用自动 DUT 模式

完成上述两个配置选项之一后:

  1. 打开 GRL 自动化测试框架,相应设备/端口现在会显示为新的参照设备。
  2. 选中“支持的硬件”列表下方的启用自动 DUT 设备选择复选框。
  3. 选择目标设备/端口下的设置为 DUT 单选按钮,将设备设置为 DUT。
OT 认证自动 DUT