הגדרת אוטומציה של אישורים

כדי לבצע בדיקות אישור באופן אוטומטי, נדרשת הגדרה נוספת.

כל שלבי ההתקנה והתצורה שבהמשך מתרחשים במחשב Windows שמופעל בו תוכנת GRL Test Harness. לפני שממשיכים, יש להוריד ולהתקין את מסגרת הבדיקה של שרשור GRL.

לאחר ההתקנה, יש שתי שיטות אוטומציה למכשיר שנמצא בבדיקה (DUT):

  1. כלי אוטומציה לרתמות של OpenThread
  2. בדיקת מצב DUT אוטומטי של רתמה

כלי אוטומציה של רתמות של OpenThread

התקנה

  1. מתקינים את התוכנה הבאה:
    • Python
    • Git ל-Windows (מומלץ מאוד להשתמש בתמיכה ב-Bash)
  2. שכפול המאגר של OpenThread כדי לקבל את הסקריפטים של האוטומציה:
    git clone https://github.com/openthread/openthread
    
  3. הדרישות בנוגע ל-Python:
    cd tools/harness-automation
    pip install -r requirements.txt
    
  4. מתקינים גם את Google Chrome וגם את ChromeDriver.

הגדרה

  1. יצירת קובץ תצורה עבור כלי האוטומציה:
    cp autothreadharness/settings_sample.py autothreadharness/settings.py
    
  2. מעדכנים את קובץ התצורה החדש בהתאם להוראות בקובץ.
  3. מוסיפים את הפרמטר הבא לקובץ ההגדרות 'מסגרת בדיקה' שנמצא בכתובת C:\GRL\Thread1.1\Config\Configuration.ini:
    BrowserAutoNavigate = False

תמיכה לבדיקה של שילוב

כלי האוטומציה של רתמות תומכים גם בארגזי בדיקה מעורבים, כאשר מכשירי העזר בכל מארז בדיקה הם קבוצה של מכשירים מעורבים במקום כל המכשירים. לדוגמה, במקום להשתמש ב-32 לוחות TI CC2538 שפועלים OpenOpen בכל המופעים של המארז, אפשר לשלב בין כל ארבעת השרשורים של Threads לכל מקרה בדיקה.

כדי להשתמש בערוגות בדיקה מעורבות, צריך:

  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 Silabs: USB EM358x

כל רשומה של מקרי בדיקה בקובץ התצורה של הטופולוגיה חייבת להיות בשורה נפרדת והיא צריכה להיות בפורמט role:device של זוגות, באופן הבא:

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

בדיקת רתמות מצב DUT אוטומטי

תוכנת GRL Test Harness מספקת תכונה מתקדמת של גילוי אוטומטי (DUT) אוטומטי, המאיימת את תהליך האימות עבור Threads Reference stackers.

OpenThread מספקת דוגמה Thread Host Controller Interface (THCI) שמאפשרת לרתמות הבדיקה לשלוט ברכיב או במוצר שלכם, כאילו מדובר באחת מפלטפורמות ההפניה. בהתאם למאפייני היציאות הטוריות של הפלטפורמה הספציפית שלכם, ה-DUT יכול:

פועל כפלטפורמה קיימת לקובצי OpenThread

אם היציאה הטורית של ה-DUT פועלת לפי הגדרות 115200 8-N-1, והמכשיר מגיב כראוי לאחר כל איפוס של מכשיר פיזי (לדוגמה, כדי לאשר את החיבור החוקי של המכשיר למכונה Windows), הפלטפורמה יכולה להשתמש בכלי OpenThread THCI. כלי זה מאפשר למכשיר לשמש כפלטפורמת עזר של OpenThread בזמן הבדיקה.

  1. סגור את 'מסגרת הבדיקה של GRL', אם היא פתוחה.
  2. מחברים את המכשיר למכונה של Windows.
  3. מאתרים את מזהה החומרה של היציאה הטורית של המכשיר באמצעות המודול pySerial של Python:
    1. מתקינים את pySerial במחשב של Windows.
    2. יש להשתמש ב-Python בשורת הפקודה של Windows כדי לספור את כל מזהי החומרה (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. מעדכנים את רשימת מכשירי הזהב:
    1. פתיחת C:\GRL\Thread1.1\Config\Configuration.ini
    2. מעדכנים את קבוצת OpenThread במערך 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','VID:PID=1366:1015']}
  5. הפעלת מצב DUT אוטומטי.

משמש כפלטפורמת עזר חדשה

אם היציאה הטורית של ה-DUT לא פועלת תחת ההגדרות הנכונות של היציאה הטורית, או שהמכשיר לא מגיב כראוי לאחר איפוס של מכשיר פיזי (פלט של קוד לא קריא בתוך 3-6 שניות מהאיפוס), אפשר להתאים אישית את THCI כדי להתייחס למכשיר כפלטפורמה חדשה ב'מסגרת הבדיקה'.

לדוגמה, כדי להתאים אישית את הפורמט של תקן THCI באמצעות פלטפורמת Nordic Semiconductor nRF52840:

  1. סגור את 'מסגרת הבדיקה של GRL', אם היא פתוחה.
  2. שינוי /tools/harness-thci/OpenThread.py על סמך המאפיינים של UART במכשיר היעד. ייתכן שיהיו שינויים במיקוד בין מכשירי היעד. במקרה של פלטפורמת 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. יש לעדכן את C:\GRL\Thread1.1\Web\data\deviceInputFields.xml בקטע חדשDEVICE, שבו הפרמטר 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. מאתרים את מזהה החומרה של היציאה הטורית של המכשיר באמצעות המודול pySerial של Python:

    1. מתקינים את pySerial במחשב של Windows.
    2. יש להשתמש ב-Python בשורת הפקודה של Windows כדי לספור את כל מזהי החומרה (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. מעדכנים את רשימת מכשירי הזהב:

    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. פותחים את GRA Test Harm (מכשיר ברירת המחדל של בדיקת GRL), עכשיו המכשיר או היציאה מופיעים כמכשיר חדש לעיון.
  2. מסמנים את התיבה הפעלת בחירת מכשירים של DUT אוטומטיים מתחת לרשימת החומרה הנתמכת.
  3. לוחצים על לחצן הבחירה Set as DUT (הגדרה כ-DUT) מתחת ליעד/למכשיר כדי להגדיר את המכשיר כ-DUT.
OTUT של אישור אוטומטי