মাল্টি-ডিভাইস টেস্টিং

VTS একাধিক Android ডিভাইসের মধ্যে মিথস্ক্রিয়া প্রয়োজন এমন পরীক্ষাগুলিকে সমর্থন করে।

স্থাপত্য

VTS ট্রেডফেড ফ্রেমওয়ার্ক ব্যবহার করে মডিউল পরীক্ষা করার জন্য ডিভাইস সিরিয়াল পেতে এবং পাস করতে।

চিত্র 1. VTS পাসিং ডিভাইস সিরিয়াল.

ডিভাইসের প্রয়োজনীয়তা, যেমন ডিভাইসের সংখ্যা এবং ডিভাইসের প্রকার, টেস্ট প্ল্যান কনফিগারেশনে নির্দিষ্ট করা আছে। উদাহরণস্বরূপ, আপনি একটি পরীক্ষা পরিকল্পনা নির্দিষ্ট করতে পারেন যার জন্য সেলফিশ বিল্ড টার্গেট সহ দুটি অ্যান্ড্রয়েড ডিভাইস প্রয়োজন৷

ডিভাইস বরাদ্দ

পরীক্ষার পরিকাঠামো (সাধারণত পরীক্ষার সময়সূচী) উপলব্ধ ডিভাইসগুলি বরাদ্দ করে যা VTS ফ্রেমওয়ার্কের জন্য পরীক্ষা পরিকল্পনা কনফিগারেশনে নির্দিষ্ট প্রয়োজনীয়তাগুলি পূরণ করে। পরীক্ষা মডিউল ব্যবহার না করলেও বরাদ্দকৃত ডিভাইসগুলি পরীক্ষার পরিকল্পনার জন্য সংরক্ষিত থাকে। তারপর VTS এজেন্ট বাইনারিগুলিকে ঠেলে দেওয়া হয় এবং সমস্ত বরাদ্দকৃত ডিভাইসে চালানো হয় (যদি না বিশেষভাবে না চালানোর নির্দেশ দেওয়া হয়)। এটি নিশ্চিত করে যে শেল কমান্ড এবং HAL RPC-এর জন্য TCP সংযোগ একটি পরীক্ষা স্ক্রিপ্টে সমস্ত ডিভাইসের জন্য উপলব্ধ।

পরীক্ষার প্রস্তুতি

ফ্রেমওয়ার্কটি সমস্ত ডিভাইসের জন্য পরীক্ষা প্রস্তুতকারী চালায় যার জন্য এটি সিরিয়াল নম্বর পেয়েছে। টার্গেট প্রস্তুতকারী একক বা মাল্টি-ডিভাইস হতে পারে:

  • একক-ডিভাইস টার্গেট প্রস্তুতকারী (উদাহরণ VtsDeviceInfoCollector এ):
    • প্রয়োজনীয় ডিভাইস তালিকার সাথে শুধুমাত্র পরীক্ষা পরিকল্পনা কনফিগারেশনে নির্দিষ্ট করা যেতে পারে (ভবিষ্যত সংস্করণ মডিউল স্তরের কনফিগারেশনের অনুমতি দেবে)।
    • শুধুমাত্র একটি ডিভাইস সিরিয়াল গ্রহণ.
    • একটি নির্দিষ্ট ডিভাইসের বিরুদ্ধে প্রস্তুতি এবং পরিষ্কারের কাজগুলি চালান।
  • মাল্টি-ডিভাইস টার্গেট প্রস্তুতকারী (উদাহরণ VtsPythonVirtualenvPreparer এ):
    • পরীক্ষা পরিকল্পনা কনফিগারেশন বা পরীক্ষা মডিউল কনফিগারেশনে নির্দিষ্ট করা যেতে পারে
    • সমস্ত ডিভাইস সিরিয়াল গ্রহণ করুন
    • প্রতিটি ডিভাইস বা সমস্ত ডিভাইসের জন্য প্রস্তুতি এবং পরিষ্কার করার কাজগুলি চালান।

পরীক্ষা মডিউল

