統合テストを書いている人なら、テストに便利な機能を提供する Spoon と Spoon-Gradle-Plugin について聞いたことがあるはずです。私はstanfy/spoon-gradle-pluginを使用しています。
com.squareup.spoon.Spoon.java
テストでクラスによって提供されるスクリーンショット メソッドを使用しています。コマンドでテストを実行する"./gradlew spoon"
と、各テストのログとスクリーンショットを含む xml ファイルが生成されます。これは、システム バージョンが 6.0 未満の各 Android デバイスで機能します。Marshmallow を使用してデバイスでテストを実行すると、テストの最後にコンソールは次のようになります。
2015-12-18 15:58:00 [STRL.testRunEnded] elapsedTime=408847
03:58:00 I/XmlResultReporter: XML test result file generated at /Users/F1sherKK/Dev/myapp-Android/app/build/spoon-log/normal/debugRelease/junit-reports/05f3785c3444f1bf.xml. Total tests 32, failure 1, passed 31,
2015-12-18 15:58:00 [SDR.run] About to grab screenshots and prepare output for [05f3785c3444f1bf]
2015-12-18 15:58:00 [SDR.pullDirectory] Internal path is /data/data/com.myapp.sendmoney.debug1/app_spoon-screenshots
2015-12-18 15:58:00 [SDR.pullDirectory] External path is /sdcard/app_spoon-screenshots
2015-12-18 15:58:00 [SDR.pullDirectory] Pulling files from external dir on [05f3785c3444f1bf]
2015-12-18 15:58:05 [SDR.pullDirectory] Pulling files from internal dir on [05f3785c3444f1bf]
2015-12-18 15:58:06 [SDR.pullDirectory] Done pulling app_spoon-screenshots from on [05f3785c3444f1bf]
2015-12-18 15:58:06 [SDR.pullDirectory] Internal path is /data/data/com.myapp.sendmoney.debug1/app_spoon-files
2015-12-18 15:58:06 [SDR.pullDirectory] External path is /sdcard/app_spoon-files
2015-12-18 15:58:06 [SDR.pullDirectory] Pulling files from external dir on [05f3785c3444f1bf]
2015-12-18 15:58:06 [SDR.pullDirectory] Pulling files from internal dir on [05f3785c3444f1bf]
2015-12-18 15:58:06 [SDR.pullDirectory] Done pulling app_spoon-files from on [05f3785c3444f1bf]
2015-12-18 15:58:06 [SDR.handleImages] Moving screenshots to the image folder on [05f3785c3444f1bf]
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.flowtests.NotificationCenterActivity.NotificationCenterActivityFunctionTest#assertReferralPopUpWillAppear
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.flowtests.NotificationCenterActivity.NotificationCenterActivityFunctionTest#assertReferralPopUpWillHide
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#addMockItem_newMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#clickOnBackButton_returnToNotificationCenter
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#clickOnBackButton_returnToNotificationCenter
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#clickOnBackButton_returnToNotificationCenter
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#clickOnBackButton_returnToNotificationCenter
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.CustomerServiceActivity.CustomerServiceNavigator#clickOnItem_referralType
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.General.GeneralNavigator#sendNotification_addSampleMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.General.GeneralNavigator#sendNotification_addSampleMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.General.GeneralNavigator#sendNotification_addSampleMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.General.GeneralNavigator#sendNotification_addSampleMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.General.GeneralNavigator#sendNotification_addSampleMessage
2015-12-18 15:58:06 [SDR.handleImages] Unable to find test for com.myapp.sendmoney.instrumentation.navigation.activity.InviteFriendsActivity.InviteFriendsNavigator#clickOnBackButton_returnToCustomerService
これを見たときに最初に頭に浮かぶのは... Android 6.0以降に変更された許可処理の問題です。だから私が提供すればと思った
WRITE_EXTERNAL_STORAGE
と
READ_EXTERNAL_STORAGE
私のアプリへのアクセス許可は機能するはずです。そこで、SDK のバージョンを検出するこの単純なシェル スクリプトを作成し、バージョンが 23 以上の場合は、テスト開始前にパッケージにアクセス許可を付与します。
SDK=`adb shell getprop ro.build.version.sdk | tr -d '\r'`
if (( "$SDK" >= 23 )) ; then
adb shell pm grant com.myapp.sendmoney.debug1 android.permission.WRITE_EXTERNAL_STORAGE
adb shell pm grant com.myapp.sendmoney.debug1 android.permission.READ_EXTERNAL_STORAGE
fi
./gradlew spoon
権限は付与されているようですが、テスト開始後もデバイスからスクリーンショットを取得できません。
私の2番目の考えはその時です。パーミッションに問題がなければ、取得するスクリーンショットがない可能性があります。そのため、Spoon はテストの終了後にデバイスからスクリーンショットを消去します。私はテストを開始し、それらのいくつかが終了するまで待ってから、コンソールの ctrl+C でプロセスを強制終了しました。Android Device Monitor を開くと、テストのスクリーンショットがプル待ちになっていることがわかりました。それでも起こりません。
だから私の3番目の考えはでした。パーミッションがなく、スクリーンショット機能が 6.0 デバイスで正常に動作する場合は、スプーンの問題である可能性があります。オンラインで同様のトピックを探してみましたが、私のケースに直接関係するものはありませんでした.
この問題を見つけましたが、問題は解決しませんでした。私はUIAutomator
スクリーンショットを撮るのではなく、スプーンのスクリーンショット方法を使用しています。
私が今戦っている問題があると思いますが、提案されたことを実行しましたが、役に立ちませんでした。
そして、4日前にいくつかの修正がありましたが、私はまだ問題に直面しており、私のライブラリは最近のものです:
dependencies {
androidTestCompile 'junit:junit:4.12'
androidTestCompile 'com.squareup.spoon:spoon-client:1.2.1'
androidTestCompile 'com.jraska:falcon-spoon-compat:0.3.1'
androidTestCompile 'com.android.support:support-annotations:23.1.1'
androidTestCompile 'com.android.support:recyclerview-v7:23.1.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2.1') {
exclude group: 'com.android.support', module: 'appcompat'
exclude group: 'com.android.support', module: 'support-v4'
exclude module: 'recyclerview-v7'
}
androidTestCompile "org.mockito:mockito-core:1.10.19"
androidTestCompile "com.google.dexmaker:dexmaker:1.2"
androidTestCompile "com.google.dexmaker:dexmaker-mockito:1.2"
}
と
dependencies {
classpath 'com.android.tools.build:gradle:2.0.0-alpha3'
(...)
classpath 'com.squareup.spoon:spoon-runner:1.2.1'
classpath ('com.stanfy.spoon:spoon-gradle-plugin:1.0.4-SNAPSHOT') {
exclude module: "guava"
}
classpath 'com.google.guava:guava:18.0'
}
だから...多分私は何かが欠けています。忘れていた別の許可が必要なのかもしれません。どんな提案にも感謝します。