Android Gradle প্লাগ-ইন (AGP) অন-ডিভাইস কভারেজ এজেন্টের মাধ্যমে আপনার ইনস্ট্রুমেন্টেড টেস্টের জন্য কোড কভারেজ রিপোর্ট তৈরি করতে পারে। ডিফল্ট হিসেবে, AGP আপনার অ্যাপ তৈরি করার সময় JaCoCo-এর মাধ্যমে আপনার অ্যাপের ক্লাস ইনস্ট্রুমেন্ট করে, যার অর্থ হল এটি এমন কোড যোগ করে যা আপনার টেস্ট আপনার অ্যাপের কোন অংশ রান করে তা রেকর্ড করে। অন-ডিভাইস কভারেজ এজেন্টের সাহায্যে, AGP এই অতিরিক্ত কোড ছাড়াই আপনার অ্যাপ তৈরি করে এবং আপনার টেস্ট চালানোর সময় এজেন্ট টেস্ট ডিভাইসে আপনার অ্যাপের ক্লাস ইন্সট্রুমেন্ট করে। এই পৃষ্ঠায় অন-ডিভাইস কোড কভারেজ কীভাবে চালু করতে হয় এবং রিপোর্ট তৈরি করতে হয় তা বর্ণনা করা হয়েছে।
বিল্ড-টাইম কোড কভারেজের তুলনায়, অন-ডিভাইস কোড কভারেজ নিম্নলিখিত সুবিধাগুলি অফার করে:
- আরও দ্রুত বিল্ড করা: AGP আপনার অ্যাপের ক্লাস ও সেগুলির ডিপেন্ডেন্সিতে JaCoCo ইনস্ট্রুমেন্টেশন ধাপ রান করে না, যা বিল্ড করার সময় ১০-২০% কমিয়ে দিতে পারে।
- ছোট আকারের ডিবাগ APK: AGP আপনার অ্যাপের ক্লাসে কভারেজ-ট্র্যাকিং কোড যোগ করে না, যার ফলে আপনার ডিবাগ APK ২০-২৫% ছোট হতে পারে।
- রিপোর্টে কোনও অব্যবহৃত জেনারেট করা ক্লাস নেই: আপনার টেস্টে ব্যবহার করা হয়নি এমন জেনারেট করা ক্লাস আপনার কভারেজ নম্বর কমায় না।
আসল বিল্ড টাইম এবং APK সাইজের উন্নতি আপনার প্রোজেক্টের উপর নির্ভর করে।
পূর্বশর্ত
অন-ডিভাইস কোড কভারেজ ব্যবহার করতে, আপনার প্রোজেক্ট ও টেস্ট ডিভাইস নিম্নলিখিত প্রয়োজনীয়তা পূরণ করছে কিনা তা নিশ্চিত করুন:
- AGP 9.6.0-alpha01 বা তার পরবর্তী যেকোনও ভার্সন।
- Android 9 (API লেভেল ২৮) বা তার পরবর্তী যেকোনও ভার্সনে চলে এমন ডিভাইস বা এমুলেটর।
- আপনি যে ভেরিয়েন্ট পরীক্ষা করেন তার জন্য ডিবাগ করা যায় এমন বিল্ড টাইপ, যেমন ডিফল্ট
debugবিল্ড টাইপ। এজেন্ট শুধুমাত্র ডিবাগ করা যায় এমন অ্যাপে অ্যাটাচ করতে পারে। AndroidJUnitRunnerবা কাস্টম টেস্ট রানার যা এটিকে এক্সটেন্ড করে, তার সাথে রান করা ইন্সট্রুমেন্টেড টেস্ট।
অন-ডিভাইস কোড কভারেজ চালু করুন
অন-ডিভাইস কোড কভারেজ, বিল্ড-টাইম কোড কভারেজের মতো একই enableAndroidTestCoverage প্রপার্টি ব্যবহার করে। আপনি যে ভেরিয়েন্টের জন্য কভারেজ রিপোর্ট পেতে চান, সেটির জন্য মডিউল-লেভেল বিল্ড ফাইলে
enableAndroidTestCoverage-কে true-এ সেট করুন:
Kotlin
android {
// ...
buildTypes {
debug {
// Enable coverage for instrumentation tests
enableAndroidTestCoverage = true
}
}
}
গ্ৰুভি
android {
// ...
buildTypes {
debug {
// Enable coverage for instrumentation tests
enableAndroidTestCoverage true
}
}
}
তারপর, আপনার প্রোজেক্টের gradle.properties ফাইলে অন-ডিভাইস কভারেজ এজেন্ট ও রিপোর্ট অ্যাগ্রিগেশন চালু করুন:
android.experimental.androidTest.coverage.useOnDeviceAgent=true
android.experimental.reportAggregationSupport=true
অন-ডিভাইস কোড কভারেজ ইউনিফায়েড কোড কভারেজ রিপোর্টের মতো একই রেন্ডারার ব্যবহার করে HTML রিপোর্ট তৈরি করে, তাই এটির জন্য দুটি প্রপার্টিই প্রয়োজন।
অন-ডিভাইস কোড কভারেজ রিপোর্ট জেনারেট করুন
আপনার ইনস্ট্রুমেন্টেড টেস্ট রান করতে এবং কভারেজ রিপোর্ট তৈরি করতে, কোনও ডিভাইস কানেক্ট করুন অথবা এমুলেটর চালু করুন এবং তারপরে নিম্নলিখিত টাস্ক রান করুন:
| কভারেজের স্কোপ | Command | লোকেশন রিপোর্ট করুন |
|---|---|---|
| একটি ভ্যারিয়েন্ট | ./gradlew :module-name:createVariantNameAndroidTestCoverageReport |
path-to-your-project/module-name/build/reports/coverage/androidTest/variant/connected/index.html |
বিল্ড-টাইম কোড কভারেজ থেকে পার্থক্য
একই টেস্টের জন্য অন-ডিভাইস এবং বিল্ড-টাইম কভারেজ রিপোর্টে আলাদা ফলাফল দেখা যেতে পারে। দুটি রিপোর্ট তুলনা করার সময় অথবা একটি থেকে অন্যটিতে কভারেজ থ্রেশহোল্ড সরানোর সময় নিম্নলিখিত পার্থক্যগুলি মনে রাখবেন:
| ক্ষেত্রফল | বিল্ড-টাইম কোড কভারেজ | অন-ডিভাইস কোড কভারেজ |
|---|---|---|
| ক্লাস ইন্সট্রুমেন্ট করা হলে | JaCoCo ব্যবহার করে AGP আপনার অ্যাপ তৈরি করার সময় | টেস্ট ডিভাইস, যখন আপনার টেস্ট চলে, কভারেজ এজেন্ট ব্যবহার করে |
| রিপোর্টে ক্লাস | আপনার মডিউলের সব ক্লাস | আপনার টেস্ট চলাকালীন আপনার মডিউলের নেমস্পেসে শুধুমাত্র ক্লাস লোড হয়, তাই কভারেজের শতাংশ বেশি হতে পারে |
| নির্দেশের সংখ্যা | Java বাইটকোড সংক্রান্ত নির্দেশাবলী | DEX বাইটকোড নির্দেশাবলী |
| ব্রাঞ্চের সংখ্যা | Java বাইটকোডে ব্রাঞ্চ | DEX বাইটকোডে ব্রাঞ্চ। D8 বিভিন্ন ব্রাঞ্চে শর্ত কম্পাইল করতে পারে এবং প্রতিটি টুল বিভিন্ন কম্পাইলার-জেনারেটেড ব্রাঞ্চ বাদ দেয়, তাই গণনা আলাদা হতে পারে। |
| Counters | নির্দেশাবলী, শাখা, লাইন, জটিলতা, পদ্ধতি এবং ক্লাস | নির্দেশাবলী, শাখা, লাইন, পদ্ধতি এবং ক্লাস। কমপ্লেক্সিটি কাউন্টার এখনও কাজ করে না। |
| ডিভাইসগুলি পরীক্ষা করুন | আপনার অ্যাপে কাজ করে এমন সব API লেভেল | Android 9 (API লেভেল ২৮) এবং এর পরের যেকোনও ভার্সন |
| র' কভারেজ ডেটা | .ecটি ফাইল |
coverage_metadata.pb এবং coverage_hits.pbটি ফাইল |
বিল্ড-টাইম কোড কভারেজে ফিরে যেতে, android.experimental.androidTest.coverage.useOnDeviceAgent=false সেট করুন অথবা প্রপার্টি
সরিয়ে দিন। আপনার বিল্ড ফাইল বা আপনি যে টাস্ক রান করেন তা পরিবর্তন করার প্রয়োজন নেই।
পরিচিত সমস্যা
অন-ডিভাইস কোড কভারেজে নিম্নলিখিত পরিচিত সমস্যাগুলি রয়েছে:
- যেসব ক্লাস লোড হয় না: আপনার টেস্ট চলাকালীন যেসব ক্লাস কখনও লোড হয় না সেগুলি রিপোর্টে দেখানো হয় না। বিল্ড-টাইম কোড কভারেজ রিপোর্ট সেগুলিকে ০% কভারেজ সহ তালিকাভুক্ত করে।
- মোট রিপোর্ট: আপনার প্রোজেক্ট যদি হোস্ট টেস্ট থেকে কভারেজ সংগ্রহ করে, যেমন ইউনিট টেস্ট, তাহলে
testAllSuitesএবংtestAllSuitesWithDependenciesটাস্কের তৈরি করা মোট কভারেজ রিপোর্ট, সেই টেস্ট থেকে জাভা বাইটকোড কাউন্টকে এজেন্টের DEX বাইটকোড কাউন্টের সাথে একত্রিত করে। দুটির মধ্যে পার্থক্য থাকার কারণে, মোট নির্দেশাবলী এবং ব্রাঞ্চ নম্বর, বিল্ড-টাইম কোড কভারেজ রিপোর্টের নম্বর থেকে আলাদা হতে পারে।
ইস্যু ট্র্যাকার-এর মাধ্যমে অন্য কোনও মতামত ও সমস্যা সম্পর্কে অভিযোগ জানান।