आज की पोस्ट में, हम रेल 6 में सिस्टम टेस्ट देखेंगे। सिस्टम टेस्ट का मतलब आपके यूजर इंटरफेस में जावास्क्रिप्ट सहित, आपके एप्लिकेशन के साथ यूजर के इंटरैक्ट करने के तरीके को ऑटो-टेस्ट करना है। मिनिटेस्ट, रेल में डिफ़ॉल्ट परीक्षण ढांचा होने के नाते, सिस्टम परीक्षण के लिए एक बेहतरीन मैच है। सभी कॉन्फ़िगरेशन के साथ जो रेल हमारे लिए संभालती है, हमारे पहले परीक्षण और चलने से पहले बस कुछ ही चरणों की आवश्यकता होती है।
रेल 5.1 में रेल स्टैक में सिस्टम परीक्षण जोड़े गए थे। जब मैं उनका उपयोग शुरू करने के लिए बैठ गया, तो मुझे प्रासंगिक, अद्यतित जानकारी इकट्ठा करना मुश्किल लगा जो आरएसपीसी के बारे में नहीं है। मिनिटेस्ट के साथ सिस्टम परीक्षणों के साथ काम करने के लिए मैंने जो नवीनतम और महानतम एकत्र किया है वह यहां दिया गया है।
सिस्टम टेस्ट का परिचय
रेल शब्दजाल में, सिस्टम परीक्षण "एक संपूर्ण प्रणाली के रूप में एक आवेदन का परीक्षण" को संदर्भित करता है। यह परीक्षणों में ब्राउज़र का उपयोग करके किया जाता है। अलग-अलग हिस्सों का परीक्षण करने के बजाय, सिस्टम परीक्षणों के साथ, हम पूरे 'वर्कफ़्लो' का परीक्षण कर सकते हैं, ठीक उसी तरह जैसे कोई उपयोगकर्ता हमारे ऐप के साथ बातचीत करते समय जावास्क्रिप्ट भागों सहित, करता है। व्यवहार में, इसका मतलब है कि हम नहीं चाहते कि अगर . की जांच के लिए सिस्टम टेस्ट हो जब कोई उपयोगकर्ता किसी बटन पर क्लिक करता है तो डेटाबेस में एक रिकॉर्ड बनाया जाता है; हम सिर्फ यह जांचते हैं कि क्या वह नया रिकॉर्ड उनकी स्क्रीन पर दिखाई देता है। इस प्रकार के यूजर इंटरेक्शन टेस्ट को फीचर टेस्ट या एक्सेप्टेंस टेस्ट भी कहा जाता है। वे एकीकरण परीक्षणों से भिन्न हैं:एकीकरण परीक्षण व्यवहार का परीक्षण करने के लिए हैं, विशेष रूप से ऐप के सभी भागों का एक साथ, लेकिन उपयोगकर्ता इंटरफ़ेस के माध्यम से नहीं।
कॉन्फ़िगरेशन
कॉन्फ़िगरेशन इतना सरल है, यह लगभग भ्रमित करने वाला है।
Capybara रत्न का उपयोग ब्राउज़र के साथ बातचीत करने के लिए किया जाता है। Capybara के माध्यम से हम परीक्षण पृष्ठों पर जा सकते हैं, फॉर्म भर सकते हैं, लिंक और बटन पर क्लिक कर सकते हैं। यदि आपने पहले Capybara के साथ काम किया है, तो आप उन सभी चीजों से अवगत हैं जिन्हें आपको डेटाबेस सफाई रणनीति और ब्राउज़र कॉन्फ़िगरेशन के साथ काम करने के लिए समन्वयित करना है। रेल सिस्टम परीक्षण सेट अप के लिए हुर्रे:यह कैपिबारा आउट-ऑफ-द-बॉक्स के साथ काम करने के लिए आवश्यक सभी कॉन्फ़िगरेशन का ख्याल रखता है। इसलिए हम वास्तविक परीक्षण लेखन पर ध्यान केंद्रित कर सकते हैं। यह डिफ़ॉल्ट रूप से सेलेनियम ड्राइवर का उपयोग करता है।
दस्तावेज़ों से:"डिफ़ॉल्ट रूप से, ActionDispatch::SystemTestCase सेलेनियम ड्राइवर द्वारा संचालित होता है, क्रोम ब्राउज़र के साथ, और 1400x1400 के ब्राउज़र आकार के साथ।" सेलेनियम ड्राइवर Capybara के डिफ़ॉल्ट से अलग है और इसे इसलिए चुना गया है क्योंकि यह Javascript के साथ काम करता है।
सभी सेटिंग्स 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
यदि आपने रेल 6 के साथ एक नया ऐप तैयार किया है, तो आपको वास्तव में इसकी आवश्यकता है। अर्थ:आप उपयोगकर्ता इंटरफ़ेस परीक्षण या RSpec के फ़ीचर परीक्षणों के लिए इंटरनेट द्वारा दिखाए जाने वाले सेलेनियम ड्राइवर को सेट करने के बारे में सभी सलाहों को छोड़ सकते हैं।
मौजूदा ऐप्स में, मचान बनाने से स्वचालित रूप से application_system_test_case.rb
उत्पन्न होगा और वह सब कुछ जो आपको सिस्टम परीक्षण के लिए चाहिए।
जब एलीन उचिटेल ने सिस्टम परीक्षण की शुरुआत की, क्रोम को फ़ायरफ़ॉक्स पर चुना गया क्योंकि उस समय एफएफ सेलेनियम के साथ अच्छी तरह से नहीं खेलता था। यह फ़ायरफ़ॉक्स के बाद के संस्करणों में तय किया गया है। इसलिए मैं Chrome को 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 में सिस्टम परीक्षणों की शुरुआत के बाद से, क्रोमेड्राइवर-हेल्पर रत्न को बहिष्कृत कर दिया गया है। नए रेल 6 ऐप्स में, इसे वेबड्राइवर मणि से बदल दिया गया है। रेल 5 ऐप्स में, यदि आपने अभी तक ऐसा नहीं किया है तो आपको क्रोमेड्रिवर-हेल्पर को वेबड्राइवर्स मणि से बदलना चाहिए। वेबड्राइवर रत्न के साथ, आपको सेलेनियम-वेबड्राइवर रत्न की भी आवश्यकता नहीं है; वेबड्राइवर उसका भी ख्याल रखते हैं। मजेदार तथ्य:रेल 6 हमें सेलेनियम-वेबड्राइवर रत्न और वेबड्राइवर रत्न दोनों देता है।
स्वच्छता जांच:आपको अब और क्या चाहिए
Capybara की स्थापना एक दर्द हुआ करती थी। यह स्पष्ट नहीं था कि आपको इसे शुरू से स्थापित करने के लिए क्या चाहिए, जिसमें सही डेटाबेस सफाई रणनीति, कैपिबारा-वेबकिट रत्न की निर्भरता और सभी प्रकार की अप्रत्याशित आवश्यकताएं शामिल हैं, जिन्हें आपको परीक्षण लिखना शुरू करने से पहले पता लगाने की आवश्यकता थी। अब जब रेल हमारी जरूरत की हर चीज उपलब्ध कराती है, तो मुझे गाइड और प्रलेखन में उपलब्ध सभी जानकारी के लिए एकमात्र भ्रमित करने वाला हिस्सा मिला जो अब अप्रचलित है। यहां कुछ चीजें दी गई हैं जिन्हें हम अभी अनदेखा कर सकते हैं।
सबसे पहले, पहले से तैयार रेल सेटअप का मतलब है कि हम अधिक रत्नों को छोड़ सकते हैं जिनका अक्सर परीक्षण के संबंध में उल्लेख किया जाता है, जैसे मिनीटेस्ट-रेल-कैपीबारा, या मिनिटेस्ट के लिए अतिरिक्त:रंगीन आउटपुट, तेजी से असफल परीक्षण और एक लाइन/परीक्षण चलाना। ये मिनिटेस्ट फीचर्स रेल 5.0 में पेश किए गए टेस्ट रनर में हैं।
अब डेटाबेस_क्लीनर रत्न की कोई आवश्यकता नहीं है; रेल हमारे लिए सफाई करती है ('लेन-देन परीक्षण')।
चूंकि रेल कैपिबारा डिफ़ॉल्ट के बजाय सेलेनियम का उपयोग करता है, इसलिए हमें कैपिबारा-वेबकिट की आवश्यकता नहीं है और हमें जावास्क्रिप्ट तत्वों के परीक्षण को शामिल करने के लिए कोई अतिरिक्त करने की आवश्यकता नहीं है।
आपको Capybara के save_and_open_screenshot
का उपयोग करने की भी आवश्यकता नहीं है , क्योंकि रेल एक 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
नोट:रेल प्रलेखन में और कई लेखों में मैंने पाया, Poltergeist को ड्राइवर के लिए एक विकल्प के रूप में नामित किया गया था। यह Capybara के लिए - हेडलेस - PhantomJS ड्राइवर के रूप में लोकप्रिय हुआ करता था। फैंटमजेएस को छोड़ दिया गया है। इसलिए, विवरण में गोता लगाने की कोई आवश्यकता नहीं है - इसका कारण मैं यहां उल्लेख कर रहा हूं क्योंकि Poltergeist और PhantomJS अभी भी रेल डॉक्स में उल्लिखित हैं।
आप और भी अनुकूलन कर सकते हैं, लेकिन आरंभ करने के लिए, वास्तव में आपको बस इतना ही चाहिए।
परीक्षा चलाना
$ rails test
सिस्टम परीक्षणों को छोड़कर सभी परीक्षण चलाएगा। आपको स्पष्ट रूप से $ rails test:system
run चलाने की आवश्यकता है . (मजेदार तथ्य:$ rails
आदेश हमेशा बिन/रेल के माध्यम से चलेगा। $ bin/rails
टाइप करने की जरूरत नहीं है अब और।)
- सभी सिस्टम परीक्षण चलाएँ:
$ rails test:system
- किसी विशिष्ट फ़ाइल में परीक्षण चलाएं (यहां:users_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 के GitLab के नामकरण परंपरा को उधार लिया, जो इस दृष्टिकोण को अच्छी तरह से फिट करता है। उदाहरण के लिए:user_shares_card_test.rb
।
सामान्य टिप्स और ट्रिक्स
- यदि आप प्रमाणीकरण के लिए डेविस का उपयोग करते हैं, तो आप परीक्षण उपयोगकर्ताओं को लॉग इन करने और लॉग आउट करने के लिए डेविस एकीकरण सहायकों का उपयोग कर सकते हैं।
include Devise::Test::IntegrationHelpers
. जोड़ें एक परीक्षण कक्षा में, या इसेtest_helper.rb
. में जोड़ें फ़ाइल उन्हें सभी परीक्षणों में उपलब्ध कराने के लिए। अब आप एक उपयोगकर्ता बना सकते हैं औरsign_in(@user)
. अगर आप इसेsetup
. में डालते हैं विधि, आपको उपयोगकर्ता को एक टियरडाउन में लॉग आउट करने की आवश्यकता नहीं है। रेल सेटअप विधि में जो कुछ है उसे साफ करने का ध्यान रखती है। - फॉर्म के साथ काम करते हुए, उन आईडी को संदर्भित करना आकर्षक है जो रेल मॉडल नाम + फ़ील्ड नाम और बटन प्रकारों से स्वचालित रूप से बनाता है
click_on
एस। (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
. का उपयोग करने के लिए विधि। - विभिन्न स्क्रीन आकारों पर परीक्षण चलाने के लिए कस्टम कक्षाएं बनाएं। गाइड देखें।
- स्क्रीनशॉट सुविधा का उपयोग आपके दस्तावेज़ीकरण और प्रचार सामग्री के स्क्रीनशॉट लेने के लिए भी किया जा सकता है। यदि आप इसे एक स्क्रीनकास्ट बनाते हैं और प्लेबैक गति को धीमा करते हैं, तो आपके पास मिनटों में एक उत्पाद वीडियो है!
- रेल सिस्टम परीक्षण के लिए जनरेटर प्रदान करता है।
- रेल में मिनिटेस्ट खुद मिनिटेस्ट से थोड़ा अलग है, और रेल विशिष्ट विधियों और अभिकथनों को भी जोड़ता है। सबसे पहले मिनिटेस्ट डॉक्स से पहले रेल डॉक्स देखें।
मुझे सिस्टम परीक्षणों में बहुत मज़ा आया, और अधिकांश भाग के लिए, इसका धन्यवाद कि इसे आउट-ऑफ-द-बॉक्स उपयोग करना कितना आसान था।
निष्कर्ष
इस पोस्ट में, हमने देखा कि रेल किस कॉन्फ़िगरेशन को आउट-ऑफ़-द-बॉक्स वितरित करती है और हम कौन से न्यूनतम अनुकूलन जोड़ना चाहते हैं। सिस्टम टेस्ट लिखने के लिए मिनिटेस्ट बहुत अच्छा है। कुछ युक्तियों और तरकीबों से आपके पहले सिस्टम परीक्षण को चलाने और चलाने में मदद मिलनी चाहिए। उन्हें ब्राउज़र में अपना जादू करते हुए देखें!