Erlang 21 - 11. Using Common Test for Large-Scale Testing

11 बड़े पैमाने पर परीक्षण के लिए सामान्य परीक्षण का उपयोग करना




erlang

11 बड़े पैमाने पर परीक्षण के लिए सामान्य परीक्षण का उपयोग करना

11.1 सामान्य

बड़े पैमाने पर स्वचालित परीक्षण को समानांतर में कई स्वतंत्र परीक्षण सत्र चलाने की आवश्यकता होती है। यह एक या एक से अधिक मेजबानों पर कुछ Common Test नोड चलाकर, विभिन्न लक्ष्य प्रणालियों का परीक्षण करके पूरा किया जाता है। स्वतंत्र रूप से परीक्षण नोड्स को कॉन्फ़िगर करना, शुरू करना और नियंत्रित करना एक बोझिल ऑपरेशन हो सकता है। इस तरह के स्वचालित बड़े पैमाने पर परीक्षण की सहायता के लिए, Common Test एक मास्टर टेस्ट नोड घटक, Common Test मास्टर प्रदान करता है, जो वितरित Common Test नोड्स की एक प्रणाली में केंद्रीय कॉन्फ़िगरेशन और नियंत्रण को संभालता है।

Common Test मास्टर सर्वर एक समर्पित एर्लांग नोड पर चलता है और किसी भी Common Test टेस्ट नोड्स की संख्या के साथ संवाद करने के लिए एर्लैंग को वितरित करता है, प्रत्येक एक नियमित Common Test सर्वर की मेजबानी करता है। टेस्ट स्पेसिफिकेशन्स का उपयोग इनपुट के रूप में किया जाता है कि किस कॉन्फ़िगरेशन का उपयोग करके कौन से टेस्ट नोड्स का परीक्षण किया जाए।

Common Test मास्टर सर्वर नियमित रूप से Common Test सर्वर के समान HTML लॉग फ़ाइलों में प्रगति की जानकारी लिखता है। लॉग में प्रत्येक स्वतंत्र Common Test सर्वर द्वारा लिखी गई लॉग फ़ाइलों के परीक्षण आँकड़े और लिंक होते हैं।

Common Test मास्टर एपीआई को मॉड्यूल ct_master द्वारा निर्यात किया जाता है।

११.२ उपयोग करें

Common Test मास्टर को एक ही नेटवर्क पर सभी टेस्ट नोड्स की आवश्यकता होती है और एक साझा फ़ाइल सिस्टम साझा करता है। Common Test मास्टर स्वचालित रूप से परीक्षण नोड्स शुरू नहीं कर सकता है। Common Test मास्टर के लिए नोड्स को पहले से शुरू किया जाना चाहिए ताकि वे उन पर टेस्ट सेशन शुरू कर सकें।

ct_master:run(TestSpecs) या ct_master:run(TestSpecs, InclNodes, ExclNodes) को कॉल करके टेस्ट शुरू किए जाते हैं।

TestSpecs या तो एक परीक्षण विनिर्देश फ़ाइल (स्ट्रिंग) या परीक्षण विनिर्देशों की एक सूची का नाम है। यदि यह एक सूची है, तो विनिर्देशों को अनुक्रम में (और संबंधित परीक्षण निष्पादित) संभाला जाता है। TestSpecs सूची में एक तत्व परीक्षण विनिर्देशों की सूची भी हो सकता है। इस तरह की सूची के विनिर्देशों को परीक्षण निष्पादन से पहले एक संयुक्त विनिर्देश में मिला दिया जाता है।

उदाहरण:

ct_master:run(["ts1","ts2",["ts3","ts4"]])

यहां, "ts1" द्वारा निर्दिष्ट परीक्षण पहले चलते हैं, फिर "ts2" द्वारा निर्दिष्ट परीक्षण, और अंत में "ts3" और "ts4" दोनों द्वारा निर्दिष्ट परीक्षण।

