2012-05-31 23 views
12

साथ मैं PHP के लिए सेलेनियम टेस्ट मामले में लिखा है। मैं इन परीक्षण मामलों को निष्पादित करते समय कोड कवरेज प्राप्त करना चाहता हूं। मेरे testcase:कोड कवरेज PHPUnitSeleniumTestcase

<?php 
class Example extends PHPUnit_Extensions_SeleniumTestCase 
{ 
    protected $coverageScriptUrl = 'http://applicationname/phpunit_coverage.php'; 

    protected function setUp() 
    { 
    $this->setBrowser("*firefox"); 
    $this->setBrowserUrl("http://applicationname"); 
    $this->setCollectCodeCoverageInformation(true); 
    $this->setTestId("10001"); 
    $this->setHost("applicationname"); 
    } 

    public function testMyTestCase() 
    { 
    $this->open("http://applicationame"); 
    $this->assertEquals("title", $this->getTitle()); 
    $this->type("id=ext-comp-1002", "testuser"); 
    $this->fireEvent("id=ext-comp-1002", "blur"); 
    $this->type("id=ext-comp-1003", "testpassword"); 
    $this->fireEvent("id=ext-comp-1003", "blur"); 
    $this->click("ext-gen45"); 
    $this->waitForPageToLoad("200000"); 
} 
} 
?> 

मैं चरणों लिंक "http://www.phpunit.de/manual/current/en/selenium.html"

में उल्लेख किया है का पालन किया है परीक्षण मैं कर रहा हूँ चलाने के बाद कोड कवरेज नहीं ढूंढ पा रहा है। Phpunit_coverage.php में, यह कुकी को GUUNIT_SELENIUM_TEST_ID नाम से देख रहा है। यह कुकी Driver.php में बनाई जा रही है और मुझे लगता है कि कुकी उपलब्ध है, लेकिन मेरे पास एप्लिकेशन नाम के बजाय "localhost" पर सेट करने के लिए होस्टनाम है।

कुकी लाइफ टाइम सेट सत्र है यानी टेस्ट केस निष्पादन के तुरंत बाद यह कुकी अब उपलब्ध नहीं होगी और जब मैं phpunit_coverage.php लॉन्च करने का प्रयास करता हूं, तो यह कुकी और जानकारी नहीं ढूंढ पाता है, इसलिए कोई कोड कवरेज दिखाई नहीं दे रहा है।

बातें मुझे समझ नहीं आता:

  1. protected $coverageScriptUrl = 'http://applicationname/phpunit_coverage.php';
  2. कुकी है, तो आवेदन के अलावा अन्य विभिन्न मेजबान इस कुकी सुलभ हो सकता है

मैं इस समस्या को देखा है में चर्चा की जा रही है कई मंचों, लेकिन एक ठोस जवाब दिया

कई मंचों localhost के बजायउपयोग करने के लिए सुझाव दिया सर्वर नाम के रूप में। मेरे मामले में यह पहले से ही लोकहोस्ट है।

इस संबंध में कोई भी सुझाव उपयोगी होगा। के रूप में वे व्यवहार को कवर कर रहे हैं

धन्यवाद, Ravuri

+1

शायद इस प्रश्न का उत्तर कुछ मदद प्रदान कर सकता है: http://stackoverflow.com/questions/11270527/does-phpunit-selenium-code-coverage-work – Potherca

उत्तर

2

एकता या सेलेनियम के साथ कार्यात्मक परीक्षण यद्यपि कोड को कवर नहीं कर रहे हैं। इस तरह के परीक्षणों के लिए कोड कवरेज रिपोर्ट किसी भी प्रकार की उपयोगी जानकारी उत्पन्न नहीं कर रही हैं। यूनिट परीक्षण अधिक अर्थपूर्ण कोड कवरेज रिपोर्ट उत्पन्न करेंगे। सेलेनियम से और प्रदान की गई जानकारी के आधार पर परीक्षण चलाए जा रहे हैं, यह वास्तव में बोलने के लिए आपके "कोड" का परीक्षण नहीं कर रहा है।

1

मुझे लगता है कि के ठंढा जवाब भी मजबूत बनाया जा सकता है, लेकिन मैं दोनों PHPUnit और सेलेनियम है कि मैं मैं क्या कह रहा हूँ की पूरी तरह से यकीन नहीं है के साथ इस तरह के एक कुल noob हूँ। तो मैं इसे कहूंगा और देख सकता हूं कि मुझे सही किया गया है या नहीं।

ईकाई परीक्षण PHPUnit के प्रत्यक्ष नियंत्रण में अपने आवेदन कोड का प्रयोग। आप अपने कोड में प्लगइन को विधि देने के लिए PHPUnit देते हैं, और यह कवरेज जानकारी एकत्र करने के लिए Xdebug के तहत उस विधि को आमंत्रित करता है। मैं इसके बारे में सोचता हूं कि आपका कोड PHPUnit के समान पता स्थान पर चल रहा है, भले ही यह सख्ती से सच न हो - क्या किसी को पता है कि यह है या नहीं?

