Trade Federation-এ হোস্ট-পরিচালিত টেস্ট লেখা

হোস্টের মাধ্যমে পরিচালিত JUnit4-স্টাইলের ডিভাইস টেস্ট কীভাবে লিখতে হয় তা এই পৃষ্ঠায় বর্ণনা করা হয়েছে। এর অর্থ হল, হার্নেসের হোস্ট-সাইড ডিভাইসের বিরুদ্ধে অ্যাকশন ট্রিগার করতে চলেছে।

মনে রাখবেন, আমরা "হোস্ট-সাইড" টেস্ট এবং "হোস্ট-চালিত" টেস্টকে সামান্য আলাদা বলে মনে করি:

  • হোস্ট-চালিত পরীক্ষা: হোস্টের উপর একটি পরীক্ষা চলছে যা এক বা একাধিক ডিভাইসের সাথে ইন্টার‍্যাক্ট করে। পরীক্ষা করা সিস্টেম (SUT) হোস্টেই নেই, তবে হোস্ট থেকে পরীক্ষা করা হচ্ছে।
  • হোস্ট-সাইড টেস্ট: এটি এমন একটি টেস্ট যা শুধুমাত্র হোস্টের উপর রান করে এবং হোস্টের উপরই কিছু টেস্ট করে, যেমন ইউনিট টেস্ট।

ইন্সট্রুমেন্টেশন টেস্টের পরিবর্তে হোস্ট-চালিত টেস্ট কেন তৈরি করবেন?

কিছু টেস্টের জন্য আপনাকে ডিভাইসের সামগ্রিক অবস্থা পরিবর্তন করতে হতে পারে, যেমন রিবুট কমান্ড ইস্যু করা। ইনস্ট্রুমেন্টেশন টেস্ট কেসে, রিবুট করলে ইনস্ট্রুমেন্টেশন বন্ধ হয়ে যাবে, টেস্ট চালিয়ে যাওয়া যাবে না এবং কোনও ফলাফল উপলভ্য থাকবে না।

হোস্ট-চালিত টেস্টের ক্ষেত্রে অতিরিক্ত সেট-আপের ধাপও থাকতে পারে, যার জন্য এক্সটার্নাল ডিভাইসের সাথে ইন্টার‍্যাক্ট করতে হয়। এইসব ডিভাইসের উপর টেস্ট নির্ভর করে।

হোস্ট-পরিচালিত টেস্ট এইসব ব্যবহারের ক্ষেত্রগুলি ম্যানেজ করতে পারে এবং আরও বেশি পরিস্থিতি সহ ডিভাইসের উন্নত টেস্টিংয়ের অনুমতি দিতে পারে। আপনি সেই পরিস্থিতিতে থাকলে, হোস্ট-পরিচালিত টেস্ট লেখা সবচেয়ে যুক্তিযুক্ত।

TF-এ হোস্ট-ড্রিভেন টেস্ট কীভাবে লেখা হয়?

এখানে একটি স্যাম্পেল দেওয়া হল:

@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
    @Before
    public void setUp() throws Exception {
       // Some setup
    }

    @Test
    public void testCheckWeHaveDevice() throws Exception {
        Assert.assertNotNull(getDevice());
    }
}

ট্রেড ফেডারেশনে হোস্ট-পরিচালিত পরীক্ষা DeviceJUnit4ClassRunner JUnit4 টেস্ট রানার দ্বারা পরিচালিত হয়। টেস্ট ক্লাসের সামগ্রিক স্ট্রাকচার সাধারণ JUnit4 টেস্টের মতোই:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume, Assert

BaseHostJunit4Test এক্সটেন্ড করা হল, এই ধরনের দরকারী টেস্টিং ইউটিলিটি API ইনহেরিট করার একটি উপায়:

  • installPackage: টার্গেট ডিভাইসে APK ইনস্টল করার অনুমতি দেয়।
  • installPackageAsUser: টার্গেট ডিভাইসে ব্যবহারকারী হিসেবে APK ইনস্টল করার অনুমতি দেয়।
  • uninstallPackage: কোনও APK আনইনস্টল করার অনুমতি দেয়।
  • isPackageInstalled: কোনও প্যাকেজ ইনস্টল করা আছে কিনা তা চেক করুন।
  • hasDeviceFeature: ডিভাইসে কোনও ফিচার কাজ করে কিনা তা চেক করুন। (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): সম্ভাব্য সব বিকল্প ম্যানেজ করতে, DeviceTestRunOptions ব্যবহার করে টার্গেট ডিভাইসের বিরুদ্ধে একটি ইন্সট্রুমেন্টেশন টেস্ট চালান।

এছাড়াও, Tradefed ডিভাইস অবজেক্টে অ্যাক্সেস দিন:

  • getDevice(): ডিভাইস ম্যানিপুলেট করার জন্য TF ডিভাইস অবজেক্ট রিটার্ন করে।
  • getBuild(): বিল্ড সম্পর্কে তথ্য পেতে বিল্ড তথ্য TF অবজেক্ট রিটার্ন করে।
  • getAbi(): যে ABI-এর বিরুদ্ধে টেস্ট রান করা হচ্ছে সেটি রিটার্ন করে।

Tradefed সহায়তা: ক্লাস-প্রতি ডিভাইস প্রস্তুতি ও ক্লিন-আপ

JUnit4 @BeforeClass এবং @AfterClass শুধুমাত্র স্ট্যাটিক পদ্ধতির ক্ষেত্রে প্রযোজ্য, যা #getDevice() হ্যান্ডলার ব্যবহার করে কিছু ডিভাইস-নির্দিষ্ট, একবার, প্রতি-ক্লাস সেট-আপ বা ক্লিন-আপ করা অসম্ভব করে তোলে। এই সমস্যার সমাধান করতে, Tradefed অ্যানোটেশন ব্যবহার করুন।

  • @BeforeClassWithInfo: @BeforeClass অ্যানোটেশনের আগে রান করে
  • @AfterClassWithInfo: @AfterClass অ্যানোটেশনের পরে রান করে
   @BeforeClassWithInfo
   public static void beforeClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

   @AfterClassWithInfo
   public static void afterClassWithDevice(TestInformation testInfo) {
       assertNotNull(testInfo.getDevice());
       testInfo.properties().put("mytest:test-prop", "test");
   }

TestInformation আপনাকে ডিভাইস ব্যবহার করতে এবং স্ট্যাটিক বা নন-স্ট্যাটিক স্কোপে ব্যবহার করা যেতে পারে এমন প্রপার্টি স্টোর করতে দেয়। BaseHostJUnit4Test, #getTestInformation()-এর মাধ্যমে নন-স্ট্যাটিক স্কোপে TestInformation পাওয়ার সুবিধা দেয়।

আপনি BaseHostJUnit4Test এক্সটেন্ড না করলে, TestInformation অবজেক্ট পেতে, আপনি ITestInformationReceiver প্রয়োগ করতে পারেন।

Tradefed-এ হোস্ট-চালিত টেস্ট কীভাবে কনফিগার করতে হয়?

Tradefed XML কনফিগারেশন ফাইলে, হোস্ট-চালিত টেস্টগুলি HostTest রানার মাধ্যমে চালানো হয়।

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>