InclNodes को run/3 लिए तर्क run/3 नोड नामों की एक सूची है। फंक्शन run/3 TestSpecs में TestSpecs run/1 तरह ही run/1 , लेकिन TestSpecs में भी कोई भी टेस्ट लेता है, जिसे स्पष्ट रूप से किसी विशेष नोड नाम के साथ टैग नहीं किया जाता है, और इसे InclNodes में सूचीबद्ध नोड्स पर निष्पादित करता है। इस तरह से run/3 का उपयोग करके, किसी भी परीक्षण विनिर्देश को बड़े पैमाने पर परीक्षण वातावरण में, नोड जानकारी के साथ या बिना उपयोग किया जा सकता है।

ExclNodes परीक्षण से बाहर किए जाने वाले नोड्स की एक सूची है। यही है, किसी विशेष नोड पर चलने के लिए परीक्षण विनिर्देश में निर्दिष्ट परीक्षण निष्पादित नहीं किए जाते हैं यदि रन नोड उस समय ExclNodes में सूचीबद्ध होता है।

यदि Common Test मास्टर किसी टेस्ट स्पेसिफिकेशन या InclNodes नोड्स सूची में निर्दिष्ट किसी भी टेस्ट नोड से कनेक्ट करने में शुरू में विफल रहता है, तो ऑपरेटर को या तो फिर से शुरू करने के विकल्प के साथ प्रेरित किया जाता है (मैन्युअल रूप से प्रश्न में नोड्स की स्थिति की जांच करने के बाद), लापता नोड्स के बिना चलाने के लिए, या ऑपरेशन को निरस्त करने के लिए।

जब परीक्षण शुरू होता है, तो Common Test मास्टर इसमें शामिल नोड्स के बारे में जानकारी प्रदर्शित करता है। Common Test मास्टर भी रिपोर्ट करता है जब परीक्षण समाप्त, सफलतापूर्वक या असफल। यदि कनेक्शन नोड से खो जाता है, तो उस नोड पर परीक्षण समाप्त माना जाता है। Common Test मास्टर असफल नोड के साथ संपर्क को फिर से स्थापित करने का प्रयास नहीं करता है।

किसी भी समय, परीक्षण नोड्स की वर्तमान स्थिति प्राप्त करने के लिए, फ़ंक्शन ct_master:progress() कॉल करें।

एक या अधिक परीक्षणों को रोकने के लिए, फ़ंक्शन ct_master:abort() (सभी को रोकने के लिए) या ct_master:abort(Nodes)

Common Test मास्टर एपीआई के बारे में जानकारी के लिए, मॉड्यूल ct_master देखें।

11.3 टेस्ट विनिर्देश

Common Test मास्टर के इनपुट के रूप में उपयोग किए जाने वाले परीक्षण विनिर्देश नियमित Common Test सर्वर के इनपुट के रूप में उपयोग किए जाने वाले विनिर्देशों के साथ पूरी तरह से संगत हैं। सिंटैक्स का वर्णन Test Specifications रनिंग टेस्ट और विश्लेषण परिणामों के सेक्शन Test Specifications में किया गया है।

सभी परीक्षण विनिर्देश शर्तों में एक NodeRefs तत्व हो सकता है। यह तत्व निर्दिष्ट करता है कि कौन सा नोड या नोड एक कॉन्फ़िगरेशन ऑपरेशन या परीक्षण पर निष्पादित किया जाना है। NodeRefs को निम्नानुसार परिभाषित किया गया है:

NodeRefs = all_nodes | [NodeRef] | NodeRef

NodeRef = NodeAlias | node() | master

NodeAlias ( atom() ) का उपयोग परीक्षण विनिर्देश में नोड नाम के संदर्भ के रूप में किया जाता है (इसलिए नोड नाम को केवल एक बार घोषित करने की आवश्यकता होती है, जिसे स्थिरांक का उपयोग करके भी प्राप्त किया जा सकता है)। उपनाम को node शब्द के साथ घोषित किया गया है:

