Erlang 21 - 8. Running Tests and Analyzing Results

8 रनिंग टेस्ट और विश्लेषण परिणाम




erlang

8 रनिंग टेस्ट और विश्लेषण परिणाम

8.1 आम टेस्ट फ्रेमवर्क का उपयोग करना

Common Test फ्रेमवर्क Common Test के लिए एक उच्च-स्तरीय ऑपरेटर इंटरफ़ेस प्रदान करता है, जो निम्न सुविधाएँ प्रदान करता है:

  • परीक्षण सूट का स्वचालित संकलन (और मदद मॉड्यूल)
  • बेहतर अवलोकन के लिए अतिरिक्त HTML पृष्ठों का निर्माण।
  • सभी उपलब्ध परीक्षणों को चलाने के लिए एकल-कमांड इंटरफ़ेस
  • सिस्टम अंडर टेस्ट (SUT) (और किसी भी अन्य चर डेटा) से संबंधित डेटा निर्दिष्ट करने वाली कॉन्फ़िगरेशन फ़ाइलों की हैंडलिंग
  • केंद्रीय नियंत्रण और कॉन्फ़िगरेशन के साथ समानांतर में कई स्वतंत्र परीक्षण सत्र चलाने के लिए मोड

8.2 टेस्ट सूट और हेल्प मॉड्यूल के स्वचालित संकलन

जब Common Test शुरू होता है, तो यह स्वचालित रूप से निर्दिष्ट परीक्षणों में शामिल किसी भी सुइट को संकलित करने का प्रयास करता है। यदि विशेष रूप से सुइट्स निर्दिष्ट हैं, तो केवल उन सुइट्स को संकलित किया जाता है। यदि कोई विशेष परीक्षण ऑब्जेक्ट डायरेक्टरी निर्दिष्ट है (इस निर्देशिका में सभी सुइट्स परीक्षण का हिस्सा हैं), तो Common Test रन फ़ंक्शन make:all/1 निर्देशिका में सुइट्स संकलित करने के लिए।

यदि संकलन एक या अधिक सुइट्स के लिए विफल हो जाता है, तो संकलन त्रुटियों को ट्टी के लिए प्रिंट किया जाता है और ऑपरेटर से पूछा जाता है कि क्या परीक्षण रन लापता सूट के बिना आगे बढ़ना है, या निरस्त किया जाए। यदि ऑपरेटर आगे बढ़ना चुनता है, तो गुम हुए सुइट्स के परीक्षण HTML लॉग में नोट किए जाते हैं। यदि Common Test संकलन की विफलता के बाद उपयोगकर्ता को संकेत देने में असमर्थ है (यदि Common Test stdin नियंत्रित नहीं करता है), तो परीक्षण रन लापता सूट के बिना स्वचालित रूप से आगे बढ़ता है। यह व्यवहार हालांकि ct_run ध्वज -abort_if_missing_suites , या ct:run_test/1 विकल्प {abort_if_missing_suites,TrueOrFalse} साथ संशोधित किया जा सकता है। यदि abort_if_missing_suites सही पर सेट true , तो परीक्षण रन तुरंत बंद हो जाता है यदि कुछ सुइट्स संकलन में विफल होते हैं।

कोई भी मदद मॉड्यूल (जो कि, नियमित रूप से एर्लांग मॉड्यूल है जिसका नाम "_SUITE" के साथ समाप्त नहीं होता है) जो एक ही परीक्षण वस्तु निर्देशिका में रहता है, जो एक सूट है, जो परीक्षण का हिस्सा है, स्वचालित रूप से संकलित है। एक परीक्षण मॉड्यूल के लिए एक सहायता मॉड्यूल गलत नहीं है (जब तक कि उसका "_SUITE" नाम न हो)। किसी विशेष परीक्षण वस्तु निर्देशिका में सभी सहायता मॉड्यूल संकलित किए जाते हैं, भले ही निर्देशिका में सभी या केवल विशेष सूट परीक्षण का हिस्सा हों।

यदि परीक्षण सूट या सहायता मॉड्यूल में परीक्षण निर्देशिका के अलावा अन्य स्थानों पर संग्रहीत शीर्ष लेख फ़ाइलें शामिल हैं, तो इन निर्देशिकाओं को ct_run साथ फ्लैग ct_run का उपयोग करके निर्दिष्ट किया जा सकता है, या विकल्प ct:run_test/1 साथ include । इसके अलावा, एक शामिल पथ को OS परिवेश चर, CT_INCLUDE_PATH साथ निर्दिष्ट किया जा सकता है।

उदाहरण (मार):

$ export CT_INCLUDE_PATH=~testuser/common_suite_files/include:~testuser/common_lib_files/include

Common Test पास में सभी निर्देशिकाएं शामिल हैं (ध्वज के साथ निर्दिष्ट / विकल्प include , या चर CT_INCLUDE_PATH , या दोनों, संकलक के लिए।

शामिल निर्देशिकाओं को परीक्षण विनिर्देशों में भी निर्दिष्ट किया जा सकता है, परीक्षण विनिर्देश देखें।

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

स्वचालित संकलन सुविधा को अक्षम करने के लिए, -no_auto_compile साथ फ्लैग -no_auto_compile , या ct:run_test/1 साथ {auto_compile,false} विकल्प का उपयोग करें। स्वचालित संकलन अक्षम होने के साथ, उपयोगकर्ता परीक्षण रन से पहले परीक्षण सूट मॉड्यूल (और किसी भी सहायता मॉड्यूल) को संकलित करने के लिए जिम्मेदार है। यदि Common Test स्टार्टअप के दौरान मॉड्यूल को स्थानीय फ़ाइल सिस्टम से लोड नहीं किया जा सकता है, तो उपयोगकर्ता को परीक्षण शुरू करने से पहले मॉड्यूल को लोड करना होगा। Common Test केवल यह प्रमाणित करता है कि निर्दिष्ट परीक्षण सूट मौजूद हैं (अर्थात, वे हैं, या लोड किए जा सकते हैं)। यह उपयोगी है, उदाहरण के लिए, यदि परीक्षण सूट को एक दूरस्थ नोड से RPC के माध्यम से बायनेरिज़ के रूप में स्थानांतरित और लोड किया जाता है।

8.3 OS कमांड लाइन से टेस्ट रन करना

ct_run प्रोग्राम का उपयोग OS कमांड लाइन से परीक्षण चलाने के लिए किया जा सकता है, उदाहरण के लिए, निम्नानुसार है:

  • ct_run -config <configfilenames> -dir <dirs>
  • ct_run -config <configfilenames> -suite <suiteswithfullpath>
  • ct_run -userconfig <callbackmodulename> <configfilenames> -suite <suiteswithfullpath>
  • ct_run -config <configfilenames> -suite <suitewithfullpath> -group <groups> -case <casenames>

उदाहरण:

$ ct_run -config $CFGS/sys1.cfg $CFGS/sys2.cfg -dir $SYS1_TEST $SYS2_TEST
$ ct_run -userconfig ct_config_xml $CFGS/sys1.xml $CFGS/sys2.xml -dir $SYS1_TEST $SYS2_TEST
$ ct_run -suite $SYS1_TEST/setup_SUITE $SYS2_TEST/config_SUITE
$ ct_run -suite $SYS1_TEST/setup_SUITE -case start stop
$ ct_run -suite $SYS1_TEST/setup_SUITE -group installation -case start stop

झंडे dir , suite और group/case को संयुक्त किया जा सकता है। उदाहरण के लिए, निर्देशिका testdir में x_SUITE और y_SUITE चलाने के लिए, निम्नानुसार है:

$ ct_run -dir ./testdir -suite x_SUITE y_SUITE

यह निम्नलिखित के रूप में एक ही प्रभाव है:

$ ct_run -suite ./testdir/x_SUITE ./testdir/y_SUITE

विवरण के लिए, Test Case Group Execution

निम्नलिखित झंडे ct_run साथ भी इस्तेमाल किए जा सकते हैं:

-help

सभी उपलब्ध प्रारंभ झंडे सूचीबद्ध करता है।

-logdir <dir>

निर्दिष्ट करता है कि HTML लॉग फाइलें कहां लिखी जानी हैं।

-label <name_of_test_run>

परीक्षण को एक ऐसे नाम से जोड़ते हैं जो ओवरव्यू HTML लॉग फाइल में प्रिंट हो जाता है।

-refresh_logs

शीर्ष-स्तरीय HTML अनुक्रमणिका फ़ाइलों को ताज़ा करता है।

-vts

वेब आधारित GUI (बाद में वर्णित) शुरू करता है।

-shell

इंटरेक्टिव शेल मोड शुरू करता है (बाद में वर्णित)।

-step [step_opts]

एर्लैंग डीबगर (बाद में वर्णित) का उपयोग करके परीक्षण मामलों के माध्यम से कदम।

-spec <testspecs>

इनपुट के रूप में परीक्षण विनिर्देश का उपयोग करता है (बाद में वर्णित)।

-allow_user_terms

एक परीक्षण विनिर्देश में उपयोगकर्ता-विशिष्ट शब्दों को अनुमति देता है (बाद में वर्णित)।

-silent_connections [conn_types]

, निर्दिष्ट कनेक्शन के लिए प्रिंटआउट को दबाने के लिए Common Test बताता है (बाद में वर्णित)।

-stylesheet <css_file>

एक उपयोगकर्ता HTML शैली पत्रक (बाद में वर्णित) को इंगित करता है।

-cover <cover_cfg_file>

कोड कवरेज टेस्ट करने के लिए ( Code Coverage Analysis देखें)।

-cover_stop <bool>

यह निर्दिष्ट करने के लिए कि परीक्षण पूरा होने के बाद cover टूल को बंद किया जाना है ( Code Coverage Analysis देखें)।

-event_handler <event_handlers>

event handlers को स्थापित करने के लिए।

-event_handler_init <event_handlers>

प्रारंभ तर्क सहित event handlers स्थापित करने के लिए।

-ct_hooks <ct_hooks>

आरंभिक तर्कों सहित Common Test Hooks स्थापित करने के लिए।

-enable_builtin_hooks <bool>

Built-in Common Test Hooks को सक्षम या अक्षम करने के लिए। डिफ़ॉल्ट true

-include

निर्दिष्ट निर्देशिकाओं (पहले वर्णित) शामिल हैं।

-no_auto_compile

स्वचालित परीक्षण सूट संकलन सुविधा (पहले वर्णित) को अक्षम करता है।

-abort_if_missing_suites

यदि कोई एक या अधिक मुकदमा संकलित करने में विफल रहता है (पहले वर्णित) तो परीक्षण रन का समर्थन करता है।

-multiply_timetraps <n>

timetrap time-out मान बढ़ाता है।

-scale_timetraps <bool>

स्वचालित timetrap time-out स्केलिंग को सक्षम करता है।

-repeat <n>

Common Test को बार-बार परीक्षण (बाद में वर्णित) दोहराता है।

-duration <time>

Common Test को समय की अवधि (बाद में वर्णित) के लिए परीक्षणों को दोहराने के लिए कहता है।

-until <stop_time>

stop_time (बाद में वर्णित) तक परीक्षणों को दोहराने के लिए Common Test बताता है।

-force_stop [skip_rest]

टाइम-आउट पर, वर्तमान परीक्षण कार्य समाप्त होने पर परीक्षण रन निरस्त कर दिया जाता है। यदि skip_rest प्रदान किया जाता है, तो वर्तमान परीक्षण कार्य में शेष परीक्षण मामलों को छोड़ दिया जाता है (बाद में वर्णित)।

-decrypt_key <key>

encrypted configuration files लिए एक डिक्रिप्शन कुंजी प्रदान करता है।

-decrypt_file <key_file>

encrypted configuration files लिए डिक्रिप्शन कुंजी वाली फ़ाइल को इंगित encrypted configuration files

-basic_html

HTML एन्हांसमेंट को स्विच करता है जो पुराने ब्राउज़र के साथ असंगत हो सकता है।

-logopts <opts>

लॉगिंग व्यवहार के संशोधन को सक्षम करता है, Log options देखें।

-verbosity <levels>

verbosity levels for printouts करता है।

-no_esc_chars

विशेष HTML वर्णों के स्वचालित भागने को अक्षम करता है। Logging chapter देखें।

ध्यान दें

Common Test उत्तीर्ण निर्देशिकाएँ या तो सापेक्ष या निरपेक्ष पथ हो सकते हैं।

ध्यान दें

Erlang रनटाइम सिस्टम (एप्लिकेशन ERTS) के किसी भी प्रारंभ झंडे को ct_run मापदंडों के रूप में भी पारित किया जा सकता है। उदाहरण के लिए, फ्लैग -pz या -pz साथ -pz कोड सर्वर खोज पथ में शामिल होने के लिए निर्देशिकाओं को पास करने में सक्षम होना उपयोगी है। यदि आपके पास परीक्षण सूटों (अलग-अलग संकलित) के लिए सामान्य सहायता- या लाइब्रेरी मॉड्यूल हैं, तो उन्हें परीक्षण सूट निर्देशिकाओं की तुलना में अन्य निर्देशिकाओं में संग्रहीत किया जाता है, ये help/lib निर्देशिकाएं अधिमानतः इस तरह से कोड पथ में जोड़ दी जाती हैं।

उदाहरण:

$ ct_run -dir ./chat_server -logdir ./chat_server/testlogs -pa $PWD/chat_server/ebin

निर्देशिका chat_server/ebin का निरपेक्ष पथ यहाँ कोड सर्वर को दिया गया है। यह आवश्यक है क्योंकि रिश्तेदार पथ कोड सर्वर द्वारा रिश्तेदार के रूप में संग्रहीत किए जाते हैं, और Common Test परीक्षण चलाने के दौरान ईआरटीएस की वर्तमान कार्यशील निर्देशिका को बदल देता है।

ct_run प्रोग्राम बंद करने से पहले निकास स्थिति सेट करता है। निम्नलिखित मान परिभाषित किए गए हैं:

  • 0 एक सफल टेस्ट्रन को इंगित करता है, जो कि असफल या ऑटो-स्केप किए गए परीक्षण मामलों के बिना है।
  • 1 इंगित करता है कि एक या एक से अधिक परीक्षण के मामले विफल हो गए हैं, या ऑटो-स्किप हो गए हैं।
  • 2 इंगित करता है कि परीक्षण निष्पादन विफल हो गया है, उदाहरण के लिए, संकलन त्रुटियों, या एक सूचना फ़ंक्शन से अवैध वापसी मूल्य।

यदि ऑटो-स्केप किए गए परीक्षण मामले निकास स्थिति को प्रभावित नहीं करते हैं। डिफ़ॉल्ट व्यवहार को प्रारंभ ध्वज का उपयोग करके बदला जा सकता है:

-exit_status ignore_config
ध्यान दें

ct_run बिना ct_run को निष्पादित करना कमांड के बराबर है: ct_run -dir ./

ct_run प्रोग्राम के बारे में अधिक जानकारी के लिए, मॉड्यूल ct_run और अनुभाग Installation

8.4 एर्लैंग शेल से या एर्लांग प्रोग्राम से रनिंग टेस्ट

Common Test रनिंग टेस्ट के लिए एर्लैंग एपीआई प्रदान करता है। परीक्षण निर्दिष्ट करने और निष्पादित करने के लिए मुख्य (और सबसे लचीला) फ़ंक्शन ct:run_test/1 । यह ct_run के समान प्रारंभ पैरामीटर लेता है, लेकिन झंडे को इसके बजाय कुंजी-मूल्य ट्यूपल्स की सूची में विकल्प के रूप में निर्दिष्ट किया जाता है। उदाहरण के लिए, ct_run साथ निर्दिष्ट एक परीक्षण इस प्रकार है:

$ ct_run -suite ./my_SUITE -logdir ./results

ct:run_test/1 साथ है ct:run_test/1 रूप में निर्दिष्ट:

1> ct:run_test([{suite,"./my_SUITE"},{logdir,"./results"}]).

फ़ंक्शन परीक्षण परिणाम देता है, जिसका प्रतिनिधित्व टपल {Ok,Failed,{UserSkipped,AutoSkipped}} , जहां प्रत्येक तत्व एक पूर्णांक होता है। यदि परीक्षण निष्पादन विफल हो जाता है, तो फ़ंक्शन टपल {error,Reason} लौटा देता है, जहाँ टर्म Reason विफलता को बताता है।

यदि फ़ंक्शन को विकल्पों की खाली सूची के साथ कहा जाता है, तो डिफ़ॉल्ट प्रारंभ विकल्प {dir,Cwd} (वर्तमान कार्यशील निर्देशिका में सभी सुइट्स को चलाने के लिए) का उपयोग किया जाता है।

एर्लैंग शेल जारी करना

ct:run_test/1 साथ शुरू किए गए परीक्षणों के निष्पादन के दौरान, ct:run_test/1 नियंत्रित करने वाली Erlang शेल प्रक्रिया, प्रक्रियाओं की Common Test प्रणाली की शीर्ष-स्तरीय प्रक्रिया बनी हुई है। नतीजतन, टेस्ट रन के दौरान इंटरलांग शेल बातचीत के लिए उपलब्ध नहीं है। यदि यह वांछनीय नहीं है, उदाहरण के लिए, क्योंकि शेल को डीबगिंग उद्देश्यों के लिए या परीक्षण निष्पादन के दौरान SUT के साथ बातचीत के लिए आवश्यक है, तो स्टार्ट विकल्प release_shell को true release_shell करें ( ct:run_test/1 के कॉल में) या संबंधित परीक्षण विनिर्देश का उपयोग करके शब्द, बाद में वर्णित)। यह Common Test सूट संकलन चरण के तुरंत बाद Common Test को खोल देता है। इसे पूरा करने के लिए, परीक्षण निष्पादन को नियंत्रित करने के लिए एक परीक्षण धावक प्रक्रिया शुरू की जाती है। इसका प्रभाव यह है कि ct:run_test/1 इस प्रक्रिया के परिणाम को परीक्षा परिणाम के बजाय वापस लौटाता है, जिसके बजाय परीक्षण रन के अंत में tty पर मुद्रित किया जाता है।

