টেস্ট টেমপ্লেট

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

চিত্র 1. টেস্ট টেমপ্লেট আর্কিটেকচার।

বিকাশকারীরা এই টেমপ্লেটগুলি ব্যবহার করতে পারে এই ধরনের পরীক্ষাগুলিকে একীভূত করার প্রচেষ্টাকে কমিয়ে দিতে৷ এই বিভাগে পরীক্ষা টেমপ্লেটগুলি কনফিগার করা এবং ব্যবহার করা (ভিটিএস টেস্টকেস/টেমপ্লেট ডিরেক্টরিতে অবস্থিত) কভার করে এবং সাধারণত ব্যবহৃত টেমপ্লেটগুলির উদাহরণ প্রদান করে।

বাইনারি টেস্ট টেমপ্লেট

VTS-এ টার্গেট ডিভাইসে চালানো পরীক্ষাগুলিকে একীভূত করতে BinaryTest টেমপ্লেট ব্যবহার করুন। লক্ষ্য-পার্শ্ব পরীক্ষা অন্তর্ভুক্ত:

  • C++ ভিত্তিক পরীক্ষাগুলি সংকলিত এবং ডিভাইসে পুশ করা হয়েছে
  • টার্গেট-সাইড পাইথন পরীক্ষাগুলি বাইনারি হিসাবে সংকলিত
  • ডিভাইসে এক্সিকিউটেবল শেল স্ক্রিপ্ট

এই পরীক্ষাগুলি BinaryTest টেমপ্লেট সহ বা ছাড়া VTS-এ একত্রিত করা যেতে পারে।

BinaryTest টেমপ্লেটের সাথে টার্গেট-সাইড টেস্ট একীভূত করুন

BinaryTest টেমপ্লেটটি ডিজাইন করা হয়েছে যাতে ডেভেলপারদের সহজে লক্ষ্য-সাইড পরীক্ষাগুলিকে একীভূত করতে সাহায্য করে৷ বেশিরভাগ ক্ষেত্রে, আপনি AndroidTest.xml এ কনফিগারেশনের কয়েকটি সাধারণ লাইন যোগ করতে পারেন। VtsDeviceTreeEarlyMountTest থেকে কনফিগারেশনের উদাহরণ:

<configuration description="Config for VTS VtsDeviceTreeEarlyMountTest.">
  ...
<test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
<option name="test-module-name" value="VtsDeviceTreeEarlyMountTest"/>
<option name="binary-test-source" value="_32bit::DATA/nativetest/dt_early_mount_test/dt_early_mount_test" />
<option name="binary-test-source" value="_64bit::DATA/nativetest64/dt_early_mount_test/dt_early_mount_test" />
<option name="test-timeout" value="5m"/>
</test>
</configuration>

এই কনফিগারেশনে:

  • binary-test-source এবং binary-test-type টেমপ্লেট-নির্দিষ্ট।
  • পরীক্ষার বাইনারি উত্সের আপেক্ষিক হোস্ট পাথ নির্দিষ্ট করা টেমপ্লেটটিকে প্রস্তুতি, ফাইল পুশিং, পরীক্ষা সম্পাদন, ফলাফল পার্সিং এবং পরিষ্কার করতে সক্ষম করে।
  • টেমপ্লেটটি ওভাররাইড করার জন্য সাবক্লাসের জন্য টেস্ট কেস তৈরি-সম্পর্কিত পদ্ধতি রয়েছে।
  • টেমপ্লেটটি প্রতি টেস্ট বাইনারি মডিউলে একটি টেস্ট কেস ধরে নেয় এবং বাইনারি সোর্স ফাইলের নামটি ডিফল্টরূপে টেস্ট কেস নাম হিসাবে ব্যবহৃত হয়।

কনফিগারেশন বিকল্প

বাইনারিটেস্ট টেমপ্লেট নিম্নলিখিত কনফিগারেশন বিকল্পগুলিকে সমর্থন করে:

বিকল্পের নাম মান প্রকার বর্ণনা
বাইনারি-পরীক্ষা-উৎস স্ট্রিং হোস্টে vts টেস্ট-কেস ডিরেক্টরির সাথে সম্পর্কিত বাইনারি পরীক্ষার উত্স পাথ।
উদাহরণ: DATA/nativetest/test
বাইনারি-টেস্ট-ওয়ার্কিং-ডিরেক্টরি স্ট্রিং ওয়ার্কিং ডিরেক্টরি (ডিভাইস-সাইড পাথ)।
উদাহরণ: /data/local/tmp/testing/
বাইনারি-টেস্ট-এনভিপি স্ট্রিং বাইনারি জন্য পরিবেশ ভেরিয়েবল.
উদাহরণ: PATH=/new:$PATH
বাইনারি-টেস্ট-আর্গস স্ট্রিং পরীক্ষা যুক্তি বা পতাকা.
উদাহরণ: --gtest_filter=test1
বাইনারি-টেস্ট-এলডি-লাইব্রেরি-পাথ স্ট্রিং LD_LIBRARY_PATH পরিবেশ পরিবর্তনশীল।
উদাহরণ: /data/local/tmp/lib
বাইনারি-টেস্ট-অক্ষম-ফ্রেমওয়ার্ক বুলিয়ান পরীক্ষার আগে অ্যান্ড্রয়েড ফ্রেমওয়ার্ক বন্ধ করতে adb stop চালান। উদাহরণ: true
বাইনারি-টেস্ট-স্টপ-নেটিভ-সার্ভার বুলিয়ান পরীক্ষার সময় সঠিকভাবে কনফিগার করা সমস্ত নেটিভ সার্ভার বন্ধ করুন। উদাহরণ: true
বাইনারি-পরীক্ষা-টাইপ স্ট্রিং টেমপ্লেট টাইপ। অন্যান্য টেমপ্লেটের ধরন এই টেমপ্লেট থেকে প্রসারিত হয়, কিন্তু আপনাকে এই টেমপ্লেটের জন্য এই বিকল্পটি নির্দিষ্ট করতে হবে না কারণ আপনি ইতিমধ্যেই binary-test-source নির্দিষ্ট করেছেন।

মান টাইপ strings সহ বিকল্পগুলির জন্য, আপনি কনফিগারেশনের বিকল্পগুলি পুনরাবৃত্তি করে একাধিক মান যোগ করতে পারেন। উদাহরণস্বরূপ, binary-test-source দুইবার সেট করুন (যেমন VtsDeviceTreeEarlyMountTest উদাহরণে দেখানো হয়েছে)।

টেস্ট ট্যাগ

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

দুটি dt_early_mount_test উত্স সহ VtsDeviceTreeEarlyMountTest উদাহরণে দেখানো হয়েছে, পরীক্ষার ট্যাগগুলি হল _32bit:: এবং _64bit:: binary-test-source উপসর্গ। 32bit বা 64bit দিয়ে শেষ হওয়া ট্যাগগুলি স্বয়ংক্রিয়ভাবে পরীক্ষাগুলিকে একটি ABI বিটনেসের জন্য উপলব্ধ হিসাবে চিহ্নিত করে; অর্থাৎ _32bit ট্যাগ সহ পরীক্ষাগুলি 64-বিট ABI-তে চালানো হয় না। একটি ট্যাগ নির্দিষ্ট না করা একটি খালি স্ট্রিং সহ একটি ট্যাগ ব্যবহার করার সমান।

একই ট্যাগ সহ বিকল্পগুলি গোষ্ঠীবদ্ধ এবং অন্যান্য ট্যাগ থেকে বিচ্ছিন্ন। উদাহরণ স্বরূপ, _32bit ট্যাগ সহ binary-test-args শুধুমাত্র একই ট্যাগ সহ binary-test-source এ প্রয়োগ করা হয় এবং একই ট্যাগ সহ binary-test-working-directory এ কার্যকর করা হয়। binary-test-working-directory বিকল্পটি বাইনারি পরীক্ষার জন্য ঐচ্ছিক, আপনাকে একটি ট্যাগের জন্য একটি একক কার্যকারী ডিরেক্টরি নির্দিষ্ট করার অনুমতি দেয়। যখন binary-test-working-directory বিকল্পটি অনির্দিষ্ট রেখে দেওয়া হয়, তখন প্রতিটি ট্যাগের জন্য ডিফল্ট ডিরেক্টরি ব্যবহার করা হয়।

