เอสเปรสโซแบบมัลติโปรเซส

เมื่อแอปเติบโตขึ้น คุณอาจพบว่าการวางองค์ประกอบบางอย่างของแอปอาจเป็นประโยชน์ ในกระบวนการอื่นที่ไม่ใช่กระบวนการหลักของแอป ในการทดสอบคอมโพเนนต์ของแอป กระบวนการที่ไม่ใช่ค่าเริ่มต้น คุณสามารถใช้ฟังก์ชันของ 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

ดึงดูดKotlin
dependencies {
   
...
    androidTestImplementation
'androidx.test.espresso:espresso-remote:3.6.1'
}
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:

  1. เฟรมเวิร์ก Android สร้างและเริ่มต้นกระบวนการใหม่เพื่อให้เป็นไปตาม โครงสร้างการนำทาง แต่ละกระบวนการของ Instrumentation จะมีอินสแตนซ์ใหม่ของ AndroidJUnitRunner ในขั้นตอนนี้ กระบวนการใช้เครื่องมือ 2 อย่างนี้ไม่สามารถสื่อสารกับแต่ละกระบวนการ อื่นๆ
  2. ชิ้น AndroidJUnitRunner จะมีการลงทะเบียน Espresso เป็นเฟรมเวิร์กการทดสอบ
  3. 2 อินสแตนซ์ของ AndroidJUnitRunner ทำการแฮนด์เชคเพื่อสร้างความสัมพันธ์ระหว่างกัน ในเวลาเดียวกัน แต่ละรายการ AndroidJUnitRunner จะเชื่อมโยงลูกค้าที่ลงทะเบียนทั้งหมด เช่น Espresso กับ สำเนาใหม่ในกระบวนการอื่นๆ เพื่อให้ลูกค้าเหล่านี้สามารถ ระหว่างกัน
  4. AndroidJUnitRunner แต่ละรายการ จะยังคงมองหาอินสแตนซ์การใช้เครื่องมือและการทดสอบที่เพิ่มใหม่ต่อไป วางโครงสร้างช่องทางการสื่อสารเพิ่มเติมตามความจำเป็น

รูปที่ 1 แสดงผลลัพธ์ของกระบวนการนี้

วันที่
รูปที่ 1 การสร้างการสื่อสารระหว่างหลายๆ กระบวนการวัดผลโดยใช้ Multiprocess Espresso

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับหัวข้อนี้ได้จากแหล่งข้อมูลต่อไปนี้