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

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

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

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

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

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

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