স্ক্রিনশট পরীক্ষা

আপনার অ্যাপের UI যাচাই করার জন্য স্ক্রিনশট টেস্টিং একটি খুব কার্যকর উপায়। স্ক্রিনশট পরীক্ষাগুলি উপাদান, বৈশিষ্ট্য এবং অ্যাপ্লিকেশন পরীক্ষায় থাকতে পারে।

আপনি যন্ত্রযুক্ত এবং স্থানীয় উভয় স্ক্রিনশট পরীক্ষা তৈরি করতে তৃতীয় পক্ষের সরঞ্জামগুলি ব্যবহার করতে পারেন। আপনি কম্পোজ ব্যবহার করলে, আপনি অফিসিয়াল কম্পোজ প্রিভিউ স্ক্রিনশট টেস্টিং টুল ব্যবহার করতে পারেন।

সংজ্ঞা

স্ক্রিনশট পরীক্ষাগুলি একটি UI এর একটি স্ক্রিনশট নেয় এবং এটিকে "রেফারেন্স" বা "গোল্ডেন" নামে পরিচিত একটি পূর্ব-অনুমোদিত চিত্রের সাথে তুলনা করে:

একটি স্ক্রিনশট পরীক্ষা দুটি চিত্রের তুলনা করে, একটি নতুন স্ক্রিনশট এবং একটি রেফারেন্স চিত্র।
চিত্র 1. একটি স্ক্রিনশট পরীক্ষা দুটি চিত্রের তুলনা করে

ছবি একই হলে, পরীক্ষা পাস। তাদের মধ্যে পার্থক্য থাকলে, টুলটি একটি প্রতিবেদন তৈরি করে:

একটি স্ক্রিনশট পরীক্ষার রিপোর্ট, উভয় পাশে রেফারেন্স এবং নতুন স্ক্রিনশট এবং মাঝখানে পার্থক্য দেখাচ্ছে।
চিত্র 2. একটি স্ক্রিনশট পরীক্ষার রিপোর্ট, উভয় দিকে রেফারেন্স এবং নতুন স্ক্রিনশট এবং মাঝখানে পার্থক্য দেখাচ্ছে৷

প্রতিবেদনের সাথে, আপনার দুটি সম্ভাব্য প্রতিক্রিয়া আছে:

  • নতুন কোডে একটি ত্রুটি আছে তা উপলব্ধি করুন এবং এটি ঠিক করুন।
  • নতুন স্ক্রিনশট অনুমোদন করুন এবং নতুনটির সাথে রেফারেন্স চিত্রটি প্রতিস্থাপন করুন।

স্ক্রিনশট পরীক্ষায় নিয়মিত পরীক্ষার চেয়ে আলাদা ওয়ার্কফ্লো থাকে কারণ একটি ব্যর্থ পরীক্ষা সর্বদা একটি ত্রুটির অর্থ নয়।

সুবিধা

সুবিধা বা স্ক্রিনশট পরীক্ষা হল:

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

অসুবিধা

যাইহোক, স্ক্রিনশট পরীক্ষার অসুবিধাও থাকতে পারে:

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

নিম্নলিখিত বিভাগগুলি এই সমস্যাগুলি সমাধানের জন্য সুপারিশ প্রদান করে৷

একটি ন্যূনতম স্ক্রিনশট পরীক্ষা রাখুন

রিগ্রেশনের জন্য প্রতিক্রিয়া এবং কভারেজ সর্বাধিক করার সময় আপনার স্ক্রিনশট পরীক্ষার সংখ্যা হ্রাস করা উচিত।

বিভিন্ন UI রাজ্যের সংমিশ্রণ খুব দ্রুত পরীক্ষার সংখ্যা বাড়াতে পারে। নিম্নলিখিত কিছু উপায়ে আপনি আপনার অ্যাপের UI এর একটি অংশ যাচাই করতে পারেন:

  • বিভিন্ন থিমে
  • বিভিন্ন ফন্ট সাইজ ব্যবহার করে
  • বিভিন্ন পর্দার মাপ বা সীমানার ভিতরে

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

উদাহরণস্বরূপ, আপনি যদি হালকা এবং অন্ধকার থিম সহ একটি কাস্টম বোতাম পরীক্ষা করতে চান, এবং 3টি ফন্টের আকারের সাথে, আপনাকে তাদের সবগুলির সংমিশ্রণ তৈরি করতে হবে না। পরিবর্তে, আপনি থিমগুলির মধ্যে একটি বেছে নিতে পারেন। এটি কারণ যেভাবে বোতামটি দীর্ঘ শব্দগুলিতে প্রতিক্রিয়া দেখায় তা থিমের উপর কোন প্রভাব ফেলে না।

আপনি UI বৈশিষ্ট্যের কিছু সমন্বয় বাদ দিতে পারেন।
চিত্র 3. আপনি UI বৈশিষ্ট্যের কিছু সমন্বয় বাদ দিতে পারেন।

রেফারেন্স ইমেজ সংরক্ষণ করুন

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

এই ফাইলগুলি পরিচালনা করার জন্য আপনার কাছে 3টি বিকল্প রয়েছে:

  • গিট ব্যবহার চালিয়ে যান, কিন্তু স্টোরেজ ব্যবহার কমানোর চেষ্টা করুন।
  • Git LFS ব্যবহার করুন।
  • স্ক্রিনশট পরিচালনা করতে একটি ক্লাউড পরিষেবা ব্যবহার করুন।