सेलेनियम के अंतर्गत चलाने के परीक्षण के साथ, अपने कोड सीधे बिल्कुल PHPUnit के नियंत्रण में नहीं है। अपने कोड में एक विधि के बजाय, आप PHPUnit को एक यूआरएल देते हैं, और यह उस यूआरएल को वास्तविक वेब ब्राउजर पर खिलाने की व्यवस्था करता है। वेब ब्राउज़र को उसी होस्ट मशीन पर PHPUnit के रूप में चलाने की आवश्यकता नहीं है; और यहां तक ​​कि यदि यह है, तो आपके एप्लिकेशन कोड का परीक्षण यूआरएल द्वारा निर्दिष्ट वेबसर्वर पर चलता है। PHPUnit फ़ायरफ़ॉक्स को यह बताने के लिए फ़ायरफ़ॉक्स को नहीं बता सकता है कि अनुरोध को संभालने के लिए PHP को आमंत्रित किया गया है, तो उस PHP कोड को Xdebug के अंतर्गत चलाएं और प्रतिक्रिया के साथ ट्रेस आउटपुट वापस भेजें! PHPUnit केवल आपके द्वारा निर्दिष्ट यूआरएल और वेब ब्राउजर से आउटपुट को देखता है जो अनुरोध की सेवा करता है।यह पता लगाने का कोई तरीका नहीं है कि वेबसाइवर वास्तव में अनुरोध को संभालने वाला कोड कौन सा कोड चलाता है।

तो जहां पिछले जवाब कहा कि इन परीक्षणों के लिए कोड कवरेज रिपोर्ट उपयोगी जानकारी प्रदान नहीं होता है, और है कि इकाई परीक्षण और अधिक सार्थक रिपोर्ट उत्पन्न होता है, मुझे लगता है कि यह संभव नहीं है कहने के लिए सभी तरह से जाना चाहते हैं इन परीक्षणों के लिए कोड कवरेज को मापने के लिए, इसलिए जब आप उन्हें चलाते हैं तो आपको कोड कवरेज रिपोर्ट नहीं मांगनी चाहिए! या इसके बजाय यदि आप सेलेनियम परीक्षणों के लिए कोड कवरेज रिपोर्ट उत्पन्न करते हैं, और रिपोर्टों का कहना है कि आपके कोड की एक पंक्ति भी चलती है, तो आपके सेटअप में कुछ गंभीरता से गलत है।

+0

मुझे नहीं पता कि मैं " PHPUnit के नियंत्रण में ", क्योंकि दोनों मामलों में कोड PHPUnit द्वारा निष्पादित किया जा रहा है। अंतर, कम से कम मेरे दिमाग में यह है कि क्योंकि पृथक्करण में कोड की प्रत्येक इकाई इकाई का परीक्षण करने के लिए यूनिट परीक्षण मौजूद हैं; जबकि सेलेनियम प्रकार परीक्षण कोड की कई इकाइयों के एकीकरण के साथ सौदा करते हैं। उन मामलों में कोड कवरेज आपको वास्तव में कुछ भी नहीं बताता है ... – frosty

+0

दूसरा प्रयास: मेरे लिए, "निष्पादित" यूनिट परीक्षणों के अनुरूप है, जहां php दुभाषिया जो PHPUnit स्रोत की व्याख्या कर रहा है, में एक विधि में कॉल कर रहा है आपका स्रोत कोड जैसे PHPUnit में यूनिट परीक्षण तंत्र परीक्षण की जा रही विधि द्वारा फेंक दिया गया एक अनचाहे अपवाद पकड़ सकता है। लेकिन सेलेनियम परीक्षणों में, आपका कोड किसी अन्य माध्यम से चलाया जा रहा है, और PHP में भी लिखे जाने की आवश्यकता नहीं है। सेलेनियम के माध्यम से चलने वाले टेस्ट आपके एप्लिकेशन द्वारा फेंकने वाले अपवादों को नहीं पकड़ सकते हैं, वे केवल ब्राउज़र आउटपुट पर अपवाद को प्रभावित कर सकते हैं। मेरे लिए, यह बहुत अलग है। – sootsnoot

+0

मैंने मूल प्रश्न पर एक नोट में @Potherca द्वारा लिंक नहीं पढ़ा था। यह बदलता नहीं है कि मैं "नियंत्रण में" या "निष्पादित" के बारे में क्या सोचता हूं। लेकिन यह इंगित करता है कि यदि आपके पास परीक्षण किए जा रहे कोड चलाने वाले वेबसर्वर पर नियंत्रण है, तो * सेलेनियम के माध्यम से उस वेबसर्वर पर चलने वाले परीक्षणों के लिए रिकॉर्ड कवरेज बनाना संभव है, जैसे कि वे कवरेज रिपोर्ट में शामिल हैं। मुझे लगता है कि यह कमाल है! जबकि मैं ठंढ से सहमत हूं कि यूनिट परीक्षणों के माध्यम से अच्छा कवरेज प्राप्त करना अधिक मूल्यवान/सार्थक है, सेलेनियम परीक्षणों के माध्यम से कवरेज बेकार नहीं है - मैंने सोचा कि यह संभव नहीं था! – sootsnoot

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