Thiết lập quy trình Tự động hoá chứng chỉ

Để tự động hoá các bài kiểm thử chứng nhận, bạn cần thiết lập thêm.

Tất cả các bước cài đặt và định cấu hình bên dưới đều diễn ra trên máy Windows đang chạy phần mềm GRL Test Harness. Tải xuống và cài đặt GRL Thread Test Harness mới nhất trước khi tiếp tục.

Sau khi cài đặt, có 2 phương pháp tự động hoá cho thiết bị đang kiểm thử (DUT):

  1. Công cụ tự động hoá OpenThread Harness
  2. Chế độ DUT tự động của bộ kiểm thử

Công cụ tự động hoá OpenThread Harness

Cài đặt

  1. Cài đặt phần mềm sau:
    • Python 2.7
    • Git cho Windows (bạn nên dùng Bash)
  2. Sao chép kho lưu trữ OpenThread để lấy các tập lệnh tự động hoá:
    git clone https://github.com/openthread/openthread
    
  3. Cài đặt các yêu cầu về Python:
    cd tools/harness-automation
    pip install -r requirements.txt
    
  4. Cài đặt cả Google ChromeChromeDriver.

Định cấu hình

  1. Tạo tệp cấu hình cho công cụ tự động hoá:
    cp autothreadharness/settings_sample.py autothreadharness/settings.py
    
  2. Cập nhật tệp cấu hình mới đó theo hướng dẫn trong tệp.
  3. Thêm tham số sau vào tệp cấu hình Test Harness (Nền tảng kiểm thử), có tại C:\GRL\Thread1.1\Config\Configuration.ini:
    BrowserAutoNavigate = False

Hỗ trợ nền tảng thử nghiệm hỗn hợp

Công cụ tự động hoá Harness cũng hỗ trợ các nền tảng kiểm thử hỗn hợp, trong đó các thiết bị tham chiếu được dùng trong mỗi trường hợp kiểm thử là một nhóm thiết bị hỗn hợp thay vì tất cả đều là cùng một thiết bị. Ví dụ: thay vì sử dụng 32 bo mạch TI CC2538 chạy OpenThread cho tất cả các trường hợp kiểm thử, bạn có thể kết hợp và so khớp giữa cả 4 thiết bị tham chiếu Thread cho từng trường hợp kiểm thử theo ý muốn.

Để sử dụng các nền tảng thử nghiệm hỗn hợp, bạn cần phải thiết lập thêm:

  1. Thêm tham số bổ sung sau đây vào tệp cấu hình Test Harness, có tại C:\GRL\Thread1.1\Config\Configuration.ini:
    EnableDeviceSelection = True
  2. Tải tệp cấu hình cấu trúc liên kết xuống từ Thread Group. Thêm tệp này dưới dạng TopologyConfig.txt vào C:\GRL\Thread1.1\Thread_Harness\TestScripts. Tệp này trình bày chi tiết thiết bị tham chiếu cần dùng cho từng vai trò trong từng trường hợp kiểm thử.

Bạn có thể sửa đổi tệp cấu hình cấu trúc liên kết do Thread Group cung cấp cho các cấu hình khác của giường hỗn hợp, nhưng để được chứng nhận chính thức, bạn phải sử dụng cấu hình ban đầu.

Các giá trị hợp lệ để sử dụng cho thiết bị tham chiếu trong tệp cấu hình cấu trúc liên kết là:

Giá trị trong tệp cấu hình cấu trúc liên kết Thiết bị tham chiếu Test Harness
ARM ARM: NXP FRDM-K64F có Firefly 6LoWPAN Shield
NXP NXP(Freescale): USB-KW24D512 Dongles
OpenThread OpenThread: TI CC2538DK
SiLabs Silabs: EM358x USB Stick

Mỗi mục nhập trường hợp kiểm thử trong tệp cấu hình cấu trúc liên kết phải nằm trên một dòng riêng biệt và được định dạng theo các cặp role:device như sau:

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

Chế độ DUT tự động của bộ kiểm thử

Phần mềm GRL Test Harness cung cấp một tính năng tự động phát hiện nâng cao (Auto DUT) giúp đẩy nhanh quy trình xác thực cho các nhà cung cấp ngăn xếp tham chiếu Thread.

OpenThread cung cấp một ví dụ về Giao diện bộ điều khiển máy chủ Thread (THCI) cho phép Test Harness kiểm soát thành phần hoặc sản phẩm của bạn như thể đó là một trong các nền tảng tham chiếu. Theo đặc điểm của cổng nối tiếp trên nền tảng cụ thể của bạn, DUT có thể:

Đóng vai trò là nền tảng tham chiếu OpenThread hiện có