ध्यान दें

फ़ंक्शन का उपयोग करने के लिए ct:break/1,2 और ct:continue/0,1 , release_shell सेट को true सेट किया जाना चाहिए।

विवरण के लिए, ct:run_test/1 मैनुअल पेज देखें।

8.5 टेस्ट केस ग्रुप एक्जामिनेशन

ct_run ध्वज, या ct:run_test/1 विकल्प group , एक या अधिक परीक्षण केस समूह निर्दिष्ट किए जा सकते हैं, वैकल्पिक रूप से विशिष्ट परीक्षण मामलों के साथ संयोजन में। कमांड लाइन पर समूहों को निर्दिष्ट करने के लिए सिंटैक्स निम्नानुसार है:

$ ct_run -group <group_names_or_paths> [-case <cases>]

एरलैंग शेल में वाक्य रचना इस प्रकार है:

1> ct:run_test([{group,GroupsNamesOrPaths}, {case,Cases}]).

पैरामीटर group_names_or_paths एक या अधिक समूह नाम और / या एक या अधिक समूह पथ निर्दिष्ट करता है। स्टार्टअप पर, Common Test समूह परिभाषाओं के पेड़ में मेल खाने वाले समूहों की खोज करता है (अर्थात, Suite:groups/0 से लौटी सूची Suite:groups/0 ; विवरण के लिए, अनुभाग Test Case Groups

एक समूह के नाम को देखते हुए, कहते हैं कि g , Common Test g लिए जाने वाले सभी रास्तों की खोज करता है। रास्ते से मतलब है नेस्टेड समूहों का एक क्रम, जिसे शीर्ष स्तर के समूह से g तक पहुंचने के लिए पालन किया जाना चाहिए। ग्रुप g में परीक्षण मामलों को निष्पादित करने के लिए, Common Test को प्रत्येक समूह के लिए g लिए init_per_group/2 फ़ंक्शन को कॉल करना होगा, और उसके बाद सभी संबंधित end_per_group/2 फ़ंक्शन। ऐसा इसलिए है क्योंकि g (और इसके Config इनपुट डेटा) में एक परीक्षण मामले का Config init_per_testcase(TestCase, Config) और इसके वापसी मूल्य पर निर्भर करता है, जो बदले में init_per_group(g, Config) और इसके वापसी मूल्य पर निर्भर करता है, जो बदले में g ऊपर समूह के init_per_group/2 पर निर्भर करता है, और इसी तरह, सभी शीर्ष स्तर के समूह तक।

इसका मतलब यह है कि अगर एक मार्ग में एक समूह (और उसके परीक्षण मामलों) का पता लगाने के लिए एक से अधिक तरीके हैं, तो समूह खोज ऑपरेशन का परिणाम कई परीक्षण हैं, जिनमें से सभी का प्रदर्शन किया जाना है। Common Test एक समूह विनिर्देश की व्याख्या करता है जिसमें एक एकल नाम शामिल है:

"समूह परिभाषा पेड़ में सभी पथ खोजें और खोजें जो निर्दिष्ट समूह तक ले जाते हैं और, प्रत्येक पथ के लिए, एक परीक्षण बनाएं जो निम्नलिखित कार्य करता है, क्रम में:

  • निर्दिष्ट समूह के लिए पथ में सभी कॉन्फ़िगरेशन फ़ंक्शन निष्पादित करता है।
  • इस समूह में सभी, या सभी मिलान, परीक्षण मामलों को निष्पादित करता है।
  • समूह के सभी उपसमूहों में सभी, या सभी मिलान, परीक्षण मामलों को निष्पादित करता है। "

उपयोगकर्ता पैरामीटर group_names_or_paths साथ एक विशिष्ट समूह पथ निर्दिष्ट कर सकता है। इस प्रकार के विनिर्देशन के साथ अवांछित समूहों का निष्पादन (अन्यथा मिलान वाले पथों में), और / या उपसमूहों के निष्पादन से बचा जा सकता है। समूह पथ का कमांड लाइन सिंटैक्स पथ में समूह नामों की एक सूची है, उदाहरण के लिए:

$ ct_run -suite "./x_SUITE" -group [g1,g3,g4] -case tc1 tc5

एरलैंग शेल में सिंटैक्स निम्नानुसार है (समूह सूची के भीतर एक सूची की आवश्यकता है):

1> ct:run_test([{suite,"./x_SUITE"}, {group,[[g1,g3,g4]]}, {testcase,[tc1,tc5]}]).

निर्दिष्ट पथ में अंतिम समूह परीक्षण में समाप्ति समूह है, अर्थात, इस समूह का पालन करने वाले कोई उपसमूह निष्पादित नहीं किए जाते हैं। पिछले उदाहरण में, g4 समाप्ति समूह है। इसलिए, Common Test एक ऐसे परीक्षण को अंजाम देता है, जो सभी g1..g3..g4 कॉन्फ़िगरेशन फ़ंक्शंस को g4 , यानी g1..g3..g4 । यह तब g4 में परीक्षण मामलों tc1 और tc5 को कॉल करता है, और अंत में सभी end विन्यास कार्यों को g4..g3..g1 में g4..g3..g1

ध्यान दें

समूह पथ विनिर्देशन आवश्यक रूप से समाप्ति समूह के पथ में सभी समूहों को शामिल करने के लिए नहीं है। यदि एक अधूरा समूह पथ निर्दिष्ट किया जाता है तो Common Test सभी मिलान पथों की खोज करता है।

ध्यान दें

समूह के नाम और समूह पथों को पैरामीटर group_names_or_paths साथ जोड़ा जा सकता है। प्रत्येक तत्व को पैरामीटर cases साथ संयोजन में एक व्यक्तिगत विनिर्देश के रूप में माना जाता है। निम्नलिखित उदाहरण इसको दर्शाते हैं।

उदाहरण:

 -module(x_SUITE).
 ...
 %% The group definitions:      
 groups() ->
   [{top1,[],[tc11,tc12,
	      {sub11,[],[tc12,tc13]},
	      {sub12,[],[tc14,tc15,
{sub121,[],[tc12,tc16]}]}]},

    {top2,[],[{group,sub21},{group,sub22}]},
    {sub21,[],[tc21,{group,sub2X2}]},
    {sub22,[],[{group,sub221},tc21,tc22,{group,sub2X2}]},
    {sub221,[],[tc21,tc23]},
    {sub2X2,[],[tc21,tc24]}].

निम्नलिखित दो परीक्षणों को निष्पादित करता है, एक सभी मामलों के लिए और सभी उपसमूह शीर्ष 1 के तहत, और सभी शीर्ष 2 के तहत एक के लिए:

$ ct_run -suite "x_SUITE" -group all
1> ct:run_test([{suite,"x_SUITE"}, {group,all}]).

-group top1 top2 , या {group,[top1,top2]} का उपयोग करना समान परिणाम देता है।

निम्नलिखित शीर्ष 1 के तहत सभी मामलों और उपसमूहों के लिए एक परीक्षण निष्पादित करता है:

$ ct_run -suite "x_SUITE" -group top1
1> ct:run_test([{suite,"x_SUITE"}, {group,[top1]}]).

निम्नलिखित tc12 1 में top1 और किसी भी उपसमूह के तहत एक परीक्षण निष्पादित tc12 , जहां इसे पाया जा सकता है ( sub11 और sub121 ):

$ ct_run -suite "x_SUITE" -group top1 -case tc12
1> ct:run_test([{suite,"x_SUITE"}, {group,[top1]}, {testcase,[tc12]}]).

निम्नलिखित tc12 केवल समूह top1 में निष्पादित करता है:

$ ct_run -suite "x_SUITE" -group [top1] -case tc12
1> ct:run_test([{suite,"x_SUITE"}, {group,[[top1]]}, {testcase,[tc12]}]).

निम्नलिखित top1 और उसके सभी उपसमूहों को tc16 जिसके परिणामस्वरूप यह परीक्षण मामला समूह sub121 में निष्पादित sub121 :

$ ct_run -suite "x_SUITE" -group top1 -case tc16
1> ct:run_test([{suite,"x_SUITE"}, {group,[top1]}, {testcase,[tc16]}]).

विशिष्ट पथ- -group [sub121] का उपयोग करना -group [sub121] या {group,[[sub121]]} इस उदाहरण में समान परिणाम देता है।

निम्नलिखित दो परीक्षणों को निष्पादित करता है, एक सब sub12 तहत सभी मामलों और उपसमूहों को शामिल sub12 , और एक उप sub12 केवल परीक्षण मामलों के साथ:

$ ct_run -suite "x_SUITE" -group sub12 [sub12]
1> ct:run_test([{suite,"x_SUITE"}, {group,[sub12,[sub12]]}]).

निम्नलिखित उदाहरण में, Common Test दो परीक्षणों को ढूँढता है और top2 पर sub2X2 sub21 , एक तो sub2X2 से sub22 2 sub22 2 के लिए सब sub2X2 माध्यम से, और एक sub2X2 से sub22 2 sub22 2 के लिए सब sub2X2 माध्यम से:

$ ct_run -suite "x_SUITE" -group sub2X2
1> ct:run_test([{suite,"x_SUITE"}, {group,[sub2X2]}]).

निम्नलिखित उदाहरण में, अद्वितीय पथ top2 -> sub21 -> sub2X2 निर्दिष्ट करके top2 -> sub21 -> sub2X2 , केवल एक परीक्षण निष्पादित किया जाता है। दूसरा संभावित रास्ता, top2 से सब 2 sub2X2 (पूर्व उदाहरण से) को छोड़ दिया गया है:

$ ct_run -suite "x_SUITE" -group [sub21,sub2X2]
1> ct:run_test([{suite,"x_SUITE"}, {group,[[sub21,sub2X2]]}]).

समूह परिभाषा की तुलना में निम्नलिखित केवल सब sub22 लिए परीक्षण मामलों और रिवर्स ऑर्डर में निष्पादित करता है:

$ ct_run -suite "x_SUITE" -group [sub22] -case tc22 tc21
1> ct:run_test([{suite,"x_SUITE"}, {group,[[sub22]]}, {testcase,[tc22,tc21]}]).

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

$ ct_run -suite "my_SUITE" -case my_tc

या (एर्लांग खोल का उपयोग करके):

1> ct:run_test([{suite,"my_SUITE"}, {testcase,my_tc}]).

तब Common Test समूह की परिभाषा को नजरअंदाज करता है और केवल टेस्ट सूट के दायरे में परीक्षण मामले को निष्पादित करता है (कोई समूह कॉन्फ़िगरेशन फ़ंक्शन नहीं कहा जाता है)।

समूह विनिर्देश सुविधा, जैसा कि इस खंड में प्रस्तुत किया गया है, का उपयोग Test Specifications (कुछ अतिरिक्त सुविधाओं के साथ) में भी किया जा सकता है।

8.6 इंटरएक्टिव शेल मोड चलाना

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

शेल मोड उपयोगी है, उदाहरण के लिए, टेस्ट सूट के निष्पादन के दौरान SUT का विश्लेषण और डीबग करना, परीक्षण केस निष्पादन के दौरान SUT और डीबग करना और टेस्ट सूट डेवलपमेंट के दौरान विभिन्न ऑपरेशनों को आज़माना।

इंटरेक्टिव शेल मोड शुरू करने के लिए, मैन्युअल रूप से एक एरलैंग शेल शुरू करें और ct:install/1 कॉल करें ct:install/1 किसी भी कॉन्फ़िगरेशन डेटा को स्थापित ct:install/1 स्थापित करें (आपको तर्क के रूप में उपयोग करना चाहिए) अन्यथा। फिर Common Test शुरू करने के लिए ct:start_interactive/0 पर कॉल करें।

यदि आप ct_run प्रोग्राम का उपयोग करते हैं, तो आप फ़्लैग -shell और वैकल्पिक रूप से, फ़्लैग -config और / या -userconfig का उपयोग करके एक बार में -shell शेल और Common Test शुरू कर सकते हैं।

उदाहरण:

  • ct_run -shell
  • ct_run -shell -config cfg/db.cfg
  • ct_run -shell -userconfig db_login testuser x523qZ

यदि कोई कॉन्फ़िगरेशन फ़ाइल कमांड ct_run साथ निर्दिष्ट नहीं है, तो एक चेतावनी प्रदर्शित की जाती है। यदि Common Test को पहले उसी डायरेक्टरी से चलाया गया है, तो उसी कॉन्फ़िगरेशन फाइल को फिर से उपयोग किया जाता है। यदि इस निर्देशिका से पहले Common Test नहीं चलाया गया है, तो कोई कॉन्फ़िगरेशन फ़ाइलें उपलब्ध नहीं हैं।

यदि "आवश्यक कॉन्फ़िगरेशन डेटा" का उपयोग करने वाले किसी भी कार्य (उदाहरण के लिए, फ़ंक्शन ct_telnet या ct_ftp ) को ct_ftp शेल से बुलाया जाना है, तो पहले ct:require/1,2 साथ कॉन्फ़िगरेशन डेटा की ct:require/1,2 । यह Test Suite Information Function या Test Case Information Function में एक require कथन के बराबर है।

उदाहरण:

1> ct:require(unix_telnet, unix).
ok
2> ct_telnet:open(unix_telnet).
{ok,<0.105.0>}
4> ct_telnet:cmd(unix_telnet, "ls .").
{ok,["ls .","file1  ...",...]}

वह सब कुछ जो Common Test रूप से टेस्ट केस लॉग में Common Test प्रिंट करता है, निर्देशिका ct_run.<timestamp> में ctlog.html नामक लॉग के लिए संवादात्मक मोड में है ct_run.<timestamp> । इस फ़ाइल का लिंक उस निर्देशिका में last_interactive.html नाम की फ़ाइल में उपलब्ध है, जहाँ से आप ct_run निष्पादित ct_run । वर्तमान कार्य निर्देशिका की तुलना में लॉग के लिए एक अलग रूट निर्देशिका निर्दिष्ट करना समर्थित नहीं है।

यदि आप संवादात्मक मोड से बाहर निकलना चाहते हैं (उदाहरण के लिए, ct:run_test/1 ) के साथ स्वचालित परीक्षण चलाने के लिए, फ़ंक्शन ct:stop_interactive/0 कॉल करें। यह चल रहे ct एप्लिकेशन को बंद कर देता है। require के साथ बनाए गए कॉन्फ़िगरेशन नाम और डेटा के बीच संघों को परिणामस्वरूप हटा दिया जाता है। फ़ंक्शन ct:start_interactive/0 आपको इंटरैक्टिव मोड में वापस ले जाता है, लेकिन पिछली स्थिति को पुनर्स्थापित नहीं किया जाता है।

8.7 एर्लैंग डीबगर के साथ टेस्ट मामलों का चरण-दर-चरण निष्पादन

ct_run -step [opts] का उपयोग करके, या विकल्प {step,Opts} ct:run_test/1 {step,Opts} को ct:run_test/1 , निम्नलिखित संभव है:

  • Erlang डीबगर को स्वचालित रूप से प्रारंभ करें।
  • वर्तमान परीक्षण मामले की स्थिति की जांच करने के लिए इसके ग्राफिकल इंटरफ़ेस का उपयोग करें।
  • परीक्षण मामले को चरण-दर-चरण निष्पादित करें और / या निष्पादन ब्रेकप्वाइंट सेट करें।

यदि कोई अतिरिक्त विकल्प ध्वज / विकल्प step साथ निर्दिष्ट नहीं किया जाता है, तो ब्रेकप्वाइंट को उन परीक्षण मामलों पर स्वचालित रूप से सेट किया जाता है जिन्हें Common Test द्वारा निष्पादित किया जाना है, और केवल उन कार्यों को। यदि चरण विकल्प config निर्दिष्ट किया गया है, तो ब्रेकपॉइंट्स शुरू में सूट में कॉन्फ़िगरेशन फ़ंक्शन पर भी सेट होते हैं, जो कि init_per_suite/1 , end_per_suite/1 , init_per_group/2 , end_per_group/2 , init_per_testcase/2 और end_per_testcase/2

Common Test , डिबगर ऑटो-अटैच फीचर को सक्षम करता है, जिसका अर्थ है कि निष्पादित करने के लिए शुरू होने वाले हर नए व्याख्या किए गए टेस्ट केस फ़ंक्शन के लिए, एक नई ट्रेस विंडो स्वचालित रूप से पॉप अप हो जाती है (जैसा कि प्रत्येक परीक्षण केस एक समर्पित एर्लांग प्रक्रिया पर निष्पादित होता है)। जब भी कोई नया टेस्ट केस शुरू होता है, Common Test पिछले टेस्ट केस की निष्क्रिय ट्रेस विंडो को बंद करने का प्रयास करता है। हालाँकि, यदि आप निष्क्रिय ट्रेस विंडो को छोड़ने के लिए Common Test पसंद करते हैं, तो keep_inactive उपयोग करें।

चरण कार्यक्षमता का उपयोग ध्वज / विकल्प suite और suite + case/testcase साथ किया जा सकता है, लेकिन dir साथ नहीं।

8.8 टेस्ट विनिर्देशों

सामान्य विवरण

परीक्षण करने के लिए क्या निर्दिष्ट करने के लिए सबसे लचीला तरीका है, एक परीक्षण विनिर्देश का उपयोग करना है, जो एर्लांग शब्दों का एक क्रम है। आमतौर पर एक या अधिक पाठ फ़ाइलों में शब्द घोषित किए जाते हैं (देखें ct:run_test/1 ), लेकिन सूची के रूप में Common Test भी उत्तीर्ण हो सकते हैं (देखें ct:run_testspec/1 )। दो सामान्य प्रकार के शब्द हैं: कॉन्फ़िगरेशन शब्द और परीक्षण विनिर्देश शब्द।

कॉन्फ़िगरेशन शर्तों के साथ, उदाहरण के लिए, निम्न करना संभव है:

  • परीक्षण रन लेबल करें ( ct_run -label समान)।
  • परीक्षण शुरू करने से पहले किसी भी भाव का मूल्यांकन करें।
  • आयात कॉन्फ़िगरेशन डेटा ( ct_run -config/-userconfig समान)।
  • शीर्ष-स्तरीय HTML लॉग निर्देशिका ( ct_run -logdir समान) निर्दिष्ट करें।
  • कोड कवरेज विश्लेषण सक्षम करें ( ct_run -cover समान)।
  • Common Test Hooks स्थापित करें ( ct_run -ch_hooks समान)।
  • event_handler प्लगइन्स इंस्टॉल करें ( ct_run -event_handler समान)।
  • निर्दिष्ट करें कि संकलक को स्वचालित संकलन के लिए संकलक के पास भेजा जाए ( ct_run -include समान)।
  • ऑटो-संकलन सुविधा अक्षम करें ( ct_run -no_auto_compile समान)।
  • वर्बोसिटी स्तर सेट करें ( ct_run -verbosity समान)।

कॉन्फ़िगरेशन शब्दों को ct_run प्रारंभ झंडे या ct:run_test/1 विकल्पों के साथ जोड़ा जा सकता है। परिणाम, कुछ झंडे / विकल्प और शर्तों के लिए है, कि मान मर्ज किए गए हैं (उदाहरण के लिए, कॉन्फ़िगरेशन फ़ाइलें, निर्देशिका, वर्बोसिटी स्तर और मूक कनेक्शन शामिल हैं) और दूसरों के लिए जो प्रारंभ झंडे / विकल्प परीक्षण विनिर्देश शर्तों (के लिए) को ओवरराइड करते हैं उदाहरण, लॉग डायरेक्टरी, लेबल, स्टाइल शीट और ऑटो-संकलन)।