{node, NodeAlias, NodeName}

यदि NodeRefs पास NodeRefs का मान है, तो ऑपरेशन या परीक्षण सभी निर्दिष्ट परीक्षण नोड्स पर किया जाता है। ( NodeRefs तत्व के बिना एक शब्द की घोषणा का एक ही प्रभाव है)। यदि NodeRefs का मूल्य master , तो ऑपरेशन केवल Common Test मास्टर नोड (अर्थात् लॉग डायरेक्टरी सेट करें या ईवेंट हैंडलर स्थापित करें) पर किया जाता है।

सेक्शन रनिंग टेस्ट और विश्लेषण परिणामों में सेक्शन Test Specifications में उदाहरण पर विचार करें, अब नोड जानकारी के साथ विस्तारित किया गया है और इसका उद्देश्य Common Test द्वारा निष्पादित किया जाना है।

{define, 'Top', "/home/test"}.
{define, 'T1', "'Top'/t1"}.
{define, 'T2', "'Top'/t2"}.
{define, 'T3', "'Top'/t3"}.
{define, 'CfgFile', "config.cfg"}.
{define, 'Node', ct_node}.

{node, node1, '[email protected]_x'}.
{node, node2, '[email protected]_y'}.

{logdir, master, "'Top'/master_logs"}.
{logdir, "'Top'/logs"}.

{config, node1, "'T1'/'CfgFile'"}.
{config, node2, "'T2'/'CfgFile'"}.
{config, "'T3'/'CfgFile'"}.

{suites, node1, 'T1', all}.
{skip_suites, node1, 'T1', [t1B_SUITE,t1D_SUITE], "Not implemented"}.
{skip_cases, node1, 'T1', t1A_SUITE, [test3,test4], "Irrelevant"}.
{skip_cases, node1, 'T1', t1C_SUITE, [test1], "Ignore"}.

{suites, node2, 'T2', [t2B_SUITE,t2C_SUITE]}.
{cases, node2, 'T2', t2A_SUITE, [test4,test1,test7]}.

{skip_suites, 'T3', all, "Not implemented"}.

यह उदाहरण मूल उदाहरण के समान परीक्षणों को निर्दिष्ट करता है। लेकिन अब अगर ct_master:run(TestSpecName) लिए कॉल के साथ शुरू किया गया है, तो परीक्षण t1 नोड [email protected]_x (नोड [email protected]_x ) पर निष्पादित किया जाता है, परीक्षण t2 [email protected]_x (नोड [email protected]_x ) पर और परीक्षण t3 दोनों नोड [email protected]_x और नोड [email protected]_x पर करें। कॉन्फ़िगरेशन फ़ाइल t1 केवल node1 और कॉन्फ़िगरेशन फ़ाइल t2 पर केवल node2 पर पढ़ा जाता है, जबकि कॉन्फ़िगरेशन फ़ाइल t3 को node1 और node2 दोनों पर पढ़ा जाता है। दोनों परीक्षण नोड्स एक ही निर्देशिका में लॉग फाइल लिखते हैं। (हालांकि, Common Test मास्टर नोड टेस्ट नोड्स की तुलना में एक अलग लॉग डायरेक्टरी का उपयोग करता है।)

यदि ct_master:run(TestSpecName, [[email protected]_z], [[email protected]_x]) कॉल के साथ परीक्षण सत्र शुरू किया ct_master:run(TestSpecName, [[email protected]_z], [[email protected]_x]) , परिणाम यह है कि परीक्षण t1 [email protected]_x (या किसी अन्य नोड) पर नहीं चल रहा है परीक्षण t3 [email protected]_y और [email protected]_z दोनों पर चलता है।