ট্যাগ নামটি ফলাফলের রিপোর্টে পরীক্ষার ক্ষেত্রে নামের সাথে সরাসরি যুক্ত করা হয়। উদাহরণস্বরূপ, _32bit ট্যাগ সহ টেস্ট কেস testcase1 ফলাফল রিপোর্টে testcase1_32bit হিসাবে প্রদর্শিত হবে।

BinaryTest টেমপ্লেট ছাড়াই টার্গেট-সাইড টেস্ট একীভূত করুন

VTS-এ, ডিফল্ট পরীক্ষার বিন্যাস হল হোস্ট-সাইড পাইথন পরীক্ষা VTS রানারে বেসটেস্ট থেকে প্রসারিত। টার্গেট-সাইড টেস্টগুলিকে একীভূত করতে, আপনাকে প্রথমে টেস্ট ফাইলগুলিকে ডিভাইসে পুশ করতে হবে, শেল কমান্ড ব্যবহার করে পরীক্ষাগুলি চালাতে হবে, তারপর হোস্ট-সাইড পাইথন স্ক্রিপ্টগুলি ব্যবহার করে ফলাফলগুলি পার্স করতে হবে।

পরীক্ষা বাইনারি পুশ

আমরা VtsFilePusher টার্গেট প্রস্তুতকারী ব্যবহার করে ফাইলগুলি পুশ করার পরামর্শ দিই। উদাহরণ:

<target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
        <option name="push" value="DATA/test->/data/local/tmp/test"/>
    </target_preparer>

VtsFilePusher নিম্নলিখিত কাজ করে:

  1. ডিভাইস সংযোগ পরীক্ষা করে।
  2. পরম উৎস ফাইল পাথ নির্ধারণ করে।
  3. adb push কমান্ড ব্যবহার করে ফাইলগুলিকে পুশ করে।
  4. পরীক্ষা শেষ হওয়ার পরে ফাইল মুছে দেয়।

বিকল্পভাবে, আপনি একটি হোস্ট-সাইড পাইথন টেস্ট স্ক্রিপ্ট ব্যবহার করে ফাইলগুলিকে ম্যানুয়ালি পুশ করতে পারেন যা অনুরূপ পদ্ধতি অনুসরণ করে।

পরীক্ষা চালান

ডিভাইসে ফাইল পুশ করার পর, হোস্ট-সাইড পাইথন টেস্ট স্ক্রিপ্টে শেল কমান্ড ব্যবহার করে পরীক্ষা চালান। উদাহরণ:

device = self.android_devices[0]
res = device.shell.Execute(["chmod a+x /data/local/tmp/test", "/data/local/tmp/test"])
asserts.AssertFalse(any(res[return_codes]))

GtestBinaryTest টেমপ্লেট

GtestBinaryTest টেমপ্লেট GTest টেস্ট বাইনারি হোস্ট করে, যার প্রতিটিতে সাধারণত একাধিক পরীক্ষার কেস থাকে। এই টেমপ্লেটটি সেটআপ, টেস্ট কেস তৈরি এবং ফলাফল পার্সিং পদ্ধতির মাধ্যমে বাইনারিটেস্ট টেমপ্লেটকে প্রসারিত করে, তাই সমস্ত বাইনারিটেস্ট কনফিগারেশন উত্তরাধিকারসূত্রে পাওয়া যায়।

GtestBinaryTest বিকল্পটি যোগ করে gtest-batch-mode :

বিকল্পের নাম মান প্রকার বর্ণনা
বাইনারি-পরীক্ষা-টাইপ স্ট্রিং টেমপ্লেট টাইপ। মান gtest ব্যবহার করে।
gtest-ব্যাচ-মোড বুলিয়ান ব্যাচ মোডে Gtest বাইনারি চালান। উদাহরণ: true

সাধারণভাবে, gtest-batch-mode true এ সেট করা কার্যক্ষমতা বাড়ায় এবং নির্ভরযোগ্যতা কিছুটা কমিয়ে দেয়। VTS কমপ্লায়েন্স পরীক্ষায়, অনেক মডিউল কর্মক্ষমতা উন্নত করতে ব্যাচ মোড ব্যবহার করে। নির্ভরযোগ্যতার জন্য, যদি মোডটি অনির্দিষ্ট থাকে তবে এটি নন-ব্যাচের জন্য ডিফল্ট।

নন-ব্যাচ মোড

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

চিত্র 2. নন-ব্যাচ মোড।

