[go: up one dir, main page]



[Google 東京オフィスで開発している UI テストツール Native Driver に iOS 版が加わりました。ソフトウェアエンジニアの海津 智宏からのアップデートをお読みください。-山崎]

6 月に Android 版が公開された UI テストツール「NativeDriver」に、新しく iOS 版が追加されました。iOS NativeDriver は、Android 版と同様 Google Code サイト(http://nativedriver.googlecode.com/)からダウンロードできます。

NativeDriver の大きな目標のひとつが「マルチプラットフォーム」です。今回 iOS 版がリリースされたことで、Android 向けアプリケーションと iPhone 向けアプリケーションとを同じ API でテストできるようになりました。さらに、NativeDriver は WebDriver API を利用しているため、ウェブアプリケーションも同じ API でテストできます。このことは、1 つのアプリケーションをウェブ用、Android 用、iPhone 用とさまざまなプラットフォームで展開する場合に効果を発揮します。

以下のコードは iOS NativeDriver のテストケースの例です。このテストを実行するとボタンのタップやキー入力がエミュレートされます。このテストケースは Android NativeDriver や WebDriver のテストケースとほぼ同じ形となっています。



IosNativeDriver driver = new IosNativeDriver();


// 入力言語を選択

driver.findElement(By.text("English")).click();

driver.findElement(By.text("Detect language")).click();


// 出力言語を選択

driver.findElement(By.text("French")).click();

driver.findElement(By.text("English")).click();


// 入力ボックスをタップし、入力画面を開く

driver.findElement(By.className("UITextView")).click();


// キー入力

WebElement textView =

driver.findElement(By.className("UITextView"));

textView.clear();

textView.sendKeys("こんにちは");

textView.submit();




[iPhone 向けアプリケーション(Google 翻訳)のテストの様子。
なお、CCマークを押すと、字幕が表示されます。]

また、iOS NativeDriver では WebView のサポートが追加されており、WebView 内部の DOM ツリーを NativeDriver を通してテストできます。この機能は Android 版では未対応ですが、iPhone 向けアプリケーション内での WebView の利用頻度が高いため、iOS 版で先行して実装されました。WebView 内の要素を操作する場合もネイティブ要素と同様に findElement で要素を検索し、click や sendKeys でタップ、キー入力を行います。

iOS NativeDriver のチュートリアルは Google Code サイト内の Wiki ページ(GettingStartedIOSIOSMakeAnAppTestable)で公開しています。また、メーリングリストは Android 向けと共通で nativedriver-usersnativedriver-devs です。スマートフォンアプリケーション開発者のみなさんのフィードバックをお待ちしています。



[この記事は、Google Open Source Blog の記事  “Introducing Native Driver” をソフトウェアエンジニアの海津 智宏が翻訳・加筆したものです。-山崎]

Android 向けアプリケーションの開発をもっと快適にするため、Google 東京オフィス発の新しいツールが公開されました。今回は、Android 向けアプリケーションなどを対象とした UI テストツール「NativeDriver」をご紹介します。

NativeDriver は、WebDriver API を利用して、Web アプリケーションではなくネイティブアプリケーションを自動で操作できるツールです。先日 Android バージョンが公開され、Google Code サイト (http://nativedriver.googlecode.com/) からダウンロード可能となりました。Android だけではなく、iPhone バージョンも現在開発中です。

WebDriver はブラウザを操作してウェブアプリケーションをテストするツールです。オブジェクト指向の洗練された API が特徴であり、Firefox、Chrome、Internet Explorer といったデスクトップのブラウザだけでなく、Android や iPhone 上のブラウザでも動作します。WebDriver は、Google の提供しているサービスのテストにも活用されています。

私たちは、この WebDriver の API をウェブアプリケーションだけではなくネイティブアプリケーションでも活用できないかと考えました。ネイティブアプリケーションのテストに WebDriver API を利用する理由としては、次のような点が挙げられます。
  • クリックやキー入力などのユーザー操作は、Web アプリケーションとネイティブアプリケーションで共通点が多い。
  • 同じアプリケーションをウェブ用とネイティブ用の両方で提供する場合があり、API が共通であればテストケースを流用しやすい。
  • 既に WebDriver を利用している開発者であれば、新しい API を覚える必要がない。
  • WebDriver 用に開発された既存のツールを活用できる。
以上のような考えのもと、2010 年の末から Google 東京オフィスで NativeDriver の開発が始まりました。Google 東京オフィスの 3 名のエンジニアを中心に WebDriver の開発チームや Android 向けアプリケーションの開発チームとも協力して開発を進め、約半年で Android 版を形にすることができました。

NativeDriver のテストケースは次のようになります。このテストは、Android 向けの Google Maps アプリケーションを起動し、画面上のボタンのタップやデバイス上の戻るボタン押下を再現します。

AndroidNativeDriver driver = new AndroidNativeDriverBuilder()
.withDefaultServer()
.build();
driver.startActivity("com.google.android.maps.MapsActivity");


// 検索ボックス右のプレイスボタンをクリックし、
// Places アクティビティを開く。
AndroidNativeDriver btn
= driver.findElement(By.id("btn_header_places"));
btn.click();


// Android デバイスの戻るボタンを押し、Places アクティビティを閉じる。
driver.navigate().back();

// Android デバイスを回転し、画面をランドスケープモードで表示する。
driver.rotate(ScreenOrientation.LANDSCAPE);


[Android の実機でテストを実行している様子]

このテストケースを見ると、アプリケーションの起動に startActivity メソッドを使っている点と、NativeDriver の初期化に Builder を使っている点以外は、WebDriver のテストケースとまったく同じであることがわかります。

Android NativeDriver は、アプリケーションを操作するために内部的に Instrumentation を利用します。Instrumentation は Android の標準機能ですが、課題もあります。例えば、Instrumentation では同時に 1 つのプロセスしか操作することができません。これは、Instrumentation がデバイス内部で動作することに起因します。アプリケーションが他のプロセスを操作できてしまうと悪意のあるアプリケーションに不正にデバイスを操作される危険性があるため、そのようなふるまいは禁止されているのです。そこで、Android NativeDriver は、Instrumentation だけでなく必要に応じて Android Debug Bridge (ADB) 接続も利用できるようにしました。ADB はデバイス外部からの接続であり、特定のプロセスに依存せずにイベントを送信できます。これにより、アプリケーションが他のアプリケーションに処理を委譲するような場合でも処理を継続できるようになっています。また、スクリーンショットを撮る機能でも ADB 接続を利用しています。Instrumentation と ADB 接続をシームレスに使い分けられる点も、Android NativeDriver を利用するメリットのひとつです。

Google Code サイトでは、Android NativeDriver のチュートリアルを公開しています。また、利用者向け/コントリビュータ向けのメーリングリストを用意しています。Android 向けアプリケーションの開発者の方はぜひ試してみてください。