新型コロナウィルスの流行で、すっかりリモートワークが主流になった昨今。

リモートワークがしたい!
でも実機を操作しないと開発がすすまない… 一体どうすれば!

という組込み機器開発についてまわるお悩みもあって、リモートテストやテスト自動化の需要もさらに増加してきました。

「そんな組込み業界にいるからこそ、組込みソフトウェア開発ならではのテスト自動化の課題を解決したい。」
弊社では、そのような思いを胸に、
小さなところから少額で始められるテスト自動化ソリューション「Small Start Kit」(通称SSKit)
をご提供してまいりましたが、

なんとこの春、そのSSKitがリニューアル!
その名も新たに「Automeal (オートミール)」となりました!(とても健康志向な名前ですね!)

Automealは、ターゲット機器の「制御・計測・判定」を軸として、
SSKitよりさらにお手軽にテスト自動化を実現するソリューションです。

どのくらいお手軽かといいますと、このAutomeal、なんとなんと、
サンプル版を無料でお試しいただけます!

サンプルアプリダウンロードはこちらから!

まあ、それはさておき!

この記事では、
自動テスト初心者な社内エンジニアの私が、実際にAutomealを使ってみた様子を
数回に分けてお届けしていきます。

「自分もやってみたいけど、まだ敷居がなぁ…」と感じている皆さん、
なにを隠そう、これを書いております私自身も初めて触ります。
みなさんと同じ感覚でレポートをお届けしていきますので、
ぜひチェックしていただければ!と思います。

今回の記事では、「パート1:制御」についてお届けします。
「計測」「判定」については次回以降の更新をお楽しみに!

 

はじめに。Automealとは?

冒頭でも少し触れましたが、
Automealは気軽に自動化を始められるテスト自動化ソリューションです。
以下の4つの要素から構成されており、かんたんにターゲット機器の「制御・計測・判定」をすることができます。

・マネージャアプリ:テストの実行管理
・ランナーアプリ:テストシナリオの実行と結果判定
・テストユニット(ラズパイ):ターゲット機器に対する制御・計測
・拡張I/Fボード:ターゲット機器との接続

各部の役割がはっきりしているので分かりやすいですね。

まず注目したいのは「拡張I/Fボード」

上記4つの要素のひとつ、拡張I/Fボードは、テストユニットとターゲット機器の接続に使うボードです。
ターゲットや目的に合わせてラズパイに付け替えることで、Automealを様々な機器に対して使用していただけるようになります。
例えば、
「このターゲットに対してはロジック信号での制御・計測をしたいから、ロジック入出力用に今回はこのI/Fボードを使おう!」
といった感じです。

これにより、ツール自体はシンプルに、かつ、汎用性を持たせることができます。
開発が進むにつれてテストが必要な機能が増えたときには、また拡張I/Fボードを追加すればいいので、
そのステップに合わせた構成に組み替えることがかんたんです。
(開発者談)

また、いざ自動テストに取り組もう!となったとき、
・自分たちの環境ではどこを自動化することができるのか
・どんな自動化が最適なのか
いろいろ手探りで進めていくことになりがちです。
そんなときにも、I/Fボードの付け替え機能が活用できそうですね。

そして、次の注目ポイントは
Pythonで自動テストの命令が出せるところです!

馴染みのあるシンプルな言語でテストスクリプトを作成可能で、シナリオ作成が楽々。
しかも、自動テストを実施する際は、スクリプトを実行するだけで制御から計測、判定までやってくれる…!

機器のボタンをポチポチしたりセンサに手をかざしたりして、その結果を元にこまごまとOK/NGを記載していく…
そんな気の遠くなる作業ともおさらばです。

ツールはサンプルスクリプトやスクリプトのレファレンスと共にお届けするので、
シナリオをちゃんと作れるのかと不安な方もご安心ください。
(開発者談)

構成や機能などに関するもっと細かい説明は、以下の記事内で触れています。
コチラも是非ご覧ください。

テスト自動化ツールまとめ
~どれを使えばいいのか書いてみた~

年々、大規模化するソフトウェア開発。品質に対する要求レベルも上昇しており、テストにかかる工数も増加しています。そこで、自動化へ一歩踏み出す皆さんが導入からつまずかないよう、テスト自動化の始め方と自動化ツールについてまとめてみました。

 

ハードウェアの用意

さてさて、テスト自動化を構築していきましょう。
まずはハードウェアの用意をしていきます。

上記でご紹介したラズパイ、拡張I/Fボード、そして今回のテスト対象となるターゲット機器を持ってきました。
ターゲット機器は、過去に弊社のセミナーや展示会ブースにご来場いただいた方にはおなじみ(?)の扇風機を使用します。

