मैं Django प्रोजेक्ट के व्यू कोड (और कोड कोड द्वारा कोड कोड) से कोड कवरेज कैसे प्राप्त करूं?बंदूकधारी में चलते समय django ऐप से कवरेज डेटा कैसे प्राप्त करें
coverage gunicorn <params>
कोई भी लाइन हिट नहीं दिखाती है।
मैं Django प्रोजेक्ट के व्यू कोड (और कोड कोड द्वारा कोड कोड) से कोड कवरेज कैसे प्राप्त करूं?बंदूकधारी में चलते समय django ऐप से कवरेज डेटा कैसे प्राप्त करें
coverage gunicorn <params>
कोई भी लाइन हिट नहीं दिखाती है।
coverage gunicorn <params>
काम नहीं करता है, क्योंकि बंदूकधारी कार्यकर्ता प्रक्रियाएं बनाती है, और coverage
मॉड्यूल फोर्क्स (मूल रूप से, नई प्रक्रियाओं का निर्माण) में काम नहीं कर सकता है। आप the coverage API, हालांकि उदाहरण के लिए अजगर मॉड्यूल है जो आपके WSGI आवेदन शामिल है में उपयोग कर सकते हैं,:
# wsgi_with_coverage.py
import atexit
import sys
import coverage
cov = coverage.coverage()
cov.start()
from wsgi import application # adjust to python module containing your wsgi application
def save_coverage():
print >> sys.stderr, "saving coverage"
cov.stop()
cov.save()
atexit.register(save_coverage)
फिर gunicorn -w 1 wsgi_with_coverage:application <other params>
चलाते हैं।
समस्या यह है कि atexit
फ़ंक्शन को कॉल नहीं किया जाता है यदि आप बंदूक प्रक्रिया को मारते हैं, उदाहरण के लिए CTRL + C के माध्यम से। लेकिन SIGHUP
पर कॉल किए गए हैं, इसलिए यदि आप kill -HUP $(cat <gunicorn_pidfile_here>)
करते हैं, तो कवरेज डेटा सहेजा जाना चाहिए (डिफ़ॉल्ट रूप से वर्तमान निर्देशिका में ".coverage" पर)।
एक संभावित चेतावनी यह है कि यह एक से अधिक बंदूकधारी कार्यकर्ता के साथ काम नहीं करेगा, क्योंकि वे सभी ".coverage" फ़ाइल को ओवरराइट करेंगे। यदि आपको बिल्कुल एक से अधिक कार्यकर्ता की आवश्यकता है, तो आप ".coverage-%d" % os.getpid()
पर लिख सकते हैं (फ़ाइल नाम via the data_file
parameter to the coverage
constructor सेट करें) और व्यक्तिगत माप को मर्ज करने के लिए the combine()
method का उपयोग करें।
यह अन्य डब्लूएसजीआई सर्वरों पर भी काम करना चाहिए, इस पर निर्भर करता है कि क्या वे atexit
विधि के माध्यम से अपने कार्यकर्ता प्रक्रियाओं को साफ करने की अनुमति देते हैं।
SIGHUP सलाह इतनी अच्छी नहीं है :)। Gunicorn SIGHUP को पुनर्प्राप्त करने पर कार्यकर्ता प्रक्रियाओं को फिर से लोड करता है। यही है, एकत्रित कवरेज डेटा बिल्कुल सहेजा नहीं जाता है, लेकिन केवल उन चीज़ों के साथ ओवरराइट किया जाता है जो लोड पर होते हैं। दूसरी तरफ, सिगर भेजना, अस्थिर हैंडलर को सही ढंग से ट्रिगर करता है और गनिकॉर्न को साफ़ करता है। –