परीक्षण विनिर्देश शर्तों के साथ, यह बताना संभव है कि कौन से परीक्षण चलाने के लिए और किस क्रम में हैं। एक परीक्षण शब्द या तो एक या अधिक सुइट्स, एक या एक से अधिक टेस्ट केस समूहों (संभवतः नेस्टेड), या एक समूह में (या कई समूहों में) या एक सूट में एक या अधिक टेस्ट केस निर्दिष्ट करता है।

अनुक्रम में किसी भी परीक्षण की शर्तें घोषित की जा सकती हैं। Common Test डिफ़ॉल्ट रूप से शर्तों को एक या एक से अधिक परीक्षणों में परिणामित टेस्ट रन में संकलित करता है। एक शब्द जो परीक्षण मामलों के एक सेट को "निगल" करता है, जो केवल इन मामलों का सबसेट निर्दिष्ट करता है। उदाहरण के लिए, एक शब्द को निर्दिष्ट करने का परिणाम यह निर्दिष्ट करता है कि सूट एस में सभी मामलों को निष्पादित किया जाना है, एक और शब्द के साथ केवल टेस्ट केस एक्स और वाई को एस में निर्दिष्ट करना है, एस में सभी मामलों का एक परीक्षण है। हालांकि, एक शब्द निर्दिष्ट परीक्षण S में केस X और Y को S में टर्म Z निर्दिष्ट करने वाले शब्द के साथ मिला दिया गया है, परिणाम S में X, Y और Z का परीक्षण है। इस व्यवहार को निष्क्रिय करने के लिए, इसके बजाय क्रमिक रूप से प्रत्येक "स्क्रिप्ट में परीक्षण करें merge_tests तरह ", परीक्षण विनिर्देश में false शब्द सेट करें।

