認證自動化設定

如要自動執行認證測試,必須完成額外的設定。

下列所有安裝和設定步驟都是在執行 GRL Test Harness 軟體的 Windows 電腦上進行。在繼續之前,請下載並安裝最新的 GRL Thread Test Harness

安裝完成後,有測試方法 (DUT) 有兩種自動化方法:

  1. OpenThread 輕量化自動化工具
  2. 測試 Harness Auto DUT 模式

OpenThread 輕量化自動化工具

安裝

  1. 安裝下列軟體:
    • Python 2.7
    • Git for Windows (強烈建議提供現金支援)
  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. 將下列參數新增至 Test Harness 設定檔 (位於 C:\GRL\Thread1.1\Config\Configuration.ini):
    BrowserAutoNavigate = False

混合式測試組支援

Harness 自動化工具也支援混合測試床,也就是在每個測試案例中使用的參考裝置是多組裝置,而不是所有相同裝置。舉例來說,您可以視需求針對各個測試案例,在全部 4 個 Thread 參照裝置之間進行配對及比對,而不是使用 32 個 TI CC2538 板。

如要使用混合式測試床,必須進行額外設定:

  1. 將下列額外參數新增至 Test Harness 設定檔,位於 C:\GRL\Thread1.1\Config\Configuration.ini
    EnableDeviceSelection = True
  2. 從 Thread 群組下載拓撲設定檔。將這個檔案新增為 TopologyConfig.txtC:\GRL\Thread1.1\Thread_Harness\TestScripts。這個檔案詳細說明瞭每個測試案例中各角色適用的參照裝置。

您可以為 Thread Group 提供的拓撲設定檔修改其他混合床配置,但針對正式認證,您必須使用原始設定。

在拓撲中使用,用於參照裝置的有效值如下:

拓撲中的值 測試 Harness 參考裝置
ARM ARM:NXP FRDM-K64F 帶 Firefly 6LoWPAN Shield
NXP NXP(Freescale):USB-KW24D512 連接器
OpenThread OpenThread:TI CC2538DK
SiLabs Silabs:EM358x USB 隨身碟

拓撲設定檔中的每個測試案例項目都必須分行列出,並以 role:device 對格式表示,如下所示:

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

測試 Harness Auto DUT 模式

GRL Test Harness 軟體提供先進的自動探索功能 (Auto DUT),可加快 Thread 參考堆疊廠商的驗證程序。

OpenThread 提供 Thread Host Controller Interface (THCI) 範例。此範例可讓 Test Harness 將元件或產品控制為如同其中一個參考平台。根據您平台的序列埠特性,DUT 可能會:

做為現有的 OpenThread 參考平台

如果 DUT 的序列埠符合 115200 8-N-1 的設定,而且裝置會在每次實體裝置重設後正確回應 (例如,為了確認裝置與 Windows 機器的有效連線),平台可以使用 OpenThread THCI 工具。這項工具可讓裝置在測試過程中做為 OpenThread 參照平台使用。

  1. 如果 GRL 測試工具已開啟,請予以關閉。
  2. 將裝置連結至 Windows 電腦。
  3. 使用 Python pySerial 模組尋找裝置序列埠硬體 ID:
    1. 在 Windows 電腦上安裝 pySerial
    2. 在 Windows 指令列中使用 Python,針對連線至機器的裝置列舉所有硬體 ID (VID 和 PID)。在這個輸出內容中,有一部裝置使用 ID 為 VID=1366 和 PID=1015 的 ID:
      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. 更新黃金裝置清單:
    1. 開啟 C:\GRL\Thread1.1\Config\Configuration.ini
    2. GoldenDeviceHardwareIds 陣列中的 OpenThread 群組更新為裝置的 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','VID:PID=1366:1015']}
  5. 啟用自動 DUT 模式

做為新的參考平台

如果 DUT 的序列埠在適當的序列埠設定下無法正常運作,或是裝置經過重設後,裝置並未正確回應 (在重設後 3-6 秒內輸出了無法讀取的程式碼),則可以自訂 OpenThread THCI,以在「測試習慣」中將裝置視為新的平台。

舉例來說,如要使用 Nordic Semiconductor nRF52840 平台自訂 THCI:

  1. 如果 GRL 測試工具已開啟,請予以關閉。
  2. 根據目標裝置的 UART 特性修改 /tools/harness-thci/OpenThread.py。修改設定可能在目標裝置之間有所不同。以北歐 nRF52840 平台為例:

    1. OpenThread.py 檔案重新命名為 nRF52840.py
    2. 將「OpenThread」的前 3 次發生變更為「&Rt52840」:

      >> 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. 將新平台資訊新增至 Test Harness:

    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 模組尋找裝置序列埠硬體 ID:

    1. 在 Windows 電腦上安裝 pySerial
    2. 在 Windows 指令列中使用 Python,針對連線至機器的裝置列舉所有硬體 ID (VID 和 PID)。在這個輸出內容中,有一部裝置使用 ID 為 VID=1366 和 PID=1015 的 ID:
      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. 更新黃金裝置清單:

    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