কম্পিউটার

Minitest দিয়ে রেলে সিস্টেম টেস্ট দিয়ে শুরু করা

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

Rails 5.1-এ রেল স্ট্যাকের সাথে সিস্টেম পরীক্ষা যোগ করা হয়েছে। যখন আমি সেগুলি ব্যবহার শুরু করতে বসেছিলাম, তখন আমার কাছে প্রাসঙ্গিক, আপ টু ডেট তথ্য সংগ্রহ করা কঠিন ছিল যা RSpec সম্পর্কে নয়। Minitest-এর সাথে সিস্টেম পরীক্ষা নিয়ে কাজ করার জন্য আমি সংগ্রহ করেছি এমন সব সাম্প্রতিক এবং সর্বশ্রেষ্ঠ।

সিস্টেম টেস্টের ভূমিকা

Rails jargon-এ, সিস্টেম টেস্টিং বলতে "সম্পূর্ণ সিস্টেম হিসাবে একটি অ্যাপ্লিকেশন পরীক্ষা করা" বোঝায়। এটি পরীক্ষায় একটি ব্রাউজার ব্যবহার করে করা হয়। আলাদা অংশ পরীক্ষা করার পরিবর্তে, সিস্টেম পরীক্ষার মাধ্যমে, আমরা একটি সম্পূর্ণ 'ওয়ার্কফ্লো' পরীক্ষা করতে পারি, যেমন জাভাস্ক্রিপ্ট অংশগুলি সহ আমাদের অ্যাপের সাথে ইন্টারঅ্যাক্ট করার সময় একজন ব্যবহারকারী যা দিয়ে যায়। অনুশীলনে, এর মানে হল যে আমরা যদি চেক করার জন্য একটি সিস্টেম পরীক্ষা চাই না যখন একজন ব্যবহারকারী একটি বোতামে ক্লিক করেন তখন ডাটাবেসে একটি রেকর্ড তৈরি হয়; আমরা শুধু পরীক্ষা করি যে নতুন রেকর্ড তাদের স্ক্রিনে উপস্থিত হয় কিনা। এই ধরনের ব্যবহারকারীর মিথস্ক্রিয়া পরীক্ষাগুলিকে বৈশিষ্ট্য পরীক্ষা বা গ্রহণযোগ্যতা পরীক্ষাও বলা হয়। এগুলি ইন্টিগ্রেশন টেস্ট থেকে আলাদা:ইন্টিগ্রেশন টেস্টগুলি আচরণ পরীক্ষা করার জন্য, বিশেষ করে অ্যাপের সমস্ত অংশ একসাথে, কিন্তু ইউজার ইন্টারফেসের মাধ্যমে নয়৷

কনফিগারেশন

কনফিগারেশনটি খুবই সহজ, এটি প্রায় বিভ্রান্তিকর৷

Capybara মণি ব্রাউজারের সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহৃত হয়। ক্যাপিবারার মাধ্যমে আমরা পরীক্ষাগুলিকে পৃষ্ঠাগুলি দেখতে, ফর্মগুলি পূরণ করতে, লিঙ্ক এবং বোতামগুলিতে ক্লিক করতে পারি। আপনি যদি আগে Capybara-এর সাথে কাজ করে থাকেন, তাহলে ডাটাবেস পরিষ্কার করার কৌশল এবং ব্রাউজার কনফিগারেশনের সাথে কাজ করার জন্য আপনাকে যে সমস্ত বিষয় সমন্বয় করতে হবে সে সম্পর্কে আপনি সচেতন। Hooray for the Rails system test set up:ক্যাপিবারার আউট-অফ-দ্য-বক্সের সাথে কাজ করার জন্য প্রয়োজনীয় সমস্ত কনফিগারেশনের যত্ন নেয়। তাই আমরা প্রকৃত পরীক্ষার লেখায় ফোকাস করতে পারি। এটি ডিফল্টরূপে সেলেনিয়াম ড্রাইভার ব্যবহার করে৷