拡張I/Fボードは、ロジック入出力ボードアナログ入出力ボード、の二つをラズパイにアタッチしました。
ロジック信号とアナログ信号の制御/計測をできるようにしておきたいためです。
なお、PWMの計測に関してはI/Fボード必要なし。ラズパイに直で繋いでみました。

拡張I/Fボードは、写真のように複数段重ね付けすることも可能で、
MAX8段まで付けられる予定です。
(開発者談)

テストユニットはラズパイと拡張I/Fボードを組み合わせることで汎用的に活用可能です。

テストユニットとPCはLANケーブルで繋ぎます。
テストユニットと扇風機、テストユニットとサーボモータは、ジャンパ線で繋ぎました。
※お写真では少し見えづらくなってしまいましたが…

なにやら難しげに思っていましたが、いざやってみると
ターゲット(扇風機) ⇔ テストユニット(拡張I/Fボード) ⇔ PCを繋げればいいだけ!

「ありものでできる」ということですね。
かんたんです!

各ハードウェアの接続もシンプル。

ジャンパ線で接続する場所に気を付けながら繋げるだけなので、とてもかんたん。
構成も小さいし、使用するものも小さいので、わずらわしさがありませんでした。

何か新しく始めたり、導入しようとするとき、結構セットアップに時間が掛ってしまいがちですが、
さすが「はじめやすい」が売りの一つということもあり、
セットアップ的にも始めるときのハードルが低い気がしました。
(やっている最中にこれで動かせるのか…!と少しわくわくしていました。)

 

Pythonでテスト自動実行してみた

ここまででハードウェアの接続は完了。
いざ、実際にテストを実行していきます!

テストユニットを制御するランナーアプリを実行すると、このような画面が表示されます。

実際のアプリ画面です。左サイドではアプリ上での手動操作が実施可能です。

チャートが出てきて、計測できる感がありますね。
Automealでは、Pythonスクリプトを読み込ませ自動で操作することも、
ランナーアプリUIから手動で操作することも可能です。

今回はPythonで記述したテストシナリオに沿ったテストを実行させることをしてみたいと思います!
スクリプトは
・どんなテストを実行したいか
・どんな値を計測したいか
・結果判定をどのようにするか
などに合わせて作ることができるのが嬉しいですね。

先にもご説明しましたが、アプリにはサンプルのスクリプトやレファレンスが付いてくるので、
どんな感じでスクリプトを書けばいいのか分からないというときの参考にできるでしょう。

とはいえ、
「Pythonスクリプトでかんたんにテスト自動化できて、コストも削減できます!」と言われても、
じゃあ、そのスクリプトを作るにはどれくらいの労力がいるのか?
ここ、気になるポイントですよね。

そこで、今回使用するスクリプトの抜粋を公開!
慣れてしまえばかんたんに作成が可能です。
どんなテストでもおおよそ同じような記述方法かと思いますので、ご参考になれば・・・。

#!/usr/bin/env python3

import asyncio
from asyncio.tasks import sleep
import time
from xmlrpc.client import TRANSPORT_ERROR
import lib.test_manager as tm
import subprocess
from lib.TestLogger import *

### GPIOのON/OFFのチェックに使用
ON = 1
OFF = 0

async def main():

try:
### TestLoggerの初期化
### Logファイル名を変更する場合は第1引数を変更する
tlog.Setup(“pythonLog.log”,__name__)

tlog.info(‘===== テストシナリオを開始します。 =====’)

tlog.info(‘テストを開始します。’)

### 自動テストを開始
tm.start()

### 初期化
### PWM1,2の出力停止
tm.pwm(‘PWM1’, 1, 0)
tm.pwm(‘PWM2’, 50, 6)

### GPIOをLowに設定
tm.key(‘GPO_17’, False)
tm.key(‘GPO_27’, False)
tm.key(‘GPO_22’, False)
tm.key(‘GPO_5’, False)

### DACを0に設定
tm.dac(‘DAC1’, 0)
tm.dac(‘DAC2’, 0)
tm.dac(‘DAC3’, 0)
tm.dac(‘DAC4’, 0)
tm.dac(‘DAC5’, 0)
tm.dac(‘DAC6’, 0)
tm.dac(‘DAC7’, 0)
tm.dac(‘DAC8’, 0)

#########
#
# テスト内容を記述
#
#########

# POWER(電源)をONにする
tlog.info(‘電源をONにします。’)
tm.key(‘GPO_17’, True)
value = tm.get_output(‘GPO_17’)
if not value == ON:
raise tm.TestError(‘GPO_17の出力が変更されていません。’)
time.sleep(0.1)
tm.key(‘GPO_17’, False)
value = tm.get_output(‘GPO_17’)
if not value == OFF:
raise tm.TestError(‘GPO_17の出力が変更されていません。’)
time.sleep(0.1)

