認定テストを自動化するには、追加の設定が必要です。
以下のインストールと構成の手順はすべて、GRL Test Harness ソフトウェアを実行している Windows マシンで行います。続行する前に、最新の GRL Thread Test Harness をダウンロードしてインストールします。
インストールが完了すると、テスト対象デバイス(DUT)の自動化方法が 2 つあります。
OpenThread Harness Automation Tool
インストール
- 次のソフトウェアをインストールします。
- Python 2.7
- Git for 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 - ファイル内の手順に沿って、新しい構成ファイルを更新します。
C:\GRL\Thread1.1\Config\Configuration.iniにあるテストハーネス構成ファイルに次のパラメータを追加します。BrowserAutoNavigate = False
混合テストベッドのサポート
Harness Automation Tool は、各テストケースで使用される参照デバイスがすべて同じデバイスではなく、デバイスの混合セットである混合テストベッドもサポートしています。たとえば、すべてのテストケースで OpenThread を実行する 32 個の TI CC2538 ボードを使用する代わりに、各テストケースで 4 つの Thread 参照デバイスを必要に応じて組み合わせることができます。
混合テストベッドを使用するには、追加の構成が必要です。
C:\GRL\Thread1.1\Config\Configuration.iniにあるテストハーネス構成ファイルに、次の追加パラメータを追加します。EnableDeviceSelection = True
- Thread Group からトポロジ構成ファイルをダウンロードします。このファイルを
C:\GRL\Thread1.1\Thread_Harness\TestScriptsにTopologyConfig.txtとして追加します。このファイルには、各テストケースの各ロールで使用するリファレンス デバイスの詳細が記載されています。
Thread Group が提供するトポロジ構成ファイルは、他の混合ベッド構成用に変更できますが、公式の認証では元の構成を使用する必要があります。
トポロジ構成ファイルで参照デバイスに使用できる有効な値は次のとおりです。
| トポロジ構成ファイルの値 | テストハーネスのリファレンス デバイス |
|---|---|
ARM |
ARM: NXP FRDM-K64F と Firefly 6LoWPAN Shield |
NXP |
NXP(Freescale): USB-KW24D512 ドングル |
OpenThread |
OpenThread: TI CC2538DK |
SiLabs |
Silabs: EM358x USB Stick |
トポロジ構成ファイルの各テストケース エントリは、次の例のように role:device ペアでフォーマットされ、別々の行に記述する必要があります。
5.3.10-Leader:NXP,Router_1:OpenThread,BorderRouter:OpenThread,MED_1:ARM
テストハーネス Auto DUT モード
GRL Test Harness ソフトウェアには、Thread リファレンス スタック ベンダーの検証プロセスを加速する高度な自動検出機能(Auto DUT)が用意されています。
OpenThread は、参照プラットフォームの 1 つであるかのようにテストハーネスがコンポーネントやプロダクトを制御できるようにする Thread Host Controller Interface(THCI)の例を提供します。特定のプラットフォームのシリアルポートの特性に応じて、DUT は次のいずれかになります。
既存の OpenThread リファレンス プラットフォームとして機能する
DUT のシリアルポートが 115200 8-N-1 の設定で機能し、デバイスが物理デバイスのリセットごとに正しく応答する場合(たとえば、Windows マシンへのデバイスの有効な接続を確認する場合)、プラットフォームは OpenThread THCI ツールを使用できます。このツールを使用すると、テスト中にデバイスを OpenThread リファレンス プラットフォームとして機能させることができます。
- GRL Test Harness が開いている場合は閉じます。
- デバイスを Windows マシンに接続します。
- Python pySerial モジュールを使用して、デバイスのシリアルポートのハードウェア ID を見つけます。
- Windows マシンに pySerial をインストールします。
- Windows コマンドラインで Python を使用して、マシンに接続されているデバイスのすべてのハードウェア識別子(VID と PID)を列挙します。この出力では、1 つのデバイスが 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を開きます。- デバイスの 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']}
- 自動 DUT モードを有効にします。
新しいリファレンス プラットフォームとしての役割を果たす
DUT のシリアルポートが適切なシリアルポート設定で機能しない場合、または物理デバイスのリセット後にデバイスが正しく応答しない場合(リセット後 3 ~ 6 秒以内に読めないコードを出力する場合)、OpenThread THCI をカスタマイズして、テストハーネスでデバイスを新しいプラットフォームとして扱うことができます。
たとえば、Nordic Semiconductor nRF52840 プラットフォームを使用して THCI をカスタマイズするには:
- GRL Test Harness が開いている場合は閉じます。
ターゲット デバイスの UART の特性に基づいて
/tools/harness-thci/OpenThread.pyを変更します。変更内容は、ターゲット デバイスによって異なる場合があります。Nordic nRF52840 プラットフォームの場合:OpenThread.pyファイルの名前をnRF52840.pyに変更します。「OpenThread」の最初の 3 つの出現箇所を「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にコピーします。新しいプラットフォームの情報をテストハーネスに追加します。
- プラットフォームを区別しやすくするためのアイコン(png または jpg 形式)を作成し、
C:\GRL\Thread1.1\Web\imagesにコピーします。 新しい
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>
- プラットフォームを区別しやすくするためのアイコン(png または jpg 形式)を作成し、
デバイスを Windows マシンに接続します。
Python pySerial モジュールを使用して、デバイスのシリアルポートのハードウェア ID を見つけます。
- Windows マシンに pySerial をインストールします。
- Windows コマンドラインで Python を使用して、マシンに接続されているデバイスのすべてのハードウェア識別子(VID と PID)を列挙します。この出力では、1 つのデバイスが 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を開きます。- デバイスの VID と PID を使用して、
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',
'nRF52840': 'VID:PID=1366:1015'}
自動 DUT モードを有効にする
上記の 2 つの構成オプションのいずれかが完了したら:
- GRL Test Harness を開くと、デバイス/ポートが新しい参照デバイスとして表示されます。
- [サポートされているハードウェア] リストの下にある [Enable Auto DUT Device Selection] チェックボックスをオンにします。
- ターゲット デバイス/ポートの下にある [Set as DUT] ラジオボタンを選択して、デバイスを DUT として設定します。