Nếu cổng nối tiếp của DUT hoạt động trong chế độ cài đặt 115200 8-N-1 và thiết bị phản hồi chính xác sau mỗi lần đặt lại thiết bị thực (ví dụ: để xác nhận kết nối hợp lệ của thiết bị với máy Windows), thì nền tảng có thể sử dụng công cụ THCI OpenThread. Công cụ này cho phép thiết bị hoạt động như nền tảng tham chiếu OpenThread trong quá trình thử nghiệm.

  1. Đóng GRL Test Harness (nếu đang mở).
  2. Gắn thiết bị vào máy Windows.
  3. Tìm giá trị nhận dạng phần cứng của cổng nối tiếp của thiết bị bằng cách sử dụng mô-đun pySerial của Python:
    1. Cài đặt pySerial trên máy Windows.
    2. Sử dụng Python trên dòng lệnh Windows để liệt kê tất cả các giá trị nhận dạng phần cứng (VID và PID) cho các thiết bị được kết nối với máy. Trong đầu ra này, một thiết bị được kết nối với giá trị nhận dạng VID=1366 và PID=1015:
      python -m serial.tools.list_ports -v
      COM10
          desc: USB Serial Port (COM10)
          hwid: USB\VID_1366+PID_1015+MI_00
    3. Nếu đã biết cổng COM, bạn có thể dùng một lệnh khác. Ví dụ: nếu cổng COM là 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. Cập nhật danh sách Thiết bị vàng:
    1. Mở C:\GRL\Thread1.1\Config\Configuration.ini.
    2. Cập nhật nhóm OpenThread trong mảng GoldenDeviceHardwareIds bằng VID và PID của(các) thiết bị:
      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. Bật chế độ Auto DUT.

Đóng vai trò là một nền tảng tham chiếu mới

Nếu cổng nối tiếp của DUT không hoạt động trong chế độ cài đặt cổng nối tiếp thích hợp hoặc thiết bị không phản hồi đúng cách sau khi đặt lại thiết bị thực (đưa ra mã không đọc được trong vòng 3-6 giây sau khi đặt lại), thì bạn có thể tuỳ chỉnh OpenThread THCI để coi thiết bị là một nền tảng mới trong Bộ kiểm thử.

Ví dụ: để tuỳ chỉnh THCI bằng nền tảng Nordic Semiconductor nRF52840:

  1. Đóng GRL Test Harness (nếu đang mở).
  2. Sửa đổi /tools/harness-thci/OpenThread.py dựa trên các đặc điểm UART của thiết bị mục tiêu. Các nội dung sửa đổi có thể khác nhau giữa các thiết bị mục tiêu. Trong trường hợp sử dụng nền tảng Nordic nRF52840:

    1. Đổi tên tệp OpenThread.py thành nRF52840.py.
    2. Thay đổi 3 lần xuất hiện đầu tiên của "OpenThread" thành "nRF52840":

      >> Device : nRF52840 THCI
      >> Class : nRF52840
      
      class nRF52840(IThci):
      
    3. Thay đổi các tham số của cổng nối tiếp:

      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. Thay đổi thời gian chờ để loại bỏ tác động của đầu ra mã không đọc được sau khi thiết bị đặt lại:

      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. Sao chép tệp nRF52840.py đã sửa đổi vào C:\GRL\Thread1.1\Thread_Harness\THCI

  4. Thêm thông tin nền tảng mới vào Test Harness:

    1. Tạo một biểu tượng (ở định dạng png hoặc jpg) để dễ dàng phân biệt nền tảng của bạn và sao chép biểu tượng đó vào C:\GRL\Thread1.1\Web\images.
    2. Cập nhật C:\GRL\Thread1.1\Web\data\deviceInputFields.xml bằng một phần DEVICE mới, trong đó tham số thumbnail là tệp biểu tượng:

      <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. Gắn thiết bị vào máy Windows.

  6. Tìm giá trị nhận dạng phần cứng của cổng nối tiếp thiết bị bằng cách sử dụng mô-đun pySerial của Python:

    1. Cài đặt pySerial trên máy Windows.
    2. Sử dụng Python trên dòng lệnh Windows để liệt kê tất cả các giá trị nhận dạng phần cứng (VID và PID) cho các thiết bị được kết nối với máy. Trong đầu ra này, một thiết bị được kết nối với giá trị nhận dạng VID=1366 và PID=1015:
      python -m serial.tools.list_ports -v
      COM10
          desc: USB Serial Port (COM10)
          hwid: USB\VID_1366+PID_1015+MI_00
    3. Nếu đã biết cổng COM, bạn có thể dùng một lệnh khác. Ví dụ: nếu cổng COM là 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. Cập nhật danh sách Thiết bị vàng:

    1. Mở C:\GRL\Thread1.1\Config\Configuration.ini.
    2. Thêm một nhóm nền tảng mới vào mảng GoldenDeviceHardwareIds bằng VID và PID của thiết bị:
      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. Bật chế độ Auto DUT.

Bật chế độ Auto DUT

Sau khi hoàn tất một trong hai lựa chọn cấu hình nêu trên:

  1. Mở GRL Test Harness, thiết bị/cổng hiện xuất hiện dưới dạng một thiết bị tham chiếu mới.
  2. Chọn hộp đánh dấu Enable Auto DUT Device Selection (Bật tính năng Tự động chọn thiết bị DUT) bên dưới danh sách Supported Hardware (Phần cứng được hỗ trợ).
  3. Chọn nút Đặt làm DUT trong mục thiết bị/cổng mục tiêu để đặt thiết bị làm DUT.
OT Certification Auto DUT