एक परीक्षण शब्द एक या अधिक परीक्षण सूट, समूह, या परीक्षण के मामलों को छोड़ देने के लिए निर्दिष्ट कर सकता है। स्केप किए गए सूट, समूह और मामलों को निष्पादित नहीं किया जाता है और HTML लॉग फ़ाइलों में SKIPPED रूप में SKIPPED

एकाधिक परीक्षण विनिर्देश फ़ाइलों का उपयोग करना

जब कई परीक्षण विनिर्देश फ़ाइलें स्टार्टअप पर निर्दिष्ट की जाती हैं (या तो ct_run -spec file1 file2 ... या ct:run_test([{spec, [File1,File2,...]}]) ), Common Test या तो एक परीक्षण चलाने पर ct:run_test([{spec, [File1,File2,...]}]) करता है प्रति विनिर्देश फ़ाइल, या फ़ाइलों को जोड़ता है और एक एकल परीक्षण रन के भीतर सभी परीक्षण करता है। पहला व्यवहार डिफ़ॉल्ट एक है। उत्तरार्द्ध के लिए यह आवश्यक है कि प्रारंभ ध्वज / विकल्प join_specs प्रदान किया जाए, उदाहरण के लिए, run_test -spec ./my_tests1.ts ./my_tests2.ts -join_specs

कई विशिष्टताओं में शामिल होना, या उन्हें अलग से चलाना, परीक्षण विनिर्देश फ़ाइल समावेशन के साथ भी पूरा किया जा सकता है (और साथ जोड़ा जा सकता है)।

परीक्षण विशिष्टता फ़ाइल समावेश

टर्म specs , एक परीक्षण विनिर्देश में अन्य विनिर्देश शामिल हो सकते हैं। एक शामिल विनिर्देश या तो स्रोत विनिर्देशन के साथ जोड़ा जा सकता है या एक अलग परीक्षण रन का उत्पादन करने के लिए उपयोग किया जाता है (जैसा कि प्रारंभ ध्वज / विकल्प join_specs ऊपर)।

उदाहरण:

%% In specification file "a.spec"
{specs, join, ["b.spec", "c.spec"]}.
{specs, separate, ["d.spec", "e.spec"]}.
%% Config and test terms follow
...

इस उदाहरण में, "b.spec" और "c.spec" फाइलों में परिभाषित परीक्षण शब्द स्रोत विनिर्देश "a.spec" (यदि कोई हो) की शर्तों के साथ जुड़े हुए हैं। विनिर्देशों "d.spec" और "e.spec" को दो अलग-अलग, और स्वतंत्र, परीक्षण रन (प्रत्येक शामिल विनिर्देशन के लिए एक) में शामिल किया गया।

विकल्प में join मतलब यह नहीं है कि परीक्षण की शर्तें विलय कर दी गई हैं, केवल यह कि सभी परीक्षण एक ही परीक्षण चलाने में निष्पादित किए जाते हैं।

शामिल विनिर्देशों सामान्य कॉन्फ़िगरेशन सेटिंग्स साझा करती हैं, जैसे कि config फ़ाइलों की सूची या निर्देशिकाएं include हैं। उन कॉन्फ़िगरेशनों के लिए जिन्हें संयुक्त नहीं किया जा सकता है, जैसे कि logdir या verbosity लिए सेटिंग्स, यह सुनिश्चित करने के लिए उपयोगकर्ता पर निर्भर है कि परीक्षण विनिर्देशों में शामिल होने पर कोई झड़प नहीं होती है। विकल्प separate साथ शामिल विनिर्देश स्रोत विनिर्देश के साथ कॉन्फ़िगरेशन सेटिंग्स साझा नहीं करते हैं। यह उपयोगी है, उदाहरण के लिए, यदि शामिल विशिष्टताओं में कॉन्फ़िगरेशन सेटिंग्स क्लैशिंग हैं, तो उन्हें शामिल करना असंभव है।

यदि {merge_tests,true} स्रोत विनिर्देश (जो कि डिफ़ॉल्ट सेटिंग है) में सेट किया गया है, तो शामिल किए गए विनिर्देशों में शर्तों को स्रोत विनिर्देश ( merge_tests के विवरण के अनुसार) के साथ विलय कर दिया जाता है।

ध्यान दें कि यह हमेशा स्रोत विनिर्देश में merge_tests सेटिंग है जो अन्य विशिष्टताओं के साथ जुड़ने पर उपयोग किया जाता है। उदाहरण के लिए, कहें कि परीक्षण TA1 और TA2 के साथ एक स्रोत विनिर्देश A में {merge_tests,false} सेट है, और इसमें एक और विनिर्देशन B शामिल है, जिसमें परीक्षण TB1 और TB2 हैं, जिसमें {merge_tests,true} सेट है। परिणाम यह है कि परीक्षण श्रृंखला TA1,TA2,merge(TB1,TB2) निष्पादित की जाती है। विपरीत merge_tests सेटिंग के परिणामस्वरूप परीक्षण श्रृंखला merge(merge(TA1,TA2),TB1,TB2)

specs शब्द का इस्तेमाल घोंसले के विनिर्देशों के लिए किया जा सकता है, अर्थात्, एक विनिर्देशन में अन्य विनिर्देश शामिल हैं, जिसमें बदले में अन्य शामिल हैं, और इसलिए नहीं

टेस्ट केस ग्रुप्स

जब एक परीक्षण केस समूह निर्दिष्ट किया जाता है, तो परिणामी परीक्षण कार्य init_per_group करता है, उसके बाद सभी परीक्षण मामलों और उपसमूहों (उनके कॉन्फ़िगरेशन फ़ंक्शन सहित), और अंत में end_per_group कार्य end_per_group । इसके अलावा, यदि किसी समूह में विशेष परीक्षण मामलों को निर्दिष्ट किया जाता है, तो init_per_group और end_per_group , समूह में प्रश्न के लिए कहा जाता है। यदि एक समूह परिभाषित किया गया है ( Suite:group/0 ) दूसरे समूह के उपसमूह के रूप में, निर्दिष्ट है (या यदि किसी उपसमूह के विशेष परीक्षण मामले हैं), तो Common Test शीर्ष-स्तरीय समूहों के लिए और उपसमूह के लिए कॉन्फ़िगरेशन फ़ंक्शन को कॉल करता है प्रश्न ( init_per_suite में परीक्षण मामलों तक init_per_suite से सभी तरह से कॉन्फ़िगरेशन डेटा पास करना संभव बनाता है)।