নন-ব্যাচ মোড ব্যবহার করার সুবিধার মধ্যে রয়েছে:

  • টেস্ট কেস আইসোলেশন । একটি পরীক্ষার ক্ষেত্রে ক্র্যাশ বা ঝুলে থাকা অন্যান্য পরীক্ষার ক্ষেত্রে প্রভাবিত করে না।
  • গ্রানুলারিটি । প্রতি-টেস্ট-কেস প্রোফাইলিং/কভারেজ পরিমাপ, সিস্ট্রেস, বাগরিপোর্ট, লগক্যাট, ইত্যাদি পেতে সহজ৷ প্রতিটি পরীক্ষার কেস শেষ হওয়ার সাথে সাথে পরীক্ষার ফলাফল এবং লগগুলি পুনরুদ্ধার করা হয়৷

নন-ব্যাচ মোড ব্যবহার করার অসুবিধাগুলির মধ্যে রয়েছে:

  • অপ্রয়োজনীয় লোড হচ্ছে প্রতিবার GTest বাইনারি কল করা হলে, এটি সম্পর্কিত লাইব্রেরিগুলি লোড করে এবং প্রাথমিক ক্লাস সেটআপগুলি সম্পাদন করে।
  • ওভারহেড যোগাযোগ . একটি পরীক্ষা শেষ হওয়ার পরে, হোস্ট এবং লক্ষ্য ডিভাইস ফলাফল পার্সিং এবং পরবর্তী কমান্ডের জন্য যোগাযোগ করে (ভবিষ্যতে অপ্টিমাইজেশন সম্ভব)।

ব্যাচ মোড

GTest ব্যাচ মোডে, হোস্ট-সাইড কনফিগারেশন দ্বারা ফিল্টার করা সমস্ত পরীক্ষার ক্ষেত্রে সমন্বিত একটি দীর্ঘ পরীক্ষার ফিল্টার মান সহ টেস্ট বাইনারি শুধুমাত্র একবার বলা হয় (এটি নন-ব্যাচ মোডে অপ্রয়োজনীয় লোডিং সমস্যা এড়ায়)। আপনি output.xml ব্যবহার করে বা টার্মিনাল আউটপুট ব্যবহার করে GTest-এর পরীক্ষার ফলাফল পার্স করতে পারেন।

output.xml ব্যবহার করার সময় (ডিফল্ট):

চিত্র 3. ব্যাচ মোড, output.xml।

নন-ব্যাচ মোডের মতো, পরীক্ষার ফলাফল GTest আউটপুট xml ফাইলের মাধ্যমে পার্স করা হয়। যাইহোক, যেহেতু সমস্ত পরীক্ষা শেষ হওয়ার পরে আউটপুট xml উৎপন্ন হয়, যদি কোনো টেস্ট কেস বাইনারি বা ডিভাইস ক্র্যাশ করে কোনো ফলাফল xml ফাইল তৈরি হয় না।

টার্মিনাল আউটপুট ব্যবহার করার সময়:

চিত্র 4. ব্যাচ মোড, টার্মিনাল আউটপুট।

GTest চলাকালীন, এটি পরীক্ষার লগ এবং টার্মিনালে অগ্রগতি একটি বিন্যাসে প্রিন্ট করে যা পরীক্ষার স্থিতি, ফলাফল এবং লগগুলির জন্য ফ্রেমওয়ার্ক দ্বারা পার্স করা যেতে পারে।

ব্যাচ মোড ব্যবহার করার সুবিধার মধ্যে রয়েছে:

  • টেস্ট কেস আইসোলেশন । নন-ব্যাচ মোডের মতো একই স্তরের টেস্ট কেস আইসোলেশন প্রদান করে যদি ফ্রেমওয়ার্ক একটি কম টেস্ট ফিল্টার (সমাপ্ত এবং ক্র্যাশ হওয়া টেস্ট কেস ব্যতীত) ক্র্যাশ হওয়ার পরে বাইনারি/ডিভাইস পুনরায় চালু করে।
  • গ্রানুলারিটি । নন-ব্যাচ মোড হিসাবে একই টেস্ট-কেস গ্রানুলারিটি প্রদান করে।

