2013-05-17 3 views
5

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

इन पर्ल स्क्रिप्ट को एक-एक करके चलाना मेरा समय मार रहा है। मैं इसे स्वचालित करने के लिए बैच फ़ाइल लिखने के बारे में सोच रहा हूं, लेकिन मुझे परीक्षण रिपोर्ट उत्पन्न करने के लिए परिणाम फ़ाइलों को पार्स करना होगा। मैंने ऑनलाइन खोज की, और कई परीक्षण ढांचे, जैसे कि Test::Harness, Test::More, Test::Most अच्छे विकल्प हैं। मेरी समझ के आधार पर, वे केवल .t फ़ाइल लेते हैं, और हमारी स्क्रिप्ट सामान्य perl स्क्रिप्ट (.pl) हैं, और मानक perl test script (.t script) नहीं हैं। यदि प्रयोग करें, कहें, टेस्ट :: हार्नेस, क्या मुझे सभी perl स्क्रिप्ट को .pl से .t में बदलना चाहिए, और उन्हें टी फ़ोल्डर में रखना चाहिए? टेस्ट :: हार्नेस में अपने कार्यों को कैसे कॉल करें? क्या कोई परीक्षण प्रक्रिया को स्वचालित करने और टेस्ट :: हार्नेस जैसी परीक्षण रिपोर्ट उत्पन्न करने का एक बेहतर तरीका सुझा सकता है? मुझे लगता है कि एक उदाहरण बहुत उपयोगी होगा।

+0

आदर्श रूप में आप में फ़ंक्शन का उपयोग करने के लिए अपने परीक्षण बदल जाएगा [टेस्ट :: अधिक] (http://p3rl.org/Test::More) के बजाय सिर्फ 'मुद्रण Success', और' Fail'। उदाहरण: 'प्रिंट $ aq 'की बजाय"? "सफलता \ n": "विफल \ n"; 'यह' एक 'ए', 'ए', 'कुछ व्याख्यात्मक पाठ' होगा। आउटपुट में होगा [टीएपी] (http://testanything.org) प्रारूप। –

उत्तर

1

हम में से एक यहां उलझन में है। ये (100+) perl स्क्रिप्ट unit tests सही नहीं हैं?

यदि मैं सही पढ़ना जारी रखता हूं।

Test::* आपने उल्लेख किया है कि आप वास्तव में जो भी खोज रहे हैं वह वास्तव में नहीं हैं।

मुझे लगता है कि आपको , या की आवश्यकता है, प्रत्येक test.pl चलाने के लिए।

तो ऐसा लगता है कि आप सही रास्ते पर हैं। यदि एक ही निर्देशिका में सभी परीक्षण होना संभव है, तो आप ऐसा कुछ कर सकते हैं।

my $tests_directory = "/some/path/test_dir"; 
opendir my $dh, $tests_directory or die"$!"; 
my @tests = grep { $_ !~ /^\./{1,2}$/ } readdir $dh; 

for my $test (@tests) { 
    system('perl', $test); 
} 
+0

आप सही हैं, वे यूनिट परीक्षण नहीं हैं। – ericyoung

+0

@ericyoung - फिर दिए गए उदाहरण का उपयोग करें। – chrsblck

2

टेस्ट :: हार्नेस और दोस्तों वास्तव में इस कार्य के लिए उपयुक्त विकल्प नहीं है, जब तक कि आप लॉग फ़ाइल के बजाय टीएपी डेटा को उत्सर्जित करने के लिए अपनी सभी 100 स्क्रिप्ट को संशोधित नहीं करना चाहते हैं।

अपनी सभी पर्ल स्क्रिप्ट चलाने के लिए केवल पर्ल स्क्रिप्ट क्यों न लिखें?

use strict; 
use warnings; 

my $script_dir = "/path/to/dir/full/of/scripts"; 
opendir my $dh, $script_dir or die "Can't open dir $script_dir: $!"; 

my @scripts = grep { /\.pl$/ } readdir $dh; 
foreach my $script(@scripts) { 
    print "Running $script\n"; 
    system 'perl', $script; 
} 

तुम भी parallelize सकता है इस fork और exec का उपयोग कर (या Parallel::ForkManager, और भी बेहतर), यह सोचते हैं कि समझ में अपने सिस्टम के लिए बनाता है।

संबंधित मुद्दे

 संबंधित मुद्दे