เมื่อแอปเติบโตขึ้น คุณอาจพบว่าการวางคอมโพเนนต์บางอย่างของแอป ในกระบวนการอื่นที่ไม่ใช่กระบวนการหลักของแอปมีประโยชน์ หากต้องการทดสอบคอมโพเนนต์ของแอปในกระบวนการที่ไม่ใช่ค่าเริ่มต้นเหล่านี้ คุณสามารถใช้ฟังก์ชันของ Multiprocess Espresso ได้ เครื่องมือนี้พร้อมใช้งานใน Android 8.0 (API ระดับ 26) ขึ้นไป และช่วยให้คุณทดสอบการโต้ตอบ UI ของแอปได้อย่างราบรื่น ซึ่งข้ามขอบเขตของกระบวนการของแอปในขณะที่ยังคงรักษาการรับประกันการซิงค์ของ Espresso ไว้
เมื่อใช้ Multiprocess Espresso โปรดคำนึงถึงการควบคุมเวอร์ชันและขอบเขตต่อไปนี้
- แอปของคุณต้องกำหนดเป้าหมายเป็น Android 8.0 (API ระดับ 26) ขึ้นไป
- เครื่องมือนี้จะทดสอบได้เฉพาะคอมโพเนนต์ของแอปที่คุณรวมไว้ในกระบวนการภายใน แพ็กเกจของแอปเท่านั้น ทดสอบกระบวนการภายนอกไม่ได้
วิธีใช้เครื่องมือ
หากต้องการทดสอบกระบวนการภายในแอปโดยใช้ Multiprocess Espresso ให้เพิ่มการอ้างอิง
ไปยังอาร์ติแฟกต์ espresso-remote ในไฟล์ build.gradle
ของแอป
app/build.gradle
Groovy
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1' }
Kotlin
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1') }
นอกจากนี้ คุณยังต้องเพิ่มข้อมูลต่อไปนี้ลงในไฟล์ Manifest ของแอป androidTest
ด้วย
- องค์ประกอบ
<instrumentation>
ที่กำหนดกระบวนการ - องค์ประกอบ
<meta-data>
ที่ระบุว่าคุณต้องการใช้ Multiprocess Espresso
ข้อมูลโค้ดต่อไปนี้แสดงวิธีเพิ่มองค์ประกอบเหล่านี้
src/androidTest/AndroidManifest.xml
<manifest ... package="androidx.test.mytestapp.tests"> <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" /> <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner" android:targetPackage="androidx.test.mytestapp" android:targetProcesses="*"> <meta-data android:name="remoteMethod" android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" /> </instrumentation> </manifest>
ข้อมูลโค้ดก่อนหน้าจะระบุให้เฟรมเวิร์ก Android ทราบว่าคุณต้องการให้ทดสอบ
ทุกกระบวนการในแพ็กเกจของแอป หากต้องการทดสอบเฉพาะกระบวนการย่อยของแอป
คุณสามารถระบุรายการที่คั่นด้วยคอมมาภายในองค์ประกอบ
targetProcesses
แทนได้
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
ทำความเข้าใจสถาปัตยกรรมของเครื่องมือ
เมื่อทดสอบแอปและเปิดใช้กระบวนการเริ่มต้น คุณอาจโต้ตอบกับ UI เช่น กดปุ่ม ซึ่งจะเริ่มกิจกรรมในกระบวนการรอง จากนั้นระบบจะทำตามขั้นตอนต่อไปนี้เพื่อเปิดใช้การทดสอบแบบข้ามกระบวนการ โดยใช้ Espresso
- เฟรมเวิร์ก Android จะสร้างและเริ่มกระบวนการใหม่เพื่อทำตามโครงสร้างการนำทางของแอป
แต่ละ
Instrumentation
กระบวนการ มีอินสแตนซ์ใหม่ของAndroidJUnitRunner
ในขั้นตอนนี้ กระบวนการตรวจสอบ 2 รายการจะสื่อสารกันไม่ได้ - อินสแตนซ์แต่ละรายการ
AndroidJUnitRunner
จะลงทะเบียน Espresso เป็นเฟรมเวิร์กการทดสอบ - อินสแตนซ์ 2 รายการของ
AndroidJUnitRunner
จะทำการแฮนด์เชคเพื่อสร้างการเชื่อมต่อระหว่างกัน ในขณะเดียวกัน อินสแตนซ์ของAndroidJUnitRunner
แต่ละรายการจะเชื่อมต่อไคลเอ็นต์ที่ลงทะเบียนทั้งหมด เช่น Espresso กับไคลเอ็นต์ที่สอดคล้องกันในกระบวนการอื่นๆ เพื่อให้ไคลเอ็นต์เหล่านี้สร้างช่องทางการสื่อสารโดยตรงระหว่างกันได้ AndroidJUnitRunner
อินสแตนซ์แต่ละรายการจะยังคงมองหาอินสแตนซ์การวัดผลและไคลเอ็นต์เฟรมเวิร์กการทดสอบที่เพิ่มใหม่ ต่อไป พร้อมสร้างช่องทางการสื่อสารเพิ่มเติมตามความจำเป็น
รูปที่ 1 แสดงผลลัพธ์ของกระบวนการนี้

แหล่งข้อมูลเพิ่มเติม
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ได้ที่แหล่งข้อมูลต่อไปนี้
- การพัฒนาแบบทดสอบขับเคลื่อนใน Android ด้วยไลบรารีการสนับสนุนการทดสอบ Android วิดีโอเซสชันจาก Google I/O 2017 เริ่มที่ 36:41