ডক্স থেকে:"ডিফল্টরূপে, ActionDispatch::SystemTestCase ক্রোম ব্রাউজার সহ সেলেনিয়াম ড্রাইভার দ্বারা চালিত হয়, এবং ব্রাউজার সাইজ 1400x1400।" সেলেনিয়াম ড্রাইভার ক্যাপিবারার ডিফল্ট থেকে আলাদা এবং এটি জাভাস্ক্রিপ্টের সাথে কাজ করার কারণে বেছে নেওয়া হয়েছে।

সমস্ত সেটিংস application_system_test_case.rb এর মাধ্যমে উপলব্ধ . আপনাকে যা করতে হবে তা হল প্রতিটি পরীক্ষার ফাইলে এটি প্রয়োজন৷

#application_system_test_case.rb (default)
 
 
require "test_helper"
 
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
end

আপনি যদি Rails 6 এর সাথে একটি নতুন অ্যাপ তৈরি করেন, তাহলে এটিই আপনার প্রয়োজন। অর্থ:আপনি সেলেনিয়াম ড্রাইভার সেট আপ করার সমস্ত পরামর্শ এড়িয়ে যেতে পারেন যা ইন্টারনেট ব্যবহারকারী ইন্টারফেস পরীক্ষা বা RSpec-এর বৈশিষ্ট্য পরীক্ষার জন্য দেখায়।

বিদ্যমান অ্যাপে, একটি স্ক্যাফোল্ড তৈরি করা স্বয়ংক্রিয়ভাবে application_system_test_case.rb তৈরি করবে এবং সিস্টেম পরীক্ষার জন্য আপনার যা কিছু প্রয়োজন।

যখন Eileen Uchitelle সিস্টেম পরীক্ষা প্রবর্তন করেছিল, তখন ফায়ারফক্সের উপর Chrome বেছে নেওয়া হয়েছিল কারণ সেই সময়ে FF সেলেনিয়ামের সাথে সুন্দরভাবে খেলতে পারেনি। এটি ফায়ারফক্সের পরবর্তী সংস্করণে ঠিক করা হয়েছে। তাই আমি ক্রোমকে FF দিয়ে প্রতিস্থাপন করি, যেমন:

#application_system_test_case.rb (change driver to Firefox)
 
require "test_helper"
 
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :firefox, screen_size: [1400, 1400]
end

(প্রথম দিকে, আমি $ rails db:test:prepare after চালাতাম একটি পরিষ্কার সূচনা নিশ্চিত করতে ড্রাইভার পরিবর্তন করা হচ্ছে, কিন্তু নতুন পরীক্ষার রানার এটিরও যত্ন নেয়:ইনভোকিং পরীক্ষা স্বয়ংক্রিয়ভাবে :prepare. হবে। )

রেলস 6-এ নতুন

5.1-এ সিস্টেম পরীক্ষা প্রবর্তনের পর থেকে, ক্রোমেড্রাইভার-হেল্পার রত্নটি অবমূল্যায়িত হয়েছে৷ নতুন Rails 6 অ্যাপে, এটি ওয়েবড্রাইভার রত্ন দিয়ে প্রতিস্থাপিত হয়েছে। Rails 5 অ্যাপে, আপনি যদি এখনও এটি না করে থাকেন তাহলে আপনার ক্রোমেড্রাইভার-হেল্পারটিকে ওয়েবড্রাইভার রত্ন দিয়ে প্রতিস্থাপন করা উচিত। ওয়েবড্রাইভার মণি জায়গায়, আপনি এমনকি সেলেনিয়াম-ওয়েবড্রাইভার রত্ন প্রয়োজন হবে না; ওয়েবড্রাইভাররা এটিরও যত্ন নেয়। মজার ঘটনা:রেল 6 আমাদের সেলেনিয়াম-ওয়েবড্রাইভার রত্ন এবং ওয়েবড্রাইভার রত্ন উভয়ই দেয়৷

স্যানিটি চেক:যা আপনার আর প্রয়োজন নেই

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

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

ডাটাবেস_ক্লিনারের আর কোন প্রয়োজন নেই; রেল আমাদের জন্য পরিষ্কার করে ('লেনদেন পরীক্ষা')।

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

এমনকি আপনাকে Capybara এর save_and_open_screenshot ব্যবহার করতে হবে না , কারণ Rails একটি take_screenshot প্রদান করে পদ্ধতি এটি /tmp-এ একটি স্ক্রিনশট সংরক্ষণ করে এবং সহজে অ্যাক্সেসের জন্য পরীক্ষার আউটপুটে একটি লিঙ্ক প্রদান করে।