परीक्षण विनिर्देश नाम समूह और पथ के माध्यम से परीक्षण केस समूहों को निर्दिष्ट करने के लिए एक ही तंत्र का उपयोग करता है, जैसा कि अनुभाग Test Case Group Execution में तत्व GroupSpec के अतिरिक्त के साथ समझाया गया है।

तत्व GroupSpec समूह निष्पादन गुणों को निर्दिष्ट करना संभव बनाता है जो समूह परिभाषा (जो कि groups/0 ) को ओवरराइड करता है। उपसमूहों के लिए निष्पादन गुणों को भी ओवरराइड किया जा सकता है। यह सुविधा निष्पादन के समय समूहों के गुणों को बदलना संभव बनाती है, बिना परीक्षण सूट को संपादित किए। Suite:all/0 में group तत्वों के लिए एक ही सुविधा उपलब्ध है Suite:all/0 सूची। विवरण और उदाहरण के लिए, अनुभाग Test Case Groups

टेस्ट स्पेसिफिकेशन सिंटेक्स

टेस्ट विनिर्देशों का उपयोग एकल टेस्ट होस्ट वातावरण और वितरित Common Test वातावरण (बड़े पैमाने पर परीक्षण) दोनों में परीक्षण चलाने के लिए किया जा सकता है। टर्म init में नोड पैरामीटर केवल उत्तरार्द्ध में प्रासंगिक हैं (बड़े पैमाने पर परीक्षण में अनुभाग Test Specifications देखें)। विभिन्न शर्तों के बारे में जानकारी के लिए, उपयोगकर्ता गाइड में संबंधित अनुभाग देखें, उदाहरण के लिए, निम्नलिखित:

  • उपलब्ध प्रारंभ झंडों के अवलोकन के लिए ct_run (जैसा कि अधिकांश झंडों का संगत विन्यास शब्द है)
  • Logging (शर्तों के लिए verbosity , stylesheet , basic_html और esc_chars )
  • External Configuration Data (शर्तों के लिए config और userconfig )
  • Event Handling ( event_handler पद के लिए)
  • Common Test Hooks (शब्द ct_hooks )

कॉन्फ़िगरेशन शर्तें:

{merge_tests, Bool}.

{define, Constant, Value}.

{specs, InclSpecsOption, TestSpecs}.

{node, NodeAlias, Node}.

{init, InitOptions}.
{init, [NodeAlias], InitOptions}.

{label, Label}.
{label, NodeRefs, Label}.

{verbosity, VerbosityLevels}.
{verbosity, NodeRefs, VerbosityLevels}.

{stylesheet, CSSFile}.
{stylesheet, NodeRefs, CSSFile}.

{silent_connections, ConnTypes}.
{silent_connections, NodeRefs, ConnTypes}.

{multiply_timetraps, N}.
{multiply_timetraps, NodeRefs, N}.

{scale_timetraps, Bool}.
{scale_timetraps, NodeRefs, Bool}.

{cover, CoverSpecFile}.
{cover, NodeRefs, CoverSpecFile}.

{cover_stop, Bool}.
{cover_stop, NodeRefs, Bool}.

{include, IncludeDirs}.
{include, NodeRefs, IncludeDirs}.

{auto_compile, Bool},
{auto_compile, NodeRefs, Bool},

{abort_if_missing_suites, Bool},
{abort_if_missing_suites, NodeRefs, Bool},

{config, ConfigFiles}.
{config, ConfigDir, ConfigBaseNames}.
{config, NodeRefs, ConfigFiles}.
{config, NodeRefs, ConfigDir, ConfigBaseNames}.

{userconfig, {CallbackModule, ConfigStrings}}.
{userconfig, NodeRefs, {CallbackModule, ConfigStrings}}.

{logdir, LogDir}.                                        
{logdir, NodeRefs, LogDir}.

{logopts, LogOpts}.
{logopts, NodeRefs, LogOpts}.

{create_priv_dir, PrivDirOption}.
{create_priv_dir, NodeRefs, PrivDirOption}.

{event_handler, EventHandlers}.
{event_handler, NodeRefs, EventHandlers}.
{event_handler, EventHandlers, InitArgs}.
{event_handler, NodeRefs, EventHandlers, InitArgs}.

{ct_hooks, CTHModules}.
{ct_hooks, NodeRefs, CTHModules}.

{enable_builtin_hooks, Bool}.

{basic_html, Bool}.
{basic_html, NodeRefs, Bool}.

{esc_chars, Bool}.
{esc_chars, NodeRefs, Bool}.

{release_shell, Bool}.

परीक्षण की शर्तें:

{suites, Dir, Suites}.                                
{suites, NodeRefs, Dir, Suites}.

{groups, Dir, Suite, Groups}.
{groups, NodeRefs, Dir, Suite, Groups}.

{groups, Dir, Suite, Groups, {cases,Cases}}.
{groups, NodeRefs, Dir, Suite, Groups, {cases,Cases}}.

{cases, Dir, Suite, Cases}.                           
{cases, NodeRefs, Dir, Suite, Cases}.

{skip_suites, Dir, Suites, Comment}.
{skip_suites, NodeRefs, Dir, Suites, Comment}.

{skip_groups, Dir, Suite, GroupNames, Comment}.
{skip_groups, NodeRefs, Dir, Suite, GroupNames, Comment}.

{skip_cases, Dir, Suite, Cases, Comment}.
{skip_cases, NodeRefs, Dir, Suite, Cases, Comment}.

प्रकार:

 Bool            = true | false
 Constant        = atom()
 Value           = term()
 InclSpecsOption = join | separate
 TestSpecs       = string() | [string()]
 NodeAlias       = atom()
 Node            = node()
 NodeRef         = NodeAlias | Node | master
 NodeRefs        = all_nodes | [NodeRef] | NodeRef
 InitOptions     = term()
 Label           = atom() | string()
 VerbosityLevels = integer() | [{Category,integer()}]
 Category        = atom()
 CSSFile         = string()
 ConnTypes       = all | [atom()]
 N               = integer()
 CoverSpecFile   = string()
 IncludeDirs     = string() | [string()]
 ConfigFiles     = string() | [string()]
 ConfigDir       = string()
 ConfigBaseNames = string() | [string()]
 CallbackModule  = atom()
 ConfigStrings   = string() | [string()]
 LogDir          = string()
 LogOpts         = [term()]
 PrivDirOption   = auto_per_run | auto_per_tc | manual_per_tc
 EventHandlers   = atom() | [atom()]
 InitArgs        = [term()]
 CTHModules      = [CTHModule |
{CTHModule, CTHInitArgs} |
{CTHModule, CTHInitArgs, CTHPriority}]
 CTHModule       = atom()
 CTHInitArgs     = term()
 Dir             = string()
 Suites          = atom() | [atom()] | all
 Suite           = atom()
 Groups          = GroupPath | [GroupPath] | GroupSpec | [GroupSpec] | all
 GroupPath       = [GroupName]
 GroupSpec       = GroupName | {GroupName,Properties} | {GroupName,Properties,GroupSpec}
 GroupName       = atom()
 GroupNames      = GroupName | [GroupName]
 Cases           = atom() | [atom()] | all
 Comment         = string() | ""

के बीच अंतर config उपरोक्त शर्तों के साथ वह यह है कि ConfigDir , ConfigBaseNames आधार नामों की सूची, कि है, निर्देशिका पथ के बिना है। ConfigFiles पथ सहित पूर्ण नाम होना चाहिए। उदाहरण के लिए, निम्नलिखित दो शब्दों का एक ही अर्थ है:

{config, ["/home/testuser/tests/config/nodeA.cfg",
          "/home/testuser/tests/config/nodeB.cfg"]}.

{config, "/home/testuser/tests/config", ["nodeA.cfg","nodeB.cfg"]}.
ध्यान दें

परीक्षण विनिर्देश में निर्दिष्ट कोई भी रिश्तेदार पथ, परीक्षण विनिर्देश फ़ाइल युक्त निर्देशिका के सापेक्ष हैं ct_run -spec TestSpecFile ... या यदि ct:run:test([{spec,TestSpecFile},...]) परीक्षण निष्पादित करता है।

ct:run:testspec(TestSpec) परीक्षण निष्पादित करने पर पथ शीर्ष-स्तरीय लॉग निर्देशिका के सापेक्ष है ।

स्थिरांक

अवधि define एक निरंतर उस नाम को बदलने के लिए प्रयोग किया जाता है का परिचय Constant के साथ Value जहाँ भी यह परीक्षण विनिर्देश में पाया जाता है,। यह प्रतिस्थापन परीक्षण विनिर्देश के माध्यम से एक प्रारंभिक पुनरावृत्ति के दौरान होता है। परीक्षण विनिर्देश में कहीं भी स्थिरांक का उपयोग किया जा सकता है, उदाहरण के लिए, किसी सूची और टुपल्स में, और यहां तक ​​कि तार में और अन्य स्थिर परिभाषाओं के मूल्य भाग के अंदर। एक स्थिरांक भी नोड नाम का हिस्सा हो सकता है, लेकिन यह एकमात्र स्थान है जहां एक निरंतर एक परमाणु का हिस्सा हो सकता है।

ध्यान दें

पठनीयता के लिए, निरंतर का नाम हमेशा एक अपरकेस अक्षर, या एक से आरंभ होने चाहिए $ , ? या _ । इसका मतलब यह है कि इसे हमेशा एकल उद्धृत किया जाना चाहिए (जैसा कि स्थिर नाम एक परमाणु है, पाठ नहीं)।

स्थिरांक का मुख्य लाभ यह है कि उन्हें लंबे तार के आकार को कम करने (और पुनरावृत्ति से बचने के लिए) का उपयोग किया जा सकता है, जैसे कि हैकिंग डिस्क।

उदाहरण:

%% 1a. no constant
{config, "/home/testuser/tests/config", ["nodeA.cfg","nodeB.cfg"]}.
{suites, "/home/testuser/tests/suites", all}.

%% 1b. with constant
{define, 'TESTDIR', "/home/testuser/tests"}.
{config, "'TESTDIR'/config", ["nodeA.cfg","nodeB.cfg"]}.
{suites, "'TESTDIR'/suites", all}.

%% 2a. no constants
{config, [[email protected], [email protected]], "../config", ["nodeA.cfg","nodeB.cfg"]}.
{suites, [[email protected], [email protected]], "../suites", [x_SUITE, y_SUITE]}.

%% 2b. with constants
{define, 'NODE', testnode}.
{define, 'NODES', ['NODE'@host1, 'NODE'@host2]}.
{config, 'NODES', "../config", ["nodeA.cfg","nodeB.cfg"]}.
{suites, 'NODES', "../suites", [x_SUITE, y_SUITE]}.

निरर्थक के alias पिछले संस्करणों में Common Test , परीक्षण विनिर्देश शब्द बनाते हैं । यह शब्द पदावनत है लेकिन आगामी Common Test रिलीज में समर्थित है । alias शर्तों के साथ बदलने define पर जोरदार सिफारिश की जाती है। इस तरह के प्रतिस्थापन का एक उदाहरण इस प्रकार है:

%% using the old alias term
{config, "/home/testuser/tests/config/nodeA.cfg"}.
{alias, suite_dir, "/home/testuser/tests/suites"}.
{groups, suite_dir, x_SUITE, group1}.

%% replacing with constants
{define, 'TestDir', "/home/testuser/tests"}.
{define, 'CfgDir', "'TestDir'/config"}.
{define, 'SuiteDir', "'TestDir'/suites"}.
{config, 'CfgDir', "nodeA.cfg"}.
{groups, 'SuiteDir', x_SUITE, group1}.