পরীক্ষার প্রস্তুতিকারীরা হোস্ট/ডিভাইস সেট আপ করা শেষ করার পরে টেস্ট মডিউলগুলি ডিভাইসের একটি তালিকা পায়। প্রতিটি মাল্টি-ডিভাইস টেস্ট মডিউলের জন্য একটি হোস্ট-সাইড পাইথন টেস্ট মডিউল চলে। বরাদ্দ করা Android ডিভাইসগুলি AndroidDevice অবজেক্টের তালিকা হিসাবে পাইথন পরীক্ষা মডিউল থেকে অ্যাক্সেসযোগ্য:

devices = self.android_devices
device1 = devices[0]
device1_serial = device1.serial

সমস্ত বরাদ্দকৃত ডিভাইস পরীক্ষার পরিকল্পনার জন্য সংরক্ষিত, যদিও পরিকল্পনার একটি পরীক্ষা মডিউল শুধুমাত্র একটি ডিভাইস ব্যবহার করছে।

পরীক্ষার সময় ডিভাইস যোগাযোগ

কার্যকর মাল্টি-অ্যান্ড্রয়েড পরীক্ষায় বরাদ্দকৃত ডিভাইসের মধ্যে যোগাযোগ জড়িত। এই জাতীয় পরীক্ষাগুলি বিকাশ করার সময়, আপনাকে অবশ্যই নির্ধারণ করতে হবে যে কীভাবে বরাদ্দকৃত ডিভাইসগুলির মধ্যে যোগাযোগ স্থাপন করা যায়। নিম্নলিখিত বিভাগগুলি তিনটি যোগাযোগের উদাহরণ প্রদান করে (তবে, টেস্ট ডেভেলপাররা অন্যান্য মডেল ডিজাইন করতে বিনামূল্যে)।

টাইপ 1: হোস্ট-সাইড HAL পরীক্ষা

হোস্ট-সাইড HAL পরীক্ষাগুলি VTS HAL ড্রাইভারগুলি ব্যবহার করতে পারে যা ডিফল্টরূপে ডিভাইসগুলিতে পুশ করা হয়:

চিত্র 2. হোস্ট-সাইড HAL পরীক্ষা।

এই পরিস্থিতিতে:

  • টেস্ট লজিক হোস্টে কার্যকর করে।
  • হোস্ট-সাইড টেস্ট স্ক্রিপ্ট প্রতিটি ডিভাইসে ড্রাইভারকে RPC কলগুলি ইস্যু করে।
  • হোস্ট সাইড ডিভাইস ইন্টারঅ্যাকশন সমন্বয় করে।

টাইপ 2: হোস্ট-সাইড এজেন্ট-ভিত্তিক পরীক্ষা

ডিভাইসে VTS এজেন্ট ব্যবহার করার পরিবর্তে, একটি হোস্ট-সাইড পরীক্ষা প্রতিটি ডিভাইসে তার নিজস্ব এজেন্ট (অ্যাপ বা বাইনারি) পুশ করতে পারে:

চিত্র 3. হোস্ট-সাইড, এজেন্ট-ভিত্তিক পরীক্ষা।

এই পরিস্থিতিতে:

  • টেস্ট লজিক হোস্টে কার্যকর করে।
  • এজেন্ট অ্যাপ (বা বাইনারি) প্রতিটি ডিভাইসে ইনস্টল করে।
  • হোস্ট-সাইড টেস্ট স্ক্রিপ্ট প্রতিটি ডিভাইসে অ্যাপগুলিতে কমান্ড ইস্যু করে।
  • হোস্ট সাইড ডিভাইস ইন্টারঅ্যাকশন সমন্বয় করে।

উদাহরণস্বরূপ, বর্তমান VTS রেপোতে নেক্সট বিলিয়ন ব্যবহারকারীর পরীক্ষাগুলি হল হোস্ট-সাইড, অ্যাপ-ভিত্তিক, মাল্টি-ডিভাইস পরীক্ষা।

টাইপ 3: টার্গেট-সাইড HIDL পরীক্ষা

