মাল্টিপ্রসেস এসপ্রেসো

আপনার অ্যাপ বাড়ার সাথে সাথে, আপনার অ্যাপের মূল প্রক্রিয়া ছাড়া অন্য কোনো প্রক্রিয়ায় আপনার অ্যাপের কিছু উপাদান স্থাপন করা আপনার কাজে লাগতে পারে। এই নন-ডিফল্ট প্রক্রিয়াগুলিতে অ্যাপের উপাদানগুলি পরীক্ষা করতে, আপনি মাল্টিপ্রসেস এসপ্রেসোর কার্যকারিতা ব্যবহার করতে পারেন। এই টুল, Android 8.0 (API লেভেল 26) এবং উচ্চতর সংস্করণে উপলব্ধ, আপনাকে নির্বিঘ্নে আপনার অ্যাপের UI মিথস্ক্রিয়া পরীক্ষা করতে দেয় যা Espresso-এর সিঙ্ক্রোনাইজেশন গ্যারান্টি বজায় রেখে আপনার অ্যাপের প্রক্রিয়া সীমানা অতিক্রম করে।

মাল্টিপ্রসেস এসপ্রেসো ব্যবহার করার সময়, নিম্নলিখিত সংস্করণ এবং সুযোগ বিবেচনায় রাখুন:

  • আপনার অ্যাপকে অবশ্যই Android 8.0 (API লেভেল 26) বা উচ্চতর টার্গেট করতে হবে।
  • টুলটি শুধুমাত্র সেই অ্যাপের উপাদানগুলো পরীক্ষা করতে পারে যা আপনি আপনার অ্যাপের প্যাকেজের মধ্যে প্রসেসে অন্তর্ভুক্ত করেন। এটি বাহ্যিক প্রক্রিয়া পরীক্ষা করতে পারে না।

টুল ব্যবহার করুন

মাল্টিপ্রসেস এসপ্রেসো ব্যবহার করে আপনার অ্যাপের মধ্যে একটি প্রক্রিয়া পরীক্ষা করতে, আপনার অ্যাপের build.gradle ফাইলে এসপ্রেসো-রিমোট আর্টিফ্যাক্টের একটি রেফারেন্স যোগ করুন:

app/build.gradle

গ্রোভি

dependencies {
    ...
    androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1'
}

কোটলিন

dependencies {
    ...
    androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1')
}

এছাড়াও আপনাকে আপনার অ্যাপের androidTest ম্যানিফেস্টে নিম্নলিখিতগুলি যোগ করতে হবে:

  • একটি <instrumentation> উপাদান যা প্রক্রিয়াটিকে সংজ্ঞায়িত করে।
  • একটি <meta-data> উপাদান নির্দেশ করে যে আপনি মাল্টিপ্রসেস এসপ্রেসো ব্যবহার করতে চান।

নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে এই উপাদান যোগ করতে হয়:

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 ইন্টারঅ্যাকশন সঞ্চালন করতে পারেন, যেমন একটি বোতাম প্রেস, যা একটি মাধ্যমিক প্রক্রিয়ায় একটি কার্যকলাপ শুরু করে। সিস্টেম তারপরে এসপ্রেসো ব্যবহার করে ক্রস-প্রসেস টেস্টিং সক্ষম করতে নিম্নলিখিত পদক্ষেপগুলি সম্পন্ন করে:

  1. অ্যান্ড্রয়েড ফ্রেমওয়ার্ক আপনার অ্যাপের নেভিগেশনাল কাঠামো অনুসরণ করার জন্য একটি নতুন প্রক্রিয়া তৈরি করে এবং শুরু করে। প্রতিটি Instrumentation প্রক্রিয়ার মধ্যে AndroidJUnitRunner এর একটি নতুন উদাহরণ রয়েছে। এই পর্যায়ে, 2টি উপকরণ প্রক্রিয়া একে অপরের সাথে যোগাযোগ করতে পারে না।
  2. প্রতিটি AndroidJUnitRunner উদাহরণ এসপ্রেসোকে তার পরীক্ষার কাঠামো হিসাবে নিবন্ধন করে।
  3. AndroidJUnitRunner এর 2টি উদাহরণ একে অপরের মধ্যে একটি সংযোগ স্থাপন করতে হ্যান্ডশেক করে। একই সময়ে, প্রতিটি AndroidJUnitRunner উদাহরণ এসপ্রেসোর মতো সমস্ত নিবন্ধিত ক্লায়েন্টকে তাদের নিজ নিজ প্রতিপক্ষের সাথে অন্যান্য প্রক্রিয়ায় সংযুক্ত করে যাতে এই ক্লায়েন্টরা নিজেদের মধ্যে সরাসরি যোগাযোগের চ্যানেল তৈরি করতে পারে।
  4. প্রতিটি AndroidJUnitRunner ইন্সট্যান্স নতুন যোগ করা ইন্সট্রুমেন্টেশন ইন্সট্যান্স এবং টেস্টিং ফ্রেমওয়ার্ক ক্লায়েন্টের জন্য অনুসন্ধান চালিয়ে যাচ্ছে, প্রয়োজন অনুযায়ী অতিরিক্ত যোগাযোগ চ্যানেল স্থাপন করে।

চিত্র 1 এই প্রক্রিয়ার ফলাফল চিত্রিত করে:

চিত্র 1. মাল্টিপ্রসেস এসপ্রেসো ব্যবহার করে একাধিক ইন্সট্রুমেন্টেশন প্রক্রিয়ার মধ্যে যোগাযোগ স্থাপন করা

অতিরিক্ত সম্পদ

এই বিষয়ে আরও তথ্যের জন্য, নিম্নলিখিত সংস্থানগুলি দেখুন৷