स्थिरांक अच्छी तरह से node भी शब्द बदल सकते हैं, लेकिन यह अभी भी एक घोषणात्मक मूल्य है, मुख्य रूप से जब NodeRefs == all_nodes (देखें Types ) के साथ संयोजन में उपयोग किया जाता है ।

उदाहरण

यहाँ एक साधारण परीक्षण विनिर्देश उदाहरण दिया गया है:

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

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

{config, ["'T1'/'CfgFile'", "'T2'/'CfgFile'", "'T3'/'CfgFile'"]}.

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

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

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

उदाहरण निम्नलिखित निर्दिष्ट करता है:

  • निर्दिष्ट logdir निर्देशिका का उपयोग एचटीएमएल लॉग फ़ाइलों (नोड नाम, तिथि और समय के साथ टैग की गई उप-श्रेणियों) के भंडारण के लिए किया जाता है।
  • परीक्षण के लिए निर्दिष्ट परीक्षण सिस्टम कॉन्फ़िगरेशन फ़ाइलों में चर आयात किए जाते हैं।
  • चलाने के लिए पहले परीक्षण में सिस्टम के लिए सभी सुइट शामिल हैं t1 । सूट t1B और t1D परीक्षण से बाहर रखा गया है। टेस्ट मामलों test3 और test4 में t1A और test1 में मामला t1C भी परीक्षण से बाहर रखा गया।
  • चलाने के लिए दूसरी परीक्षा प्रणाली के लिए है t2 । शामिल सुइट्स t2B और हैं t2C । टेस्ट केस test4 , test1 और test7 सुइट t2A में भी शामिल हैं। परीक्षण मामलों को निर्दिष्ट क्रम में निष्पादित किया जाता है।
  • चलाने के लिए अंतिम परीक्षा प्रणाली के लिए है t3 । यहां, सभी सुइट्स को छोड़ दिया गया है और यह लॉग फ़ाइलों में स्पष्ट रूप से नोट किया गया है।

Init शब्द

शब्द के साथ init परीक्षण विनिर्देश में परिभाषित नोड्स के लिए आरंभीकरण विकल्प निर्दिष्ट करना संभव है। नोड शुरू करने और नोड पर किसी भी फ़ंक्शन का मूल्यांकन करने के लिए विकल्प हैं। विवरण के लिए, Automatic Startup of Test Target Nodes बड़े पैमाने पर परीक्षण के लिए सामान्य परीक्षण का उपयोग करके अनुभाग में अनुभाग देखें ।

उपयोगकर्ता-विशिष्ट शर्तें

उपयोगकर्ता एक परीक्षण विनिर्देश प्रदान कर सकता है (जिसमें Common Test ) अपरिचित शब्दों के लिए (सहित )। यदि यह वांछित है, -allow_user_terms तो परीक्षण शुरू करते समय ध्वज का उपयोग करें ct_run । यह Common Test अपरिचित शब्दों को अनदेखा करने के लिए मजबूर करता है। इस मोड में, Common Test त्रुटियों के लिए विनिर्देश को कुशलतापूर्वक जांचने में सक्षम नहीं है जैसे कि डिफ़ॉल्ट मोड में स्कैनर चलता है। यदि ct:run_test/1 परीक्षण शुरू करने के लिए उपयोग किया जाता है, तो रिलैक्स स्कैनर मोड टपल द्वारा सक्षम है {allow_user_terms,true}

पढ़ना परीक्षण विशिष्टता शर्तें

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

उदाहरण के लिए, परीक्षण विनिर्देश में:

...
{label, my_server_smoke_test}.
{config, "../../my_server_setup.cfg"}.
{config, "../../my_server_interface.cfg"}.
...

और, उदाहरण के लिए, एक परीक्षण सूट या एक Common Test Hook समारोह:

 ...
 [{label,[{_Node,TestType}]}, {config,CfgFiles}] =
     ct:get_testspec_terms([label,config]),

 [verify_my_server_cfg(TestType, CfgFile) || {Node,CfgFile} <- CfgFiles,
Node == node()];
 ...

8.9 वेब आधारित जीयूआई से टेस्ट चलाना

वेब-आधारित GUI, वर्चुअल टेस्ट सर्वर (VTS), ct_run प्रोग्राम के साथ शुरू किया गया है। GUI से, आप कॉन्फ़िगरेशन फ़ाइलों को लोड कर सकते हैं और निर्देशिकाओं, सुइट्स और चलाने के लिए मामलों का चयन कर सकते हैं। आप वेब-आधारित GUI शुरू करते समय कमांड लाइन पर कॉन्फ़िगरेशन फ़ाइलों, निर्देशिकाओं, सुइट्स और मामलों को भी बता सकते हैं।

उदाहरण:

  • ct_run -vts
  • ct_run -vts -config <configfilename>
  • ct_run -vts -config <configfilename> -suite <suitewithfullpath> -case <casename>

जीयूआई से आप परीक्षण चला सकते हैं और परिणाम और लॉग देख सकते हैं।

ct_run -vts Common Test एक मौजूदा वेब ब्राउज़र विंडो में स्टार्ट पेज खोलने की कोशिश करता है , या अगर यह नहीं चल रहा है तो ब्राउजर को शुरू करें। कौन सा ब्राउज़र शुरू करना है यह ब्राउजर स्टार्ट कमांड विकल्प के साथ निर्दिष्ट किया जा सकता है:

ct_run -vts -browser <browser_start_cmd>

उदाहरण:

$ ct_run -vts -browser 'firefox&'

ध्यान दें

ब्राउज़र को एक अलग ओएस प्रक्रिया के रूप में चलना चाहिए, अन्यथा वीटीएस लटका हुआ है।

यदि कोई विशिष्ट ब्राउज़र स्टार्ट कमांड निर्दिष्ट नहीं है, तो फ़ायरफ़ॉक्स यूनिक्स प्लेटफार्मों पर डिफ़ॉल्ट ब्राउज़र और विंडोज पर इंटरनेट एक्सप्लोरर है। यदि Common Test स्वचालित रूप से एक ब्राउज़र शुरू करने में विफल रहता है, या ( none जैसे) के लिए मान के रूप में निर्दिष्ट किया गया -browser है, तो -browser none अपना पसंदीदा ब्राउज़र मैन्युअल रूप से शुरू करें और Common Test शेल में प्रदर्शित होने वाले URL को टाइप करें ।

8.10 लॉग फाइलें

जैसे ही परीक्षण के निष्पादन की प्रक्रिया आगे बढ़ती है, घटनाओं को निम्नलिखित चार अलग-अलग तरीकों से लॉग इन किया जाता है:

  • ऑपरेटर कंसोल को टेक्स्ट।
  • सुइट से संबंधित जानकारी प्रमुख लॉग फ़ाइल को भेजी जाती है।
  • केस-संबंधी जानकारी नाबालिग लॉग फ़ाइल को भेजी जाती है।
  • HTML अवलोकन लॉग फ़ाइल को परीक्षण परिणामों के साथ अपडेट किया गया है।
  • एक निश्चित निर्देशिका से निष्पादित सभी रनों का लिंक नामांकित लॉग में लिखा गया है all_runs.html और सभी परीक्षणों के प्रत्यक्ष लिंक (नवीनतम परिणाम) शीर्ष-स्तर पर लिखे गए हैं index.html

आमतौर पर ऑपरेटर, संभवतः सैकड़ों या हजारों परीक्षण मामलों को चला रहा है, विशिष्ट परीक्षण मामलों के बारे में या प्रिंटआउट के विवरण के साथ कंसोल को भरना नहीं चाहता है। डिफ़ॉल्ट रूप से, ऑपरेटर केवल निम्नलिखित देखता है:

  • एक पुष्टिकरण कि परीक्षण शुरू हो गया है और कुल कितने परीक्षण मामलों को निष्पादित किया जाता है के बारे में जानकारी।
  • प्रत्येक असफल परीक्षण मामले के बारे में एक छोटा सा नोट।
  • सभी रन टेस्ट मामलों का सारांश।
  • परीक्षण रन पूरा होने पर एक पुष्टिकरण।
  • कुछ विशेष जानकारी, जैसे त्रुटि रिपोर्ट, प्रगति रिपोर्ट, और प्रिंटआउट के साथ erlang:display/1 , या io:format/3 विशेष रूप से इसके अलावा किसी रिसीवर को संबोधित किया जाता है standard_io (उदाहरण के लिए, डिफ़ॉल्ट समूह लीडर प्रक्रिया user )।

सामान्य परिणामों में गहराई से खुदाई करने के लिए, या एक विशिष्ट परीक्षण मामले के परिणाम के लिए, ऑपरेटर HTML प्रस्तुति में लिंक का पालन करके ऐसा कर सकता है और प्रमुख या छोटी लॉग फ़ाइलों को पढ़ सकता है। "All_runs.html" पृष्ठ एक अच्छा प्रारंभिक बिंदु है। यह logdir एक त्वरित अवलोकन (दिनांक और समय के साथ नोड नाम, परीक्षण की संख्या, परीक्षण नाम और परीक्षण परिणाम योग) सहित प्रत्येक परीक्षण चलाने के लिए एक लिंक में स्थित है ।

एक "index.html" पृष्ठ प्रत्येक परीक्षण रन के लिए लिखा गया है (जो ct_run नोड नाम, दिनांक और समय के साथ टैग की गई निर्देशिका में संग्रहीत है )। यह फ़ाइल एक ही टेस्ट रन में किए गए सभी व्यक्तिगत परीक्षणों का अवलोकन प्रदान करती है। परीक्षण नाम निम्नलिखित सम्मेलन का अनुसरण करते हैं:

  • TopLevelDir.TestDir ( TestDir निष्पादित सभी सूट )
  • TopLevelDir.TestDir:suites (विशिष्ट मुकदमा निष्पादित)
  • TopLevelDir.TestDir.Suite (सभी मामलों में Suite निष्पादित)
  • TopLevelDir.TestDir.Suite:cases (विशिष्ट परीक्षण मामलों का निष्पादन)
  • TopLevelDir.TestDir.Suite.Case (केवल Case निष्पादित)

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

"टेस्ट रन इंडेक्स" पृष्ठ इंगित करता है कि क्या किसी परीक्षण में मिसिंग सुइट्स (यानी, ऐसे सुइट्स जो Common Test संकलन में विफल रहे)। लापता सुइट्स के नाम Common Test फ्रेमवर्क लॉग फ़ाइल में पाए जा सकते हैं ।

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

छोटी लॉग फ़ाइलों में प्रत्येक एकल परीक्षण मामले का पूरा विवरण होता है, प्रत्येक एक अलग फ़ाइल में। इस तरह, पिछले परिणामों की तुलना में नवीनतम परिणामों की तुलना करना सीधा है, भले ही परीक्षण मामलों का सेट बदल जाए। यदि एप्लिकेशन SASL चल रहा है, तो इसके लॉग भी वर्तमान छोटी लॉग फ़ाइल द्वारा मुद्रित किए जाते हैं cth_log_redirect built-in hook

परीक्षण मामले के निष्पादन के दौरान मामूली लॉग फ़ाइल का पूर्ण नाम (अर्थात, पूर्ण निर्देशिका पथ सहित फ़ाइल का नाम) पढ़ा जा सकता है। यह टपल में मूल्य के रूप में आता है {tc_logfile,LogFileName} में Config (जिसका अर्थ है यह भी एक पूर्व या डाक द्वारा पढ़ा जा सकता है सूची Common Test Hook समारोह)। इसके अलावा, एक परीक्षण मामले की शुरुआत में, यह डेटा किसी भी इंस्टॉल किए गए इवेंट हैंडलर को इवेंट के साथ भेजा जाता है। विवरण के लिए, अनुभाग देखें Event Handling

