Apa cara yang disarankan untuk menyelesaikan ini secara terprogram?
Satu-satunya pilihan yang mungkin adalah menjalankan perintah ADB adb shell pm clear packagesebelum pengujian. Masalah terbesar adalah jenis sakit kepala yang menggabungkan tes eksekusi dan perintah shell.
Namun, kami (di Mediafe) datang dengan beberapa solusi yang dapat bekerja untuk Anda pada perangkat yang tidak di-root. Yang perlu Anda lakukan adalah menambahkan anotasi. Semua sisanya dilakukan dengan menjalankan skrip bash sederhana .
Cukup tambahkan @ClearDataanotasi sebelum SETIAP tes dan tada π Anda, perintah yang jelas ADB akan dijalankan sebelum pelaksanaan tes.
Ini adalah contoh dari tes tersebut:
@Test
@ClearData
public void someTest() {
// your test
}
Idenya adalah sebagai berikut
- Baca semua tes dengan menggunakan
adb shell am instrument -e log true
- Bangun rencana eksekusi dengan memilah output dari (1)
- Jalankan rencana eksekusi baris demi baris
Menggunakan ide yang sama ini adalah semua opsi yang dapat Anda dukung dengan mudah:
- Hapus data
- Hapus bilah notifikasi
- Parameterisasi
- Saring dan jalankan dengan tag
Gunakan hanya anotasi. Seperti ini:
@Test
@ClearData
@Tags(tags = {"sanity", "medium"})
@Parameterized.Repeat(count = 3)
public void myTest() throws Exception {
String param = params[index];
// ...
}
Bonus! π Untuk setiap tes yang gagal:
- Kumpulkan Logcat + stacktrace
- Rekam video (mp4)
- Dump DB (sqlite)
- Preferensi bersama default sampah (xml)
- Kumpulkan file dumpsys seperti: baterai, netstats, dan lainnya.
Secara umum, mudah untuk menambahkan lebih banyak opsi, karena tes dijalankan satu per satu dari skrip bash daripada dari tugas gradle.
π Posting blog lengkap : https://medium.com/medisafe-tech-blog/running-android-ui-tests-53e85e5c8da8
π Kode sumber dengan contoh : https://github.com/medisafe/run-android-tests
Semoga ini menjawab 6 tahun pertanyaan;)