একটি বাস্তব ব্রাউজার এবং হেডলেস ব্রাউজারের মধ্যে নির্বাচন করা

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

আপনি যদি হেডলেস যেতে চান, তাহলে headless_chrome আছে এবং headless_firefox . এগুলি ব্যবহার করার জন্য, একটি ছোট পরিবর্তন প্রয়োজন:

# To change driver to headless_*
#application_system_test_case.rb (change driver to headless_*:)
 
require "test_helper"
 
class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :headless_firefox
end

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

আপনি করতে পারেন আরো কাস্টমাইজেশন, কিন্তু শুরু করার জন্য, এটি সত্যিই আপনার প্রয়োজন।

টেস্ট চালানো

$ rails test সিস্টেম পরীক্ষা ছাড়া সব পরীক্ষা চালানো হবে. আপনাকে স্পষ্টভাবে $ rails test:system চালাতে হবে . (মজার ঘটনা:$ rails কমান্ড সর্বদা বিন/রেলের মাধ্যমে চলবে। $ bin/rails টাইপ করার দরকার নেই আর।)

  • সকল সিস্টেম পরীক্ষা চালান:$ rails test:system
  • একটি নির্দিষ্ট ফাইলে পরীক্ষা চালান (এখানে:user_test.rb)$ rails test/system/users_test
  • ... বা একটি নির্দিষ্ট পরীক্ষা:$ rails test test/system/users_test.rb:21
  • সমস্ত পরীক্ষা চালানোর জন্য:প্রথমে সিস্টেম পরীক্ষা চালান:$ rails test:system test

দ্রষ্টব্য:বিকল্প ফ্ল্যাগগুলি test:system এর সাথে কাজ করে না; আপনি যদি -f এর মত পতাকা ব্যবহার করতে চান (দ্রুত ব্যর্থ হওয়ার জন্য) অথবা -v (ভার্বোসের জন্য), $ rails test test/system -v -f ব্যবহার করুন

কী (না) পরীক্ষা করতে হবে

সিস্টেম পরীক্ষাগুলি ইউনিট পরীক্ষার পরিপূরক, বিকল্প নয়। এটি একটি সুখী পথ পরীক্ষা করতে পারে, প্লাস একটি ত্রুটি বার্তা বা পুনঃনির্দেশ সহ একটি পথ। সিস্টেম পরীক্ষাগুলি ব্রাউজারে সমস্ত প্রান্তের ক্ষেত্রে পরীক্ষা করার জন্য নয়; শুধু প্রধান বৈশিষ্ট্যগুলি কভার করুন৷

আমার পরীক্ষার বিষয় নির্বাচন করার সময়, আমি পরীক্ষা করার জন্য একটি সত্তা খুঁজে বের করার চেষ্টা করি যেটি প্রতিফলিত করে যে ব্যবহারকারী কীভাবে অ্যাপটি ব্যবহার করে। আমার পরীক্ষার নামকরণের জন্য, আমি গিটল্যাবের ROLE_ACTION_test.rb এর নামকরণ কনভেনশন ধার নিয়েছি, যা এই পদ্ধতির সাথে ভালভাবে ফিট করে। উদাহরণস্বরূপ:user_shares_card_test.rb .