প্ল্যাটফর্মের পার্থক্য

স্ক্রিনশট পরীক্ষাগুলি পাঠ্য বা ছায়ার মতো নির্দিষ্ট বৈশিষ্ট্যগুলি আঁকতে নিম্ন-স্তরের প্ল্যাটফর্ম API-এর উপর নির্ভর করে এবং প্ল্যাটফর্মগুলি বিভিন্ন উপায়ে সেগুলি বাস্তবায়ন করতে পারে। আপনি যদি একটি ম্যাকে বিকাশ করেন এবং স্থানীয়ভাবে নেওয়া নতুন স্ক্রিনশটগুলি সংরক্ষণ করেন তবে আপনি একটি Linux CI মেশিনে ভাঙা পরীক্ষা দেখতে পারেন।

সমস্যাটির চারপাশে কাজ করার 2টি উপায় রয়েছে:

  • ছোট পরিবর্তন সহ্য করুন
  • একটি সার্ভারে স্ক্রিনশট নিন

ছোট পরিবর্তন সহ্য করুন

দুটি স্ক্রিনশট তুলনা করার সময় ছোট পার্থক্যের জন্য আপনি বেশিরভাগ স্ক্রিনশট টেস্টিং লাইব্রেরি কনফিগার করতে পারেন।

এই জন্য দুটি পন্থা আছে:

  • পরিবর্তিত পিক্সেলের শতাংশ বা পিক্সেল মানের মোট পার্থক্যের শতাংশের উপর ভিত্তি করে একটি সহনশীলতা কনফিগার করুন।
  • পিক্সেলের পরিবর্তে স্ট্রাকচারাল এবং শব্দার্থিক মিল যাচাই করতে একটি স্মার্ট ডিফারেন্স ব্যবহার করুন—যে অ্যালগরিদমটি স্ক্রিনশটের তুলনা করে।

এই পদ্ধতির অসুবিধা হল যে এটি মিথ্যা ইতিবাচকতা তৈরি করতে পারে, এবং থ্রেশহোল্ডের নীচে থাকা ত্রুটিগুলি ধরতে পারে না বা ভুলভাবে যথেষ্ট অনুরূপ বলে বিবেচিত হয়।

একটি সার্ভারে স্ক্রিনশট নিন

একটি পিক্সেল-নিখুঁত স্ক্রিনশট তুলনাকারী ব্যবহার করার জন্য, আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আপনার পরীক্ষাগুলি একই পরিস্থিতিতে স্ক্রিনশট নেয়৷ এটি করার জন্য, আপনি আপনার কন্টিনিউয়াস ইন্টিগ্রেশন (CI) সিস্টেম ব্যবহার করতে পারেন বা একটি ক্লাউড পরিষেবা নিয়োগ করতে পারেন।

উদাহরণস্বরূপ, আপনি আপনার CI ওয়ার্কফ্লোতে একটি পদক্ষেপ তৈরি করতে পারেন যা নিম্নলিখিতগুলি করে:

  1. স্ক্রিনশট পরীক্ষা চালায় (পিক্সেল-নিখুঁত ম্যাচিং ব্যবহার না করার সময় শুধুমাত্র প্রয়োজনীয়)।
  2. আগের ধাপ ব্যর্থ হলে নতুন স্ক্রিনশট রেকর্ড করে।
  3. শাখায় নতুন ফাইল জমা দেয়।
Alt Text: ডায়াগ্রাম দেখানো হচ্ছে কিভাবে CI-তে স্ক্রিনশট নিতে হয়
চিত্র 4. ডায়াগ্রাম দেখানো হচ্ছে কিভাবে CI-তে স্ক্রিনশট নিতে হয়

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

স্ক্রিনশট টেস্টিং টুল

স্ক্রিনশট পরীক্ষার জন্য উপলব্ধ সরঞ্জাম এবং লাইব্রেরির মধ্যে নিম্নলিখিত কী পার্থক্যগুলি বিবেচনা করুন:

  • পরিবেশ: স্থানীয় পরীক্ষা যা হোস্টে চলে, বা ইমুলেটর বা ডিভাইসে চালিত ইন্সট্রুমেন্টেড পরীক্ষা।
  • রেন্ডারিং ইঞ্জিন: হোস্ট-সাইড স্ক্রিনশট সমাধানগুলি পূর্বরূপের জন্য Layoutlib—Android Studio-এর রেন্ডারিং ইঞ্জিন—বা Robolectric Native Graphics (RNG) ব্যবহার করতে পারে।
    • লেআউটলিব-ভিত্তিক ফ্রেমওয়ার্কগুলি বিভিন্ন আচরণ দেখানোর জন্য বিভিন্ন অবস্থা ব্যবহার করে স্ট্যাটিক উপাদান রেন্ডার করার উপর দৃষ্টি নিবদ্ধ করে। এগুলি সাধারণত ব্যবহার করা সহজ।
    • যে ফ্রেমওয়ার্কগুলি RNG-এর সাথে একত্রিত হয় সেগুলি Robolectric-এর সমস্ত বৈশিষ্ট্য ব্যবহার করতে পারে, যা একটি বড় সুযোগের সাথে পরীক্ষার অনুমতি দেয়।