2009-07-29 19 views
5

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

पर प्लेटफॉर्म ए, बी, सी और परीक्षणों को पारित करना चाहिए ऐसा करने का सबसे अच्छा तरीका है? सरल सूट एक परेशानी होगी, जैसा कि वर्णन किया गया है, प्रत्येक परीक्षण में लक्ष्य प्लेटफार्मों की एक अलग सूची हो सकती है। मैंने "@run_on" और "@ignore_on" सजावट जोड़ने के बारे में सोचा जो विधियों का परीक्षण करने के लिए प्लेटफॉर्म से मेल खाते थे। क्या इससे बेहतर कुछ है?

उत्तर

0

हम सज्जाकार साथ जाने के लिए है कि, मंच मॉड्यूल और अन्य उत्पादों का उपयोग जाँच करें कि क्या परीक्षण निष्पादित किया जाना चाहिए तय कर लिया है , और यदि इसे आसानी से पास नहीं किया जाता है (हालांकि, हमने देखा है कि python2.7 पहले से ही अपने ट्रंक में एक SkipTest अपवाद है जिसे परीक्षणों को अनदेखा करने के लिए ऐसे मामलों में उठाया जा सकता है)।

+1

SkipTest नाक में भी है, बहुत आसान - नो-स्किप विकल्प के साथ। – Almad

0

एक परीक्षण लोडर के लिए एक आसान जगह की तरह लगता है।

चेक बाहर http://docs.python.org/library/unittest.html#unittest.TestLoader.loadTestsFromName

आप तो आप शायद अपने परीक्षण नामकरण सम्मेलनों के आधार पर सुइट्स बना सकते हैं कुछ उपयुक्त नामकरण सम्मेलनों प्रदान करते हैं।

यदि मेरे पास एईक्स, लिनक्स (सभी) और 32 बिट विंडोज़ पर परीक्षण ए है, तो परीक्षण बी जो विंडोज 64, लिनक्स 64 और सोलारिस पर चलता है, और टेस्ट सी जो एचपीयूएक्स और टेस्ट डी पर चलता है जो सबकुछ पर चलता है ... इसके लिए क्या नामकरण-सम्मेलन संभव है?

class TestA_AIX_Linux2_Win32(unittest.TestCase): 

class TestB_Win64_Linux64_Solaris(unittest.TestCase): 

class TestC_AIX_Linux2_Win32_Win64_Linux64_Solaris(unittest.TestCase): 

class TestD_All(unittest.TestCase): 

कठिन हिस्सा "एचपी/यूएक्स नहीं" है। नकारात्मक तर्क से बचने से आपका जीवन आसान हो जाता है। इस मामले में, आप बस उन सभी ओएस की सूची देते हैं जो एचपी/यूएक्स नहीं हैं। सूची काफी कम है और धीरे-धीरे बढ़ती है।

"सभी" परीक्षण केवल एक अलग पाठ खोज हैं जो एक पूर्ण सूट बनाने के लिए मौजूदा प्लेटफ़ॉर्म की परीक्षणों की सूची के साथ विलय हो गया है।

आप की तरह

class TextC_XHPUX(unittest.TestCase): 

कुछ की कोशिश कर सकते आपका पाठ मिलान नियम सामान्य रूप से "_someOSName" है; आपके अपवाद "_X" नाम के साथ गड़बड़ करने के लिए एक अजीब पाठ फ़िल्टर होगा।

"हमारे पास ओएस की सकारात्मक सूची नहीं हो सकती है। अगर हम एक नया ओएस जोड़ते हैं तो क्या हमें स्पष्ट रूप से इसे शामिल करने के लिए हर परीक्षण का नाम बदलना होगा?" हाँ। नया ऑपरेटिंग सिस्टम बाजार विकसित होने में धीमा है, यह प्रबंधन के लिए दर्दनाक नहीं है।

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

+0

मुझे नहीं पता कि यह वास्तव में कैसे मदद करेगा। अगर मुझे एईक्स, लिनक्स (सभी) और 32 बिट विंडोज़ पर निष्पादित किया गया है, तो परीक्षण 64 जो विंडोज 64, लिनक्स 64 और सोलारिस पर चलता है, और परीक्षण सी जो सब कुछ पर चलता है लेकिन एचपीयूएक्स और टेस्ट डी जो सब कुछ पर चलता है ... इसके लिए क्या नामकरण सम्मेलन है? – abyx

2

अवसरों के एक जोड़े पर मैं परीक्षण मॉड्यूल में यह बहुत ही सरल दृष्टिकोण का इस्तेमाल किया है:

import sys 
import unittest 

if 'win' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ... 

if 'linux' in sys.platform: 
    class TestIt(unittest.TestCase): 
     ... 
संबंधित मुद्दे