সাধারণ টিপস এবং কৌশল

  • যদি আপনি প্রমাণীকরণের জন্য Devise ব্যবহার করেন, তাহলে আপনি পরীক্ষা ব্যবহারকারীদের লগ ইন করতে এবং লগ আউট করতে Devise ইন্টিগ্রেশন সহায়ক ব্যবহার করতে পারেন। include Devise::Test::IntegrationHelpers যোগ করুন একটি পরীক্ষার ক্লাসে, অথবা এটি test_helper.rb এ যোগ করুন ফাইল সব পরীক্ষায় তাদের উপলব্ধ করতে. এখন আপনি একজন ব্যবহারকারী এবং sign_in(@user) তৈরি করতে পারেন . যদি আপনি এটি একটি setup এ রাখেন পদ্ধতি, আপনাকে টিয়ারডাউনে ব্যবহারকারীকে লগ আউট করতে হবে না। রেলগুলি সেটআপ পদ্ধতিতে যা আছে তা পরিষ্কার করার যত্ন নেয়৷
  • ফর্মগুলির সাথে কাজ করা, মডেলের নাম + ক্ষেত্রের নাম এবং click_on-এর জন্য বোতামের ধরনগুলি থেকে রেলগুলি স্বয়ংক্রিয়ভাবে যে আইডি তৈরি করে সেগুলি উল্লেখ করার জন্য এটি লোভনীয়। s ( fill_in "user_email" , click_on :commit ) কিন্তু যেহেতু সিস্টেম পরীক্ষাগুলি একজন ব্যবহারকারী আসলে কি দেখবে সে সম্পর্কে তাদের স্ক্রিনে, এটি দৃশ্যমান উপাদানগুলি, যেমন পাঠ্যগুলি ব্যবহার করা বোধগম্য। একটি যুক্তিসঙ্গত বিকল্প হল i18n লোকেল ফাইলগুলিতে রেফারেন্স কীগুলি থাকা এবং সেই কীগুলিকে চির-পরিবর্তিত আক্ষরিক পাঠ্যের পরিবর্তে ব্যবহার করা। (fill_in :user_email ) Capybara শুধুমাত্র সম্পূর্ণ I18n সিনট্যাক্স সহ পাঠ্য খুঁজে পায়:assert_selector "h1", text: I18n.t("activerecord.models.things") .
  • পথ সহায়ক ডিফল্টরূপে অন্তর্ভুক্ত করা হয়। কিছু লাইব্রেরির জন্য আপনাকে পরীক্ষার ক্লাসে সাহায্যকারীদের অন্তর্ভুক্ত করতে হবে, উদাহরণস্বরূপ include ActionMailer::TestHelper , assert_emails ব্যবহার করতে পদ্ধতি।
  • বিভিন্ন স্ক্রিনের আকারে পরীক্ষা চালানোর জন্য কাস্টম ক্লাস তৈরি করুন। গাইড দেখুন।
  • স্ক্রিনশট বৈশিষ্ট্যটি আপনার ডকুমেন্টেশন এবং প্রচারমূলক সামগ্রীর জন্য স্ক্রিনশট নিতেও ব্যবহার করা যেতে পারে। আপনি যদি এটিকে একটি স্ক্রিনকাস্ট করেন এবং প্লেব্যাকের গতি কমিয়ে দেন, আপনার কাছে মিনিটের মধ্যে একটি পণ্যের ভিডিও রয়েছে!
  • রেলস সিস্টেম পরীক্ষার জন্য একটি জেনারেটর প্রদান করে।
  • রেলের মধ্যে মিনিটেস্ট মিনিটেস্টের থেকে কিছুটা আলাদা, এবং এছাড়াও রেলের নির্দিষ্ট পদ্ধতি এবং দাবি যোগ করে। Minitest ডক্সের আগে প্রথমে রেল ডক্স চেক করুন।

আমি সিস্টেম পরীক্ষায় ভাল মজা পেয়েছি, এবং এটি ছিল, বেশিরভাগ অংশের জন্য, এটিকে বাক্সের বাইরে ব্যবহার করা কতটা সহজ ছিল তার জন্য ধন্যবাদ৷

উপসংহার

এই পোস্টে, আমরা দেখেছি যে কী কনফিগারেশন রেলগুলি বাক্সের বাইরে সরবরাহ করে এবং আমরা কী ন্যূনতম কাস্টমাইজেশন যোগ করতে চাই। সিস্টেম পরীক্ষা লেখার জন্য Minitest দুর্দান্ত। কয়েকটি টিপস এবং কৌশল আপনার প্রথম সিস্টেম পরীক্ষাগুলি চালু করতে এবং চালু করতে সহায়তা করবে। ব্রাউজারে তাদের জাদু করতে দেখুন!


  1. Apple TV+

  2. এই Stardock অ্যাপগুলির সাথে Windows 11 কাস্টমাইজ করা শুরু করা

  3. ওয়েবের জন্য Android মেসেজ দিয়ে শুরু করা

  4. Xen ভার্চুয়ালাইজেশন দিয়ে শুরু করা