読者です 読者をやめる 読者になる 読者になる

ささいなことですが。

Windowsアプリテスト自動化ライブラリFriendly開発者の日記です。

Friendly - Windowsアプリのシステムテスト自動化

はじめに

これはソフトウェアテストあどべんとかれんだー2014 - connpassの12/12の記事です。
12/9は@PoohSunnyさんのtesting - 地味だけどGebをgroovyにしている5Tips #SWTestAdvent - Qiitaでした。

Friendlyの紹介記事です。
自分のライブラリの宣伝ですみません。よろしくお願いします!

Windowsアプリ操作用ライブラリです。

FriendlyはWindowsアプリを.Netのプログラムから操作するためのライブラリです。
Win32、WinForms、WPFに対応しています。
(ストアアプリ用は特殊でまだα版です)

Win32もいけますが、.Netの方が得意ですね。
僕自身もWindowsアプリのシステムテスト自動化をやっているのですが、自分が「安定動作する」システムテスト「簡単に」作るために作成しました。
通常の操作ライブラリと同じようなことももちろんできます。
でも、Friendlyの特徴は「プロセスの壁を突破する」ことなのです。

無料です。

こんな良いもの自分だけで使うのはもったいない。
ってことでOSSで公開しております。
おかげさまで、Friendlyをさらに便利に使うための上位ライブラリも私以外からもリリースしてもらっております。
Codeer-Software · GitHub
ShinichiIshizuka/Ong.Friendly.FormsStandardControls · GitHub
Roommetro/Friendly.WPFStandardControls · GitHub
vshtc/Friendly.PinInterface · GitHub

dllはNuGetで取得できます。
NuGet Gallery | Packages matching codeer

評判は?

まだ、有名ではないのですが、関西を中心にいくつかの企業様で続々採用されています。(中には一部上場企業様もあります)
じわじわ広がっている感じですね。
あ、それからGlobalSummitのMVPShowcaseで紹介したところ二位になりました!
MVP Showcase Winners! - The Microsoft MVP Award Program Blog - Site Home - MSDN Blogs

アメリカでも大好評でした。
詳細な様子は、ぽざうねさんのこのブログをご覧ください。
「越境」するライブラリCodeer.Friendlyを紹介しに「越境」してきた話 #devlove #DevKan - 亀岡的プログラマ日記

品質大丈夫?

テストを実行するためのライブラリなので当然の疑問ですよね。
ソフトウェアテストアドベントカレンダーでこれに答えるのは勇気がいります。
でも、あえて言います。
「安心してご利用いただけるレベルです。」
実はそんなに新しいものでもなく2年前から公開していて、その間に様々な現場で鍛え上げられております。色々ご意見もいただき、改善してきました。
ないとは思いますが、万が一不具合が見つかった場合には、フィードバックいただければソッコーで対応させていただきます。

どんな操作方法?

全く別のプロセスのアプリなのに、そこで動作しているアプリの内部APIを呼び出すことができるのです。
これは、Windowsアプリでは通常ありえない操作方法です。
海外の方やMS本社の技術者にデモっても
「Crazy!」「Amazing!」
「Are you Russian hacker?」「No, No, I'm Japanese Ninjya.」
みたいな感じでしたw。
その時披露したデモです。

それと、使い方動画。
(こちらは、フルスクリーン、高画質がお勧めです。)

つまり、そのアプリを作るときに使ったAPIや、自分達が作ったAPIが、そのままシステムテスト実装時に使えるのです。
まるで対象プロセスを自分のプロセスのプログラムのように操作できます。
これが、今までにないテスタビリティーを提供するのです。
f:id:ishikawa-tatsuya:20141211114127p:plain

あ、でも普通のコードでもコントロール操作するとき、手間かかる部分ありますよね。
だから、一般的に使うGUIコントロールの操作はラップしておきました。
これ使うと、効率よくテスト実装できますよー。
NuGet Gallery | Friendly.Windows.NativeStandardControls 2.1.7
NuGet Gallery | Friendly.FormsStandardControls 2.2.2
NuGet Gallery | Friendly.WPFStandardControls 1.1.2
f:id:ishikawa-tatsuya:20141211121138p:plain

もちろん、これで足りない部分は簡単に拡張できるのです。
そのコントロールのAPI全部使えますからね。
f:id:ishikawa-tatsuya:20141211121150p:plain

操作コードの例も書いておきます。こんなに簡単なんです。

[TestMethod]
public void 別プロセスのAPIを呼べるんです()
{
    var process = Process.GetProcessesByName("Target.vshost")[0];
            
    //アタッチするだけ
    //後は好きなように内部APIを呼び出せる
    var app = new WindowsAppFriend(process);

    //static操作
    dynamic form = app.Type(typeof(Application)).OpenForms[0];

    //インスタンス操作
    form.Activate();

    //ユーザ定義のメソッドももちろんOK
    form.MyFunc(3);
}

明日は

明日は@Kazu_cocoaさんのモバイルアプリ開発に関する記事です。
よろしく願いします!
ありがとうございました!