0

私は、Androidアプリでテストインフラストラクチャをセットアップするために取り組んでいます。私はAndroidスタジオ、gradle、エスプレッソ、MonkeyRunner、エミュレータ、そして実際のデバイスを使用しています。私はgradlew connectedAndroidTestを使用してAndroidTestを実行します。AndroidTestの実行中に別のプロセスを作成する方法は?

適切なテストフィクスチャを設定するには、テストが開始される前に起動され、完了後に中断されるバックグラウンドプロセスを持つことに興味があります。 gradleなどでそれを行う方法はありますか?

具体的には、私が今やっていることは、エスプレッソテストの途中でMonkeyRunnerでスクリーンキャプチャを行うことです。テストの途中でMonkeyRunnerをスピンアップするのは時間がかかるので、デーモンとして動作させるとテストのスピードを上げることができます。 (私はすべてが少し混乱していると理解していますが、最終的には、スクリーンキャプチャの比較を行う効率的な方法を探しています。この場合、MonkeyRunnerプロセスがスピンアップしてデバイスに接続します。その後、AndroidTestプロセスがスピンアップし、MonkeyRunnerプロセスにスナップショットを取得して参照と比較させるテストを実行すると、AndroidTestは同じことを行う次のテストに進みます。

別のプロセスパターンが有効になる可能性のあるその他の事柄は、外部通信やテストフィクスチャに必要なその他の事柄です。

+0

なぜジェンキンを使ってみませんか?私はしばらくそれを使用しているし、仮想マシンを起動し、そこにテストを実行するセットアップがあります。 –

+0

それはあなたが回転しているアンドロイドエミュレータですか?私がJenkinsに切り替えると、JenkinsはVMに乗ってエミュレータを起動するのを難しくします。任意のVMは問題ではありません – TinyTheBrontosaurus

+0

私の経験上、エミュレータはどこにでもスピンアップするのは難しいです!!だから、私はいつも接続されたテストデバイスを使い、ジェンキンを夜間に走らせます。 –

答えて

0

Javaを使用してテストを作成している場合は、MonkeyRunnerを使用してスクリーンショットを撮る必要はありません。 takeScreenshot()を使用してください。

final UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 
final String filename = "/path/to/screenshot.png"; 
device.takeScreenshot(new File(filename)); 
+0

エスプレッソ・テストはデバイス上で実行されているか、ホスト・コンピュータ上で実行されているか?それが前者の場合、これがどのように機能するのか分かりません。 (これを今テストしようとしています) – TinyTheBrontosaurus

+0

"エスプレッソテストは、Android 2.3.3(APIレベル10)以降を実行するデバイスで実行できます..." –

+0

OK。エスプレッソ・テストがターゲット上で実行されている場合、答えのコードをどのように呼び出すことができますか?それはホストから保存するためにホストから呼び出される必要があるように見えます(私はまだテスト中です) – TinyTheBrontosaurus

関連する問題