# 待機
time.sleep(5)

# 風量切り替え
tlog.info(‘風量を切り替えます。’)
tm.key(‘GPO_27’, True)
value = tm.get_output(‘GPO_27’)
if not value & 1 == 1:
raise tm.TestError(‘GPO_27の出力が変更されていません。’)
time.sleep(0.1)
tm.key(‘GPO_27’, False)
value = tm.get_output(‘GPO_27’)
if not value & 1 == 0:
raise tm.TestError(‘GPO_27の出力が変更されていません。’)

このようなスクリプトを書いて、次のようなシナリオを作成します。

  1. テストを開始する
  2. 電源をONにする
  3. 風量を切り替える
  4. 風量を切り替える
  5. サーボモータのアームを下げる
  6. サーボモータのアームを上げる
  7. 距離センサからの距離値を10cmにする
  8. ECOモードをONにする
  9. 距離センサからの距離値を40cmにする
  10. 距離センサからの距離値を10cmにする
  11. ECOモードをOFFにする
  12. 風量を切り替える
  13. 電源をOFFにする
  14. テストを終了する

風量の切り替えなど、同じ操作はコピペでいけてしまうのも楽ですね。

今回はPython3.9.6でスクリプトを実行します。
シナリオファイル.pyを指定して実行するだけで、
それをアプリが読み込んでくれて、
ラズパイに指示してくれて、
そこから疑似信号を出力、
I/Fボードを介してターゲットを制御してくれます。

そしてターゲットからの信号を計測し、
結果判定もスクリプトで定義できます。

仕組みもシンプルで分かりやすい!
制御の様子は以下の動画でご覧ください。
アプリ、(Pythonを実行する)コマンドライン、ターゲット機器、それぞれの動きをお確かめいただけます。

「制御してみましょう!」といってもPythonを実行するだけなのでとても楽ですね。これなら誰でもできそう!

コマンドライン上で何が実行されるかを確認しながら、実機の動きを見ることができました。
また、アプリ上のチャートをみることで、どのような信号が出ているのかを確認することもできます。

今回は自動テスト実施中にリアルタイムで確認しましたが、
もちろん過去データの参照が可能なため、
・どのようにテストが実施され
・どのような動きをしていたか
を、後から確認することができます

また、今回サーボモータの制御でバグレス君を動かしました。
※バグレス君↓

単純にかわいいということで動かしましたが、
これ、
バグレスくんのような物体をセンサの前で動かし、センサの反応を計測する
…などに活用できそうじゃないですか?

このように、制御するものを組み合わせることで
テストのバリエーションを展開していくこともできます。

 

制御の自動化ってかんたん

今回、AutomealでPythonからターゲットの制御をやってみましたが、
感想としては、
楽で、かんたんだった
というのが一番です。

ぜひ、テストで苦しんでいる方々におすすめしたいです。

個人的なお話しですが、
統合テストや妥当性確認をしたときにずっとボタンをポチポチしてると
「私は何をやってるんだろう…」
という気持ちになることもありますし、
テストケースをどこまで実施したか、意識が飛んでしまいそうになることもあります。
同じような境遇の方もいらっしゃるのではないでしょうか?

それに対して、実際にAutomealを使って自動テストをしてみて、
こういうソリューションがあったらだいぶ楽になるなと感じました。
もちろん業務など時間的にもそうですし、精神的にも楽になりそう。

このAutomeal、ただいま絶賛開発中とのことで、
今後もさらなる機能追加や使いやすさの向上が期待されます。
これからが楽しみです!

 

最後に

いかがでしたか?
「テスト自動化を検討しているけど、なかなか敷居が高い…どうしたらいいのだろう…。」
という方に少しでもご興味をお持ちいただけたのであれば幸いです。

どうしたらいいのか分からないからこそ、
少しずつ、試しながら自動化を取り入れていく。
それができるのがAutomealです。

コンセプトや詳細な機能、活用事例などはデモにてご説明させていただきます。
是非お気軽にお問い合わせください!

最後までお読みいただき、ありがとうございました!

【見逃し配信中!2022年06月30日まで!】テスト自動化に関するウェビナー

近年の組込み機器開発の現場では「テスト自動化」が進んでいます。
しかし、いざ自動化に取り組もうとしても、なかなか導入検討が進まない・・・というお悩みが。
そこで、「Raspberry Pi」でお手軽にテスト自動化を実現する「Automeal(オートミール)」をご紹介します。
さらに、「自動化導入のメリット」や「最大限活用するためのコツ」などもご紹介!

また、今回のセミナーでは、参加者の方全員に、
すぐにお試しいただける「Automeal」サンプルアプリ を プレゼント!
ぜひお気軽にご参加ください。

お申込みはこちら!