2011-04-01 13 views
15

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

मुश्किल आवश्यकताओं:

  1. मैं हर डेवलपर उसकी मशीन पर कोड का परीक्षण करने में सक्षम होना चाहते (CPU शक्ति पर निर्भर करता, ओएस (लिनक्स और कुछ Windows) और बाहरी विन्यास - अजगर संस्करण, पुस्तकालयों और मॉड्यूल एक ही हैं)। एक परीक्षण सर्वर, जबकि आम तौर पर एक अच्छा विचार, यह हल नहीं करता है।
  2. मैं चाहता हूं कि परीक्षण डिटेरमिनिस्ट - परीक्षण चलाने वाली मशीन पर क्या हो रहा है, इस पर ध्यान दिए बिना, मुझे परीक्षण के कई रन एक ही परिणाम लौटने के लिए चाहते हैं।

मेरे प्रारंभिक विचार:

  • उपयोग timeit और इस प्रणाली के एक बेंचमार्क हर बार जब मैं परीक्षण चलाने है। प्रदर्शन परीक्षा परिणामों की तुलना बेंचमार्क से करें।
  • "बाहरी शोर" को अनदेखा करने के लिए दुभाषिया के साधन के लिए cProfile का उपयोग करें। मुझे यकीन नहीं है कि मुझे पता है कि pstats संरचना को अभी तक कैसे पढ़ा जाए, लेकिन मुझे यकीन है कि यह करने योग्य है।

अन्य विचार?

धन्यवाद!

ताल।

उत्तर

5

funkload देखें - यह आपके यूनिट परीक्षणों को या तो कार्यात्मक या लोड परीक्षण के रूप में चलाने का एक तरीका है यह जानने के लिए कि आपकी साइट कितनी अच्छी तरह से प्रदर्शन कर रही है।

एक और दिलचस्प परियोजना जिसका उपयोग funkload के साथ संयोजन में किया जा सकता है codespeed है। यह एक आंतरिक डैशबोर्ड है जो आपके कोड में किए गए प्रत्येक प्रतिबद्धता के लिए आपके कोडबेस की "गति" को मापता है, समय के साथ रुझानों के साथ ग्राफ प्रस्तुत करता है। यह मानता है कि आपके पास कई स्वचालित मानक हैं जिन्हें आप चला सकते हैं - लेकिन यह समय के साथ प्रदर्शन का आधिकारिक खाता रखने का एक उपयोगी तरीका हो सकता है। कोडपीड का सबसे अच्छा उपयोग मैंने अब तक देखा है speed.pypy.org साइट।

निर्धारणवाद के लिए आपकी आवश्यकता के अनुसार - शायद इसका सबसे अच्छा तरीका आपके लाभ के आंकड़ों का उपयोग करना है? परीक्षण एन बार स्वचालित रूप से चलाएं, अपने सभी रनों के न्यूनतम, अधिकतम, औसत और मानक विचलन का उत्पादन करें? इस पर कुछ पॉइंटर्स के लिए यह article on benchmarking देखें।

+0

मेरी इच्छा है कि वे इसे * कोडडपेड * कहें। –

1

मैं परीक्षण चाहता हूं कि परीक्षण जांचने वाली मशीन पर क्या हो रहा है, मैं परीक्षण के कई रनों को एक ही परिणाम वापस करने के लिए चाहता हूं।

विफल। परिभाषा के अनुसार कम या कम यह एकाधिक उपयोगकर्ताओं के साथ एक बहु-प्रसंस्करण प्रणाली में पूरी तरह असंभव है।

या तो इस आवश्यकता पर पुनर्विचार करें या एक नया वातावरण ढूंढें जिसमें परीक्षण चलाने के लिए जिसमें आधुनिक बहु-प्रोसेसिंग ऑपरेटिंग सिस्टम शामिल नहीं हैं।

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

जब हमने समय-महत्वपूर्ण प्रसंस्करण (रडार में, जहां "वास्तविक समय" वास्तव में वास्तविक समय था) हमने निर्धारिती परीक्षण का प्रयास नहीं किया। हमने कोड निरीक्षण किया और सरल प्रदर्शन परीक्षण चलाया जिसमें सरल औसत और अधिकतम शामिल थे।

"बाहरी शोर" को अनदेखा करने के लिए दुभाषिया के साधन के लिए cProfile का उपयोग करें। मुझे यकीन नहीं है कि मुझे अभी तक पस्टैट संरचना को कैसे पढ़ा जाए, लेकिन मुझे यकीन है कि यह करने योग्य है।

प्रोफाइलर द्वारा बनाई गई Stats ऑब्जेक्ट वह है जिसे आप ढूंढ रहे हैं। 'Pcalls', आदिम कॉल गिनती, प्रोफ़ाइल आँकड़ों में पर

http://docs.python.org/library/profile.html#the-stats-class

फोकस और आप कुछ है कि लगभग नियतात्मक है होगा।

+0

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

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

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