एक अच्छी विशेषता यह है कि एक परीक्षण विनिर्देश जिसमें नोड जानकारी शामिल है, अभी भी नियमित Common Test सर्वर के इनपुट के रूप में उपयोग किया जा सकता है (जैसा कि अनुभाग Test Specifications में वर्णित है)। इसका परिणाम यह है कि किसी भी परीक्षण को उसी नाम के साथ नोड पर चलाने के लिए निर्दिष्ट किया जाता है, जैसा कि Common Test तौर पर प्रश्न में Common Test नोड होता है (आमतौर पर ct_run प्रोग्राम के साथ शुरू होने पर [email protected] ), किया जाता है। स्पष्ट नोड एसोसिएशन के बिना टेस्ट भी हमेशा किए जाते हैं, बिल्कुल।

11.4 टेस्ट लक्ष्य नोड्स का स्वचालित स्टार्टअप

प्रारंभिक कार्रवाई शुरू की जा सकती है और परीक्षण विनिर्देश शब्द init का उपयोग करके परीक्षण लक्ष्य नोड्स पर स्वचालित रूप से प्रदर्शन किया जा सकता है।

दो उपसमूह समर्थित हैं, node_start और node_start

उदाहरण:

{node, node1, [email protected]}.
{node, node2, [email protected]}.
{node, node3, [email protected]}.
{node, node4, [email protected]}.
{init, node1, [{node_start, [{callback_module, my_slave_callback}]}]}.
{init, [node2, node3], {node_start, [{username, "ct_user"}, {password, "ct_password"}]}}.
{init, node4, {eval, {module, function, []}}}.

यह परीक्षण विनिर्देश घोषित करता है कि [email protected] को उपयोगकर्ता कॉलबैक फ़ंक्शन callback_module:my_slave_callback/0 का उपयोग करके शुरू किया जाना है, और नोड्स नोड 1 [email protected] callback_module:my_slave_callback/0 और नोड 2 [email protected] को डिफ़ॉल्ट कॉलबैक मॉड्यूल ct_slave शुरू किया ct_slave । निर्दिष्ट उपयोगकर्ता नाम और पासवर्ड का उपयोग दूरस्थ होस्ट host2 पर लॉग ऑन करने के लिए किया जाता है। इसके अलावा, फ़ंक्शन module:function/0 का मूल्यांकन [email protected] पर [email protected] , और इस कॉल का परिणाम लॉग पर मुद्रित होता है।

डिफ़ॉल्ट कॉलबैक मॉड्यूल ct_slave में निम्नलिखित विशेषताएं हैं:

  • स्थानीय या दूरस्थ होस्ट्स पर Erlang लक्ष्य नोड्स शुरू करना (संचार के लिए SSH का उपयोग किया जाता है)।
  • अधिक झंडे ( erl द्वारा समर्थित किसी भी झंडे का समर्थन किया जाता है) के साथ एक एरलांग एमुलेटर शुरू करने की क्षमता।
  • आंतरिक कॉलबैक फ़ंक्शन का उपयोग करके नोड का पर्यवेक्षण शुरू किया गया। हैंगिंग नोड्स को रोकने के लिए उपयोग किया जाता है। (विन्यास।)
  • दासों द्वारा मास्टर नोड की निगरानी। यदि मास्टर नोड समाप्त हो जाता है तो एक दास नोड को रोका जा सकता है। (विन्यास।)
  • एक दास नोड शुरू होने के बाद उपयोगकर्ता कार्यों का निष्पादन। कार्य {Module, Function, Arguments} टुपल्स की सूची के रूप में निर्दिष्ट किए जा सकते हैं।
ध्यान दें

नोड के लिए node_start और node_start लिए node_start विकल्प सूची में एक निर्दिष्ट शब्द निर्दिष्ट किया जा सकता है। इस स्थिति में, नोड को पहले शुरू किया जाता है, फिर startup_functions निष्पादित किए जाते हैं, और अंत में eval साथ निर्दिष्ट फ़ंक्शन कहलाते हैं।