लॉग फ़ाइलों को एक परीक्षण चलाने के दौरान लगातार लिखा जाता है और एक परीक्षा शुरू होने पर लिंक हमेशा शुरू में बनाए जाते हैं। इसलिए HTML ब्राउज़र में पृष्ठों को रीफ्रेश करके प्रगति की सबसे अधिक प्रगति की जा सकती है। सांख्यिकी योग तब तक प्रस्तुत नहीं किए जाते हैं जब तक कि एक परीक्षण पूरा न हो जाए।

लॉग विकल्प

प्रारंभ ध्वज logopts विकल्पों के साथ जो लॉगिंग व्यवहार के कुछ पहलुओं को संशोधित करता है, निर्दिष्ट किया जा सकता है। निम्न विकल्प उपलब्ध हैं:

no_src

परीक्षण सूट स्रोत कोड का HTML संस्करण परीक्षण रन के दौरान उत्पन्न नहीं होता है (और परिणामस्वरूप लॉग फ़ाइल सिस्टम में उपलब्ध नहीं है)।

no_nl

Common Test (\n) आउटपुट स्ट्रिंग के अंत में एक नई लाइन वर्ण नहीं जोड़ता है जो इसे कॉल से प्राप्त करता है, उदाहरण के लिए io:format/2 , और जो इसे परीक्षण केस लॉग में प्रिंट करता है।

उदाहरण के लिए, यदि एक परीक्षण के साथ शुरू किया गया है:

$ ct_run -suite my_SUITE -logopts no_src

तब क्रमिक कॉल द्वारा किए गए परीक्षण के दौरान प्रिंटआउट io:format("x") , परीक्षण मामले में लॉग इन के रूप में प्रकट होता है:

xxx

प्रत्येक के बजाय x एक नई लाइन पर मुद्रित किया जाता है, जो कि डिफ़ॉल्ट व्यवहार है।

HTML तालिका स्तंभों को क्रमबद्ध करना

किसी भी तालिका के कॉलम हेडर में नाम पर क्लिक करके (उदाहरण के लिए, "ओके", "केस", "टाइम", और इसी तरह), टेबल की पंक्तियों को क्रमबद्ध किया जाता है, जो कुछ भी क्रम में मूल्य के प्रकार के लिए समझ में आता है , "ओके" या "टाइम" के लिए संख्यात्मक और "केस" के लिए वर्णानुक्रम में)। सॉर्टिंग जावास्क्रिप्ट कोड के माध्यम से किया जाता है, स्वचालित रूप से HTML लॉग फ़ाइलों में डाला जाता है। इस कार्यान्वयन के लिए अनुकूलित छँटाई कार्यों के साथ पुस्तकालय और प्लगइन Common Test का उपयोग करता है । jQuery tablesorter

अनपेक्षित I / O लॉग

परीक्षण सुइट अवलोकन पृष्ठ में अनपेक्षित I / O लॉग का लिंक शामिल है। इस लॉग में, और , साथ ही कैप्चर की गई सिस्टम एरर- और प्रोग्रेस रिपोर्ट्स के Common Test प्रिंटआउट को सेव करता है, जो कि विशेष टेस्ट केसों से जुड़ा नहीं हो सकता है और इसलिए व्यक्तिगत टेस्ट केस लॉग फाइल में नहीं लिखा जा सकता है। यह तब होता है, उदाहरण के लिए, यदि लॉग प्रिंटआउट बाहरी प्रक्रिया (परीक्षण मामले की प्रक्रिया नहीं) से बना है, या यदि कोई त्रुटि- या प्रगति रिपोर्ट आती है, तो एक छोटे अंतराल के दौरान एक परीक्षण मामले या कॉन्फ़िगरेशन फ़ंक्शन को निष्पादित नहीं कर रहा है, या , जबकि वर्तमान में एक समानांतर परीक्षण का मामला समूह को क्रियान्वित कर रहा है। ct:log/1,2,3,4,5 ct:pal/1,2,3,4,5 Common Test Common Test

प्री- और पोस्ट टेस्ट I / O लॉग

Common Test फ्रेमवर्क लॉग पेज पूर्व और बाद टेस्ट आई / ओ लॉग करने के लिए लिंक शामिल हैं। इस लॉग में, और Common Test साथ ही कैप्चर किए गए सिस्टम एरर- और प्रोग्रेस रिपोर्ट के प्रिंटआउट को सेव करता है, जो पहले और बाद में टेस्ट रन होते हैं। इसके उदाहरण सीटी हुक इनिट- या टर्मिनेट फंक्शन से प्रिंटआउट हैं, या जब ओटीपी एप्लिकेशन को सीटी हुक इनिट फ़ंक्शन से शुरू किया जाता है, तो प्रगति रिपोर्ट उत्पन्न होती है। एक अन्य उदाहरण एक त्रुटि रिपोर्ट है जो एक विफलता के कारण उत्पन्न होती है जब एक बाहरी अनुप्रयोग को सीटी हुक समाप्ति समारोह से रोक दिया जाता है। इन उदाहरणों में सभी जानकारी प्री- और पोस्ट टेस्ट I / O लॉग में समाप्त होती है। बाहरी उपयोगकर्ता अनुप्रयोगों के साथ परीक्षण रन को सिंक्रनाइज़ करने के तरीके के बारे में अधिक जानकारी के लिए, अनुभाग सामान्य परीक्षण हुक में अनुभाग देखें । ct:log/1,2,3,4,5 ct:pal/1,2,3,4,5 Synchronizing

ध्यान दें

फ़ाइल के साथ लॉगिंग ct:log/1,2,3,4,5 या ct:pal/1,2,3,4,5 केवल तभी काम करता है जब Common Test चल रहा हो। ct:pal/1,2,3,4,5 हालाँकि प्रिंटआउट हमेशा स्क्रीन पर प्रदर्शित होते हैं।

पुरानी लॉग हटाएं

Common Test पुराने लॉग को स्वचालित रूप से हटा सकते हैं। यह keep_logs विकल्प के साथ निर्दिष्ट है । इस विकल्प के लिए डिफ़ॉल्ट मान है all , जिसका अर्थ है कि कोई लॉग हटाया नहीं गया है। यदि मान पूर्णांक पर सेट है, तो N , नवीनतम को छोड़कर, Common Test सभी ct_run.<timestamp> निर्देशिकाओं को हटा देता है N

8.11 HTML स्टाइल शीट्स

Common Test परीक्षण रन के दौरान उत्पन्न HTML लॉग फ़ाइलों के रूप को नियंत्रित करने के लिए एक HTML स्टाइल शीट (CSS फ़ाइल) का उपयोग करता है। यदि लॉग फ़ाइलें आपकी पसंद के ब्राउज़र में सही ढंग से प्रदर्शित नहीं होती हैं, या आप Common Test लॉग्स को और अधिक आदिम ("पूर्व v1.6") पसंद करते हैं , तो प्रारंभ ध्वज / विकल्प का उपयोग करें:

basic_html

यह स्टाइल शीट और जावा स्क्रिप्ट्स (देखें Sorting HTML Table Columns ) के उपयोग को अक्षम करता है ।

Common Test प्रिंटआउट को कस्टमाइज़ करने के लिए उपयोगकर्ता HTML स्टाइल शीट की अनुमति देने के लिए एक वैकल्पिक सुविधा शामिल है । ct एक परीक्षण केस HTML लॉग फ़ाइल ( log/3,4,5 और pal/3,4,5 ) के लिए उस प्रिंट में कार्य Category पहले तर्क के रूप में स्वीकार करते हैं । इस तर्क के साथ एक श्रेणी निर्दिष्ट की जा सकती है जिसे div सीएसएस नियम-सेट में नामित चयनकर्ता को मैप किया जा सकता है । यह विशेष रूप से प्रिंटआउट के प्रकार (या कारण) के आधार पर पाठ को अलग-अलग रंग देने के लिए उपयोगी है। कहते हैं कि आप परीक्षण प्रणाली विन्यास जानकारी के लिए एक विशेष पृष्ठभूमि रंग चाहते हैं, परीक्षण प्रणाली राज्य सूचना के लिए एक अलग है, और अंत में परीक्षण प्रणाली कार्यों द्वारा पाई गई त्रुटियों के लिए। संबंधित शैली पत्रक निम्नानुसार देख सकते हैं:

div.sys_config  { background:blue }
div.sys_state   { background:yellow }
div.error       { background:red }

कॉमन टेस्ट पाठ को नामित तत्व के तहत नेस्टेड तत्व से ct:log/3,4,5 या ct:pal/3,4,5 अंदर प्रिंट करता है । चूंकि चयनकर्ता के पास विशेषताओं के लिए एक पूर्वनिर्धारित सीएसएस नियम (फाइल में ) है , और , यदि उपयोगकर्ता किसी भी पूर्वनिर्धारित विशेषता सेटिंग्स को बदलना चाहता है, तो उपयोगकर्ता स्टाइलशीट के लिए एक नया नियम जोड़ा जाना चाहिए। pre div pre ct_default.css color font-family font-size pre उदाहरण:

div.error pre { color:white }

यहां, div.error प्रिंटआउट के लिए डिफ़ॉल्ट काले के बजाय सफेद पाठ का उपयोग किया जाता है (और इसके लिए कोई अन्य विशेषता सेटिंग्स pre प्रभावित नहीं होती हैं)।

CSS फ़ाइल ( Common Test HTML कोड में परिभाषा को बताता है) स्थापित करने के लिए , निष्पादित करते समय फ़ाइल नाम प्रदान किया जा सकता है ct_run

उदाहरण:

$ ct_run -dir $TEST/prog -stylesheet $TEST/styles/test_categories.css

फ्लैग के साथ स्थापित सीएसएस फ़ाइल में श्रेणियाँ -stylesheet इस अर्थ में वैश्विक परीक्षण स्तर पर हैं कि उनका उपयोग किसी भी सूट में किया जा सकता है जो परीक्षण रन का हिस्सा है।

शैली की चादरें एक सूट और प्रति परीक्षण के आधार पर भी स्थापित की जा सकती हैं।

उदाहरण:

-module(my_SUITE).
...
suite() -> [..., {stylesheet,"suite_categories.css"}, ...].
...
my_testcase(_) ->
    ...
    ct:log(sys_config, "Test node version: ~p", [VersionInfo]),
    ...
    ct:log(sys_state, "Connections: ~p", [ConnectionInfo]),
    ...
    ct:pal(error, "Error ~p detected! Info: ~p", [SomeFault,ErrorInfo]),
    ct:fail(SomeFault).

यदि इस उदाहरण के रूप में स्टाइल शीट स्थापित की गई है, तो श्रेणियां विचाराधीन सुइट के लिए निजी हैं। वे सूट में सभी परीक्षण मामलों द्वारा उपयोग किया जा सकता है, लेकिन अन्य सुइट्स द्वारा उपयोग नहीं किया जा सकता है। एक सूट निजी स्टाइल शीट, यदि निर्दिष्ट किया गया है, एक वैश्विक स्टाइल शीट (ध्वज के साथ निर्दिष्ट -stylesheet ) के पक्ष में उपयोग किया जाता है । एक स्टाइलशीट टपल (जैसा कि suite/0 ऊपर दिया गया है) भी एक टेस्ट केस इंफॉर्मेशन फंक्शन से वापस आ सकता है। इस मामले में शैली पत्रक में निर्दिष्ट श्रेणियां केवल उस विशेष परीक्षण मामले में उपयोग की जा सकती हैं। एक टेस्ट केस प्राइवेट स्टाइल शीट का उपयोग सूट या वैश्विक स्तर की स्टाइल शीट के पक्ष में किया जाता है।

