waveさんの技術日誌

wave1008の日記の新館です。

スマホアプリ用自動テストツール Shirates のREADME

この記事は

github.com

のREADMEの日本語訳です。

 

Shirates(shirates-core)

Shiratesはモバイルアプリのテストコードを書くのを簡単かつ楽しいものにする結合テストフレームワークです。

shirates-coreはコアライブラリです。

 

3行で機能を説明

  1. テストコードを記述するためのほぼクロスプラットフォームAPIを提供します。AndroidiOSのプラットフォームをサポートします
  2. 強力なログ出力機能とレポーティング機能を提供します
  3. テスト環境をセットアップするための柔軟な構成管理フレームワークを提供します

もう少し詳しく説明

  • 画面の要素を操作したりそれらのステータスを検証したりするための使いやすいAPIを提供します
  • 内部的にはAppiumを使用しており、AndroidiOSアプリをサポートします。画面要素のマッピングファイルを使用することでAndroidiOSのテストコードを統合することができます
  • テストのセッションが完了した時にログ、スクリーンショット、HTMLレポート、MS-Excelワークシートを自動的に出力します
  • MS-Excelワークシートでテスト結果を確認し、追加のテストを手動で実行し、ワークシートに追記することができます
  • テストを実際に実行することなくテスト仕様書(Spec-Report)を生成することができます。Spec-Reportは手動テストやレビューで便利です。テスト対象のアプリがまだ開発中であってもテストコードを書き、手動テストのためにSpec-Reportを出力することができます

 

Shiratesという名称の由来

  • オリジナルのテストフレームワークがSHIRATAMA Test Frameworkという名称でした。そのオープンソースバージョンをShiratesと呼んでいます
  • SHIRATAMAとは和菓子の白玉団子に由来しており、テスト結果のOKの"O"が白玉団子に見えたのでそう名付けました

 

テストコード開発環境

  • OS: macOS または Windows (iOSアプリの開発にはmacOSが必要です)
  • IDE: IntelliJ IDEA (Ultimate版またはCommunity版)
  • プログラム言語: Kotlin

 

ニックネーム指向の自動テスト

ニックネームはShiratesのキーコンセプトの一つであり、テストコードを読みやすく理解しやすいものにします。画面、画面要素、アプリ、テストデータなどに対してニックネームファイルを作成してニックネームを定義し、テストコードから使用することができます。ニックネームを使用したメッセージはとてもユーザーフレンドリーなので自然言語のように読むことができます。特に画面要素については、要素を検索する際の実装の複雑さを隠蔽し、AndroidiOSのプラットフォームの差異を吸収します。結果として、1つのプラットフォームのテストコードを書いた後に、もう一つのプラットフォームとの差異をわずかな追加や変更で埋めることができます。

 

手動テストと自動テストの統合

テストエンジニアは手動テストのドキュメントと自動テストコードの両方を保守しなければならないので、テストコードをコンパクトに保つことは重要です。加えて、ドキュメントとテストコードが一つの成果物に統合されているか、一方を他方に変換できると理想的です。

Shiratesではテスト対象の機能が提供される前にテストコードを記載し、無負荷実行モード(NLRモード)でテストコードを実行し、出力されたログをSpec-Report(MS-Excelのワークシート)に変換できます。エンジニアはそれをもとにテスト内容を自然言語でレビューすることができます。機能が実装された後はそのモジュールをSpec-Reportを使って手動でテストすることができ、バグ報告や再テストを行うことができます。並行して実際に動作するテストコードを実装し、テストコードを実行し、テストコードそのものをデバッグことができます。製品のモジュールとテストコードがともに完成したら、自動テストによるリグレッションテストの環境が出来上がります。実行ログはSpec-Reportのフォーマットに変換できます。テストの結果はOK, NG, MANUAL, SKIP, EXCLUDEDなどが設定されます。MANUALは手動テストを実行する必要があることを意味します。SKIPはそのテスト項目が何らかの理由でスキップされたことを意味します。EXCLUDEDはテスト項目がそのセッションのスコープではないことを意味します。このように、テスト仕様と自動テストおよび手動テストの結果が一つのMS-Excelワークシートに統合されるので、テスト結果の集計を容易に行うことができます。

 

テンプレートコードの生成(マイグレーション向け機能)

既存の手動テストの仕様をShiratesのテストコードに移行する際には、一から記述するか、テンプレートコードジェネレーターを使用することができます。テンプレートコードジェネレーターはSpec-Reportの書式で記述されたMS-Excelワークシートを、scenario, case, condition, action, target, expectationのような関数を使用した構造的な関数呼び出しに変換し、Kotlinで記述されたJUnit 5のテストコードを出力します。他の手順や説明はmanual関数として出力されます。manual関数を実際に動作する関数に置き換えることでテストコードを実行できるようにします。

 

参照

https://github.com/ldi-github/shirates-core/blob/main/doc/markdown/quick-start.md#spec-report