لأتمتة اختبارات الشهادات، يجب إجراء عملية إعداد إضافية.
تحدث جميع خطوات التثبيت والإعداد أدناه على جهاز Windows الذي يتم تشغيل برنامج GRL Test Harness عليه. نزِّل أحدث إصدار من GRL Thread Test Harness وثبِّته قبل المتابعة.
بعد التثبيت، تتوفّر طريقتان لتنفيذ عملية الإعداد التلقائي للجهاز قيد الاختبار (DUT):
OpenThread Harness Automation Tool
تثبيت
- ثبِّت البرامج التالية:
- Python 2.7
- Git لنظام التشغيل Windows (ننصح بشدة باستخدام Bash)
- استنسِخ مستودع OpenThread للحصول على نصوص التشغيل الآلي:
git clone https://github.com/openthread/openthread - ثبِّت متطلبات Python:
cd tools/harness-automationpip install -r requirements.txt - ثبِّت كلاً من Google Chrome وChromeDriver.
إعداد
- أنشئ ملف إعداد لأداة التشغيل الآلي:
cp autothreadharness/settings_sample.py autothreadharness/settings.py - عدِّل ملف الإعداد الجديد هذا وفقًا للتعليمات الواردة في الملف.
- أضِف المَعلمة التالية إلى ملف إعداد Test Harness، الذي يمكن العثور عليه في
C:\GRL\Thread1.1\Config\Configuration.ini:BrowserAutoNavigate = False
التوافق مع منصات الاختبار المختلطة
تتيح "أداة التشغيل الآلي في Harness" أيضًا استخدام منصات اختبار مختلطة، حيث تكون الأجهزة المرجعية المستخدَمة في كل حالة اختبار مجموعة مختلطة من الأجهزة بدلاً من أن تكون جميعها من النوع نفسه. على سبيل المثال، بدلاً من استخدام 32 لوحة TI CC2538 تعمل بنظام OpenThread لجميع حالات الاختبار، يمكنك المزج والمطابقة بين جميع أجهزة مرجع Thread الأربعة لكل حالة اختبار حسب الرغبة.
لاستخدام بيئات اختبار مختلطة، يجب إجراء إعدادات إضافية:
- أضِف المَعلمة الإضافية التالية إلى ملف إعداد Test Harness، الذي يمكن العثور عليه في
C:\GRL\Thread1.1\Config\Configuration.ini:EnableDeviceSelection = True
- نزِّل ملف إعدادات طوبولوجيا الشبكة من مجموعة Thread.
أضِف هذا الملف كـ
TopologyConfig.txtإلىC:\GRL\Thread1.1\Thread_Harness\TestScripts. يوضّح هذا الملف الجهاز المرجعي الذي يجب استخدامه لكل دور في كل حالة اختبار.
يمكن تعديل ملف إعدادات التصميم الذي توفّره مجموعة Thread ليناسب تصميمات أخرى مختلطة، ولكن يجب استخدام التصميم الأصلي للحصول على شهادة اعتماد رسمية.
القيم الصالحة التي يمكن استخدامها للأجهزة المرجعية في ملف إعدادات مخطط الشبكة هي:
| القيمة في ملف إعدادات التصميم | الجهاز المرجعي لمفعّل الاختبار |
|---|---|
ARM |
ARM: NXP FRDM-K64F مع Firefly 6LoWPAN Shield |
NXP |
NXP(Freescale): USB-KW24D512 Dongles |
OpenThread |
OpenThread: TI CC2538DK |
SiLabs |
Silabs: EM358x USB Stick |
يجب أن يكون كل إدخال لحالة اختبار في ملف إعدادات طوبولوجيا على سطر منفصل، وأن يكون منسَّقًا في أزواج role:device على النحو التالي:
5.3.10-Leader:NXP,Router_1:OpenThread,BorderRouter:OpenThread,MED_1:ARM
وضع "مفعِّل الاختبار" التلقائي للجهاز الخاضع للاختبار
يوفّر برنامج GRL Test Harness ميزة متقدّمة للاكتشاف التلقائي (Auto DUT) تعمل على تسريع عملية التحقّق من صحة المورّدين الذين يستخدمون حزمة مرجعية لبروتوكول Thread.
توفّر OpenThread مثالاً على واجهة التحكّم في مضيف Thread (THCI) التي تتيح لأداة Test Harness التحكّم في المكوّن أو المنتج كما لو كانا أحد الأنظمة الأساسية المرجعية. وفقًا لخصائص المنفذ التسلسلي لمنصتك المحدّدة، يمكن أن يكون جهاز الاختبار إما:
العمل كمنصة مرجعية حالية لـ OpenThread
إذا كان منفذ التسلسل الخاص بالجهاز قيد الاختبار يعمل ضمن إعدادات 115200 8-N-1، وكان الجهاز يستجيب بشكل صحيح بعد كل عملية إعادة ضبط للجهاز الفعلي (على سبيل المثال، لتأكيد اتصال الجهاز الصحيح بجهاز Windows)، يمكن للمنصة استخدام أداة OpenThread THCI. تتيح هذه الأداة للجهاز العمل كمنصة مرجعية لـ OpenThread أثناء الاختبار.
- أغلِق GRL Test Harness إذا كان مفتوحًا.
- وصِّل الجهاز بجهاز Windows.
- ابحث عن معرّف الجهاز التسلسلي لمنفذ الجهاز باستخدام وحدة Python pySerial:
- تثبيت pySerial على جهاز Windows
- استخدِم Python على سطر أوامر Windows لتعداد جميع معرّفات الأجهزة (VID وPID) للأجهزة المتصلة بالجهاز. في هذا الناتج، تم ربط جهاز بمعرّف VID=1366 ومعرّف PID=1015:
python -m serial.tools.list_ports -vCOM10desc: USB Serial Port (COM10)hwid: USB\VID_1366+PID_1015+MI_00 - إذا كنت تعرف منفذ 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']
- تعديل قائمة الأجهزة الذهبية:
- فتح "
C:\GRL\Thread1.1\Config\Configuration.ini" - عدِّل مجموعة OpenThread في مصفوفة
GoldenDeviceHardwareIdsباستخدام معرّفَي المورّد والمنتج للأجهزة: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']}
- فتح "
- فعِّل وضع Auto DUT.
العمل كمنصة مرجعية جديدة
إذا لم يعمل منفذ التسلسل الخاص بالجهاز الخاضع للاختبار ضمن إعدادات منفذ التسلسل المناسبة، أو إذا لم يستجب الجهاز بشكل صحيح بعد إعادة ضبط الجهاز فعليًا (يُخرج رمزًا غير قابل للقراءة خلال 3 إلى 6 ثوانٍ من إعادة الضبط)، يمكن تخصيص OpenThread THCI للتعامل مع الجهاز كمنصة جديدة في Test Harness.
على سبيل المثال، لتخصيص THCI باستخدام منصة Nordic Semiconductor nRF52840، اتّبِع الخطوات التالية:
- أغلِق GRL Test Harness إذا كان مفتوحًا.
عدِّل
/tools/harness-thci/OpenThread.pyاستنادًا إلى خصائص UART للجهاز المستهدف. قد تختلف التعديلات بين الأجهزة المستهدَفة. في حالة منصة Nordic nRF52840:- أعِد تسمية الملف
OpenThread.pyإلىnRF52840.py. غيِّر أول ثلاث مرات ورد فيها "OpenThread" إلى "nRF52840":
>> Device : nRF52840 THCI >> Class : nRF52840 class nRF52840(IThci):غيِّر مَعلمات المنفذ التسلسلي:
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()غيِّر وقت السكون لإزالة تأثير ناتج الرمز غير القابل للقراءة بعد إعادة ضبط الجهاز على النحو التالي:
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)
- أعِد تسمية الملف
نسخ الملف
nRF52840.pyالمعدَّل إلىC:\GRL\Thread1.1\Thread_Harness\THCIأضِف معلومات النظام الأساسي الجديد إلى Test Harness:
- أنشئ رمزًا (بتنسيق png أو jpg) لتسهيل التمييز بين منصتك، وانسخه إلى
C:\GRL\Thread1.1\Web\images. عدِّل
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>
- أنشئ رمزًا (بتنسيق png أو jpg) لتسهيل التمييز بين منصتك، وانسخه إلى
وصِّل الجهاز بجهاز Windows.
ابحث عن معرّف الجهاز التسلسلي لمنفذ الجهاز باستخدام وحدة Python pySerial:
- تثبيت pySerial على جهاز Windows
- استخدِم Python على سطر أوامر Windows لتعداد جميع معرّفات الأجهزة (VID وPID) للأجهزة المتصلة بالجهاز. في هذا الناتج، تم ربط جهاز بمعرّف VID=1366 ومعرّف PID=1015:
python -m serial.tools.list_ports -vCOM10desc: USB Serial Port (COM10)hwid: USB\VID_1366+PID_1015+MI_00 - إذا كنت تعرف منفذ 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']
تعديل قائمة "الأجهزة الذهبية":
- فتح "
C:\GRL\Thread1.1\Config\Configuration.ini" - أضِف مجموعة نظام أساسي جديدة في مصفوفة
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'}
- فتح "
تفعيل وضع Auto DUT
بعد إكمال أحد خياري الإعداد أعلاه:
- افتح GRL Test Harness، وسيظهر الجهاز/المنفذ الآن كجهاز مرجعي جديد.
- ضَع علامة في مربّع الاختيار تفعيل اختيار جهاز DUT تلقائيًا أسفل قائمة الأجهزة المتوافقة.
- انقر على زر الاختيار ضبط كجهاز قيد الاختبار ضمن الجهاز/المنفذ المستهدف لضبط الجهاز كجهاز قيد الاختبار.