टुपल में {stylesheet,CSSFile} , यदि CSSFile एक पथ के साथ निर्दिष्ट किया गया है, उदाहरण के लिए "$TEST/styles/categories.css" , इस पूर्ण नाम का उपयोग फ़ाइल का पता लगाने के लिए किया जाता है। हालाँकि, यदि केवल फ़ाइल नाम निर्दिष्ट किया गया है, उदाहरण के लिए, categories.css सीएसएस फ़ाइल को data_dir सुइट के डेटा निर्देशिका में स्थित माना जाता है । बाद के उपयोग की सिफारिश की जाती है, क्योंकि यह सुइट में हार्ड कोडिंग पथ नामों की तुलना में पोर्टेबल है।

Category पिछले उदाहरण में तर्क में मूल्य (परमाणु) sys_config (नीली पृष्ठभूमि), sys_state (पीली पृष्ठभूमि) या error (सफेद पृष्ठभूमि पर सफेद पाठ) हो सकता है।

8.12 रिपीट टेस्ट

आपके द्वारा Common Test निर्दिष्ट परीक्षणों को दोहराने का आदेश दे सकते हैं। आप कई बार परीक्षणों को दोहराने के लिए चुन सकते हैं, एक विशेष समय के लिए बार-बार परीक्षण दोहरा सकते हैं, या किसी विशेष स्टॉप समय तक परीक्षण दोहरा सकते हैं। यदि पुनरावृत्ति को समय से नियंत्रित किया जाता है, तो Common Test टाइम-आउट लेने की कार्रवाई निर्दिष्ट की जा सकती है। या तो Common Test वर्तमान में चलने से पहले सभी परीक्षण करता है, या वर्तमान परीक्षण कार्य समाप्त होने पर रुक जाता है। पुनरावृत्ति ct_run को ct:run:test/1 विकल्प सूची तर्क में झंडे, या ट्यूपल्स द्वारा सक्रिय किया जा सकता है। झंडे (कोष्ठक में विकल्प) निम्नलिखित हैं:

  • -repeat N ({repeat,N}) , जहां N एक सकारात्मक पूर्णांक है
  • -duration DurTime ({duration,DurTime}) , जहां DurTime अवधि है
  • -until StopTime ({until,StopTime}) , जहां StopTime समय समाप्त होता है
  • -force_stop ({force_stop,true})
  • -force_stop skip_rest ({force_stop,skip_rest})
DurTime

अवधि का समय HHMMSS , उदाहरण के लिए, -duration 012030 या के रूप में निर्दिष्ट किया गया है {duration,"012030"}

, जिसका मतलब है कि परीक्षणों को निष्पादित किया जाता है और (यदि समय अनुमति देता है) 1 घंटे, 20 मिनट और 30 सेकंड के बाद टाइम-आउट होने तक दोहराया जाता है।
StopTime

फ़िनिश समय के रूप में निर्दिष्ट किया जा सकता है HHMMSS और फिर आज (या संभवतः कल) के रूप में व्याख्या की जाती है, लेकिन YYMoMoDDHHMMSS उदाहरण के लिए, -until 071001120000 या के रूप में भी निर्दिष्ट किया जा सकता है {until,"071001120000"} । इसका मतलब यह है कि परीक्षणों को निष्पादित किया जाता है और (यदि समय अनुमति देता है) दोहराया जाता है, तो 1 अक्टूबर 2007 को 12 बजे तक।

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

ध्यान दें

के रूप में Common Test हमेशा कम से कम खत्म वर्तमान परीक्षण का मामला है, समय के साथ निर्दिष्ट duration या until कभी नहीं निश्चित है।

हर दोहराया परीक्षण रन से लॉग फ़ाइलें सामान्य Common Test फैशन (पहले वर्णित) में सहेजी जाती हैं ।

Common Test बाद में दोहराया परीक्षण रन के लॉग के अंतिम (और संभवतः पहले) सेट को स्टोर करने के लिए एक वैकल्पिक सुविधा का समर्थन कर सकते हैं, लेकिन अब उपयोगकर्ता को डिस्क स्थान से बाहर नहीं चलाने के लिए सावधान रहना चाहिए अगर परीक्षण लंबे समय तक दोहराया जाता है।

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

उदाहरण 1:

$ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -duration 001000 -force_stop

यहां, परीक्षण निर्देशिका में सुइट्स to1 , उसके बाद सुइट्स to2 , एक टेस्ट रन में निष्पादित किए जाते हैं। 10 मिनट के बाद एक समय-आउट घटना होती है। जब तक समय बचा है, Common Test परीक्षण रन को दोहराता है (जो कि परीक्षण से शुरू होता है to1 )। टाइम-आउट के बाद, Common Test जब वर्तमान नौकरी समाप्त हो जाती है (झंडा के कारण force_stop )। नतीजतन, परीक्षण के बाद to1 और परीक्षण से पहले निर्दिष्ट परीक्षण रन को समाप्त किया जा सकता है to2

उदाहरण 2:

$ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -duration 001000 -forces_stop skip_rest

यहां, उदाहरण 1 में समान परीक्षण चलाए जाते हैं, लेकिन ध्वज force_stop सेट के साथ skip_rest । यदि निर्देशिका में परीक्षण निष्पादित करते समय टाइम-आउट होता है to1 , तो शेष परीक्षण मामले to1 छोड़ दिए जाते हैं और परीक्षण को to2 किसी अन्य समय में चलाने के बिना परीक्षण रद्द कर दिया जाता है । यदि निर्देशिका में परीक्षण निष्पादित करते समय टाइम-आउट होता है to2 , तो शेष परीक्षण मामले to2 छोड़ दिए जाते हैं और परीक्षण निरस्त कर दिया जाता है।

उदाहरण 3:

$ date
Fri Sep 28 15:00:00 MEST 2007

$ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -until 160000

यहां, पिछले उदाहरणों के समान ही चलाए जाने वाले परीक्षण निष्पादित होते हैं (और संभवतः दोहराए जाते हैं)। हालांकि, जब टाइम-आउट होता है, 1 घंटे के बाद, Common Test रुकने से पहले पूरे टेस्ट रन को समाप्त कर देता है (जो कि, दोनों to1 और to2 हमेशा एक ही टेस्ट रन में निष्पादित होते हैं)।

उदाहरण 4:

$ ct_run -dir $TEST_ROOT/to1 $TEST_ROOT/to2 -repeat 5

यहां, परीक्षण रन, दोनों to1 और to2 परीक्षण सहित , पांच बार दोहराया जाता है।

ध्यान दें

repeat एक परीक्षण मामले समूह की संपत्ति के साथ इस सुविधा को भ्रमित न करें । यहां वर्णित विकल्पों का उपयोग पूरे टेस्ट रन के निष्पादन को दोहराने के लिए किया जाता है, जबकि repeat एक टेस्ट केस ग्रुप की संपत्ति एक सूट के भीतर परीक्षण मामलों के सेट के निष्पादन को दोहराना संभव बनाती है। उत्तरार्द्ध के बारे में अधिक जानकारी के लिए, Test Case Groups अनुभाग लेखन टेस्ट सूट में अनुभाग देखें ।

8.13 साइलेंट कनेक्शन

में प्रोटोकॉल हैंडलिंग प्रक्रियाओं Common Test , द्वारा कार्यान्वित ct_telnet , ct_ssh , ct_ftp , और इतने पर, परीक्षण का मामला लॉग के लिए वर्बोज़ मुद्रण है। इसे झंडे के साथ बंद किया जा सकता है -silent_connections :

ct_run -silent_connections [conn_types]

यहाँ, conn_types SSH, टेलनेट, FTP, RPC और / या SNMP को निर्दिष्ट करता है।

उदाहरण 1:

ct_run ... -silent_connections ssh telnet

यह SSH और टेलनेट कनेक्शन के लिए लॉगिंग बंद कर देता है।

उदाहरण 2:

ct_run ... -silent_connections

यह सभी कनेक्शन प्रकारों के लिए लॉगिंग बंद कर देता है।

घातक संचार त्रुटि और पुन: संयोजन प्रयास हमेशा मुद्रित होते हैं, भले ही लॉगिंग को प्रश्न में कनेक्शन प्रकार के लिए दबा दिया गया हो। हालांकि, डेटा भेजने और प्राप्त करने जैसे ऑपरेशन चुपचाप किए जाते हैं।

silent_connections टेस्ट सूट में भी निर्दिष्ट किया जा सकता है। यह एक टपल लौटने द्वारा पूरा किया है, {silent_connections,ConnTypes} , में suite/0 या परीक्षण का मामला जानकारी सूची। यदि ConnTypes परमाणुओं (एसएसएच, टेलनेट, एफटीपी, आरपीसी और / या एसएनएमपी) की सूची है, तो किसी भी संबंधित कनेक्शन के लिए आउटपुट दबा दिया जाता है। पूर्ण लॉगिंग डिफ़ॉल्ट रूप से सक्षम है जिसमें निर्दिष्ट प्रकार के किसी भी कनेक्शन के लिए सक्षम नहीं है ConnTypes । इसलिए, यदि ConnTypes रिक्त सूची है, तो लॉगिंग सभी कनेक्शनों के लिए सक्षम है।

उदाहरण 3:

-module(my_SUITE).

suite() -> [..., {silent_connections,[telnet,ssh]}, ...].

...

my_testcase1() ->
    [{silent_connections,[ssh]}].

my_testcase1(_) ->
    ...

my_testcase2(_) ->
    ...

इस उदाहरण में, टेलनेट और एसएसएच कनेक्शन से प्रिंटआउट को दबाने के लिए suite/0 कहता Common Test है। यह सभी परीक्षण मामलों के लिए मान्य है। हालाँकि, my_testcase1/0 निर्दिष्ट करता है कि इस परीक्षण मामले के लिए, केवल SSH को चुप रहना है। नतीजा यह है कि my_testcase1 लॉग में मुद्रित टेलनेट जानकारी (यदि कोई है) मिलती है, लेकिन एसएसएच जानकारी नहीं। my_testcase2 किसी भी कनेक्शन से कोई सूचना नहीं छपी।

silent_connections एक परीक्षण विनिर्देश में एक शब्द के साथ भी निर्दिष्ट किया जा सकता है (अनुभाग Test Specifications में परीक्षण और विश्लेषण परिणामों का अनुभाग देखें )। प्रारंभ ध्वज / विकल्प के साथ प्रदान silent_connections किए गए कनेक्शनों को परीक्षण विनिर्देश में सूचीबद्ध किसी भी कनेक्शन के साथ विलय कर दिया गया है।

झंडे / विकल्प शुरू करें silent_connections और परीक्षण विनिर्देश शब्द परीक्षण सूट के अंदर सूचना कार्यों द्वारा की गई किसी भी सेटिंग को ओवरराइड करता है।

ध्यान दें

वर्तमान Common Test संस्करण में, silent_connections सुविधा केवल टेलनेट और एसएसएच कनेक्शन के लिए काम करती है। अन्य कनेक्शन प्रकारों के लिए समर्थन भविष्य के Common Test संस्करणों में जोड़ा जा सकता है ।

Original text