ব্যাচ মোড ব্যবহার করার অসুবিধাগুলির মধ্যে রয়েছে:

  • রক্ষণাবেক্ষণ খরচ । GTest লগিং বিন্যাস পরিবর্তন হলে, সমস্ত পরীক্ষা ভেঙ্গে যাবে।
  • বিভ্রান্তি । একটি টেস্ট কেস GTest অগ্রগতি বিন্যাসের অনুরূপ কিছু মুদ্রণ করতে পারে, যা বিন্যাসকে বিভ্রান্ত করতে পারে।

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

HostBinaryTest টেমপ্লেট

HostBinaryTest টেমপ্লেট হোস্ট-সাইড এক্সিকিউটেবলগুলিকে অন্তর্ভুক্ত করে যেগুলি অন্য ডিরেক্টরিতে বা পাইথন স্ক্রিপ্টে বিদ্যমান নেই। এই পরীক্ষা অন্তর্ভুক্ত:

  • কম্পাইল করা টেস্ট বাইনারি হোস্টে এক্সিকিউটেবল
  • শেল, পাইথন বা অন্যান্য ভাষায় এক্সিকিউটেবল স্ক্রিপ্ট

একটি উদাহরণ হল VTS নিরাপত্তা SELinux নীতি হোস্ট-সাইড পরীক্ষা :

<configuration description="Config for VTS  Security SELinux policy host-side test cases">
    ...
    <test class="com.android.tradefed.testtype.VtsMultiDeviceTest">
        <option name="test-module-name" value="VtsSecuritySelinuxPolicyHost"/>
        <option name="binary-test-source" value="out/host/linux-x86/bin/VtsSecuritySelinuxPolicyHostTest" />
        <option name="binary-test-type" value="host_binary_test"/>
    </test>
</configuration>

HostBinaryTest BinaryTest টেমপ্লেট প্রসারিত করে না কিন্তু অনুরূপ পরীক্ষার কনফিগারেশন ব্যবহার করে। উপরের উদাহরণে, binary-test-source বিকল্পটি পরীক্ষার এক্সিকিউটেবলের জন্য একটি হোস্ট-সাইড আপেক্ষিক পথ নির্দিষ্ট করে এবং binary-test-type হল host_binary_test । বাইনারিটেস্ট টেমপ্লেটের মতো, বাইনারি ফাইলের নামটি ডিফল্টরূপে টেস্ট কেস নাম হিসাবে ব্যবহৃত হয়।

বিদ্যমান টেমপ্লেটগুলি প্রসারিত করুন

আপনি নন-পাইথন পরীক্ষাগুলি অন্তর্ভুক্ত করতে পরীক্ষা কনফিগারে সরাসরি টেমপ্লেটগুলি ব্যবহার করতে পারেন বা নির্দিষ্ট পরীক্ষার প্রয়োজনীয়তাগুলি পরিচালনা করতে একটি সাবক্লাসে প্রসারিত করতে পারেন। VTS রেপোতে টেমপ্লেটগুলির নিম্নলিখিত এক্সটেনশন রয়েছে:

চিত্র 5. VTS রেপোতে বিদ্যমান টেমপ্লেটগুলিকে প্রসারিত করা হচ্ছে।

ডেভেলপারদের কোনো নির্দিষ্ট পরীক্ষার প্রয়োজনীয়তার জন্য বিদ্যমান টেমপ্লেট প্রসারিত করতে উৎসাহিত করা হয়। টেমপ্লেটগুলি প্রসারিত করার সাধারণ কারণগুলির মধ্যে রয়েছে:

  • বিশেষ পরীক্ষা সেটআপ পদ্ধতি, যেমন বিশেষ কমান্ড সহ একটি ডিভাইস প্রস্তুত করা।
  • বিভিন্ন পরীক্ষার কেস এবং পরীক্ষার নাম তৈরি করা।
  • কমান্ড আউটপুট পড়া বা অন্যান্য শর্ত ব্যবহার করে ফলাফল পার্সিং।

বিদ্যমান টেমপ্লেটগুলিকে প্রসারিত করা সহজ করার জন্য, টেমপ্লেটগুলিতে প্রতিটি কার্যকারিতার জন্য বিশেষ পদ্ধতি রয়েছে৷ আপনার যদি বিদ্যমান টেমপ্লেটগুলির জন্য উন্নত ডিজাইন থাকে, আমরা আপনাকে VTS কোড বেসে অবদান রাখতে উত্সাহিত করি।