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

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

ดึงดูด

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:

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

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

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

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

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