টার্গেট-সাইড, মাল্টি-ডিভাইস HIDL পরীক্ষাগুলি ডিভাইস-সাইড টেস্ট বাইনারিগুলিতে সমস্ত পরীক্ষার যুক্তি রাখে, যার জন্য পরীক্ষা চালানোর সময় ডিভাইসগুলিকে সিঙ্ক্রোনাইজ করার জন্য পরীক্ষার প্রয়োজন হয়:

চিত্র 4. লক্ষ্য-ভিত্তিক HIDL পরীক্ষা।

এই পরিস্থিতিতে:

  • টেস্ট লজিক ডিভাইসে সঞ্চালিত হয়।
  • হোস্ট-সাইড ফ্রেমওয়ার্ক প্রাথমিক ডিভাইস সনাক্তকরণ প্রদান করে।
  • টার্গেট-সাইড টেস্ট বাইনারি সিঙ্ক্রোনাইজেশন প্রয়োজন:
    • সমস্ত ডিভাইসের জন্য একই পরীক্ষা বাইনারি।
    • প্রতিটি ভূমিকার জন্য বিভিন্ন পরীক্ষা বাইনারি।

উদাহরণ: মাল্টি-ডিভাইস পরীক্ষার পরিকল্পনা

এই উদাহরণটি দুটি ডিভাইসের জন্য কনফিগারেশন নির্দিষ্ট করে:

  • ডিভাইস 1-এ একটি বিল্ড প্রদানকারী এবং VtsDeviceInfoCollector লক্ষ্য প্রস্তুতকারী অন্তর্ভুক্ত রয়েছে।
  • ডিভাইস 2-এ একটি অতিরিক্ত FilePusher প্রস্তুতকারী রয়েছে যা হোস্ট-চালিত সম্পর্কিত ফাইলগুলির একটি গ্রুপকে ডিভাইসে পুশ করে।
<configuration description="VTS Codelab Plan">
  ...
<device name="device1">
<build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
<target_preparer class="com.android.tradefed.targetprep.VtsDeviceInfoCollector" />
</device>
<device name="device2" >
<build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
<target_preparer class="com.android.tradefed.targetprep.VtsDeviceInfoCollector" />
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
<option name="push-group" value="HostDrivenTest.push" />
</target_preparer>
</device>
<option name="compatibility:include-filter" value="VtsCodelabHelloWorldMultiDeviceTest" />
</configuration>

উদাহরণ: হোস্ট-সাইড পাইথন টেস্ট স্ক্রিপ্ট

পরীক্ষার প্রস্তুতির বিষয়ে বিস্তারিত এবং উদাহরণের জন্য, পরীক্ষা প্রস্তুতকারী দেখুন। একটি সম্পূর্ণ হোস্ট-সাইড মাল্টি-ডিভাইস উদাহরণের জন্য, hello_world_multi codelab দেখুন।

def setUpClass(self):
logging.info('number of device: %s', self.android_devices)
asserts.assertEqual(len(self.android_devices), 2, 'number of device is wrong.')
self.dut1 = self.android_devices[0]
self.dut2 = self.android_devices[1]
self.shell1 = self.dut1.shell
self.shell2 = self.dut2.shell

def testSerialNotEqual(self):
'''Checks serial number from two device not being equal.'''
command = 'getprop | grep ro.serial'
res1 = self.shell1.Execute(command)
res2 = self.shell2.Execute(command)

def getSerialFromShellOutput(output):
'''Get serial from getprop query'''
return output[const.STDOUT][0].strip().split(' ')[-1][1:-1]
serial1 = getSerialFromShellOutput(res1)
serial2 = getSerialFromShellOutput(res2)

logging.info('Serial number of device 1 shell output: %s', serial1)
logging.info('Serial number of device 2 shell output: %s', serial2)
asserts.assertNotEqual(serial1, serial2, 'serials from two devices should not be the same')
asserts.assertEqual(serial1, self.dut1.serial, 'serial got from device system property is different from allocated serial')
asserts.assertEqual(serial2, self.dut2.serial, 'serial got from device system property is different from allocated serial')