2012-10-02 18 views
5

मैंने PHPUnit एक्सटेंशन Selenium2TestCase के साथ एक परीक्षण केस लिखा था। यह अच्छा काम करता है, लेकिन मैं यह नहीं समझ सकता कि विभिन्न परीक्षणों पर स्वचालित रूप से इस परीक्षण को कैसे चलाया जाए।PHPUnit एक्सटेंशन सेलेनियम 2 (वेबड्राइवर) और एकाधिक ब्राउज़र

एक विधि setBrowser() है जो यह केवल setUp() विधि में काम करती है। मैंने इस तरह कुछ के बारे में सोचा:

/** 
* @dataProvider browsers 
*/ 
public function loginTest($browser) { 
    $this->setBrowser($browser); 
    // tests... 
} 

लेकिन मैं काम नहीं करता हूं। रन प्रयास करें डिफ़ॉल्ट ब्राउज़र (Propably मैं सफारी के साथ एक छोटे गड़बड़ है, पिछली बार जब फ़ायरफ़ॉक्स का उपयोग करता है)

RuntimeException: Safari could not be found in the path! 
Please add the directory containing ''Safari'' to your PATH environment 
variable, or explicitly specify a path to Safari like this: 
*safari /blah/blah/Safari 

पी एस। SeleniumTestCase (वेबड्राइवर पर आधारित नहीं) एक एक्सएमएल कॉन्फ़िगरेशन प्रदान करता है जहां हम ब्राउज़र निर्दिष्ट कर सकते हैं। Selenium2TestCase इसका समर्थन नहीं करता है।

कोई सुझाव स्वागत है। धन्यवाद। मार्सीन

उत्तर

2

इसके लिए ठीक वास्तव में आपकी डेटा फ़ाइल कैसा दिखता है इस पर निर्भर करता है। यदि आप पोस्ट कर सकते हैं तो हम आपकी मदद कर सकते हैं।

उस समय के लिए जब मैं प्रकृति द्वारा phpunit प्रतीत होता हूं, एक बार एक बार इकाई परीक्षण फ्रेमवर्क है कि आप एक साथ कई ब्राउज़रों को चलाने का प्रयास नहीं कर रहे हैं, लेकिन बस ब्राउज़रों को बदलने के विकल्प को आरक्षित करना चाहते हैं जैसे आप स्वस्थ दिख रहे हैं।

आप सही हैं कि आपको setUp में setBrowser का उपयोग करना चाहिए। जब निष्पादित PHPUnit हमेशा सेटअप पहले चलाएगा, और tearDown() अंतिम होगा। यहां एक अच्छी प्रैक्टिस है अपनी खुद की कस्टम यूनिट-टेस्ट-केस क्लास बनाना जहां आप इन विधियों को कस्टमाइज़ कर सकते हैं।

class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase { 
    public $browser = "firefox"; 
    public function setUp() { 
     $this->setBrowser("*".$browser); 
    } 
} 

अब आप एक परीक्षण के लिए अपने व्यक्तिगत परीक्षण वर्ग का विस्तार करने और ब्राउज़र तदनुसार

class newTest extends customUnitTest { 
    $this->browser = "safari"; 
    public function testBlah { 
     blah blah... 
    } 
} 

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

यदि आप सभी परीक्षणों में सभी ब्राउज़रों को एक साथ बदलने में सक्षम होना चाहते हैं तो आपको पर्यावरण चर के आधार पर ब्राउज़र मान असाइन करना चाहिए।

class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase { 
    try { 
     public $browser = getenv("SELENIUM_BROWSER"); 
    } catch (Exception $e) { 
     public $browser = "firefox"; 
    } 
    public function setUp() { 
     $this->setBrowser("*".$browser); 
    } 
} 

इस स्थापना के साथ हम हर परीक्षण है कि न के भीतर ही ब्राउज़र हार्ड-कोडेड है वातावरण चर SELENIUM_BROWSER बदलकर के लिए ब्राउज़र बदल सकते हैं। इस तरह हम अलग-अलग सर्वरों पर एक ही कोड को अलग-अलग डिफ़ॉल्ट ब्राउज़र के साथ कुछ भी लिखने के बिना चला सकते हैं।

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

$this->open("www.google.com"); 

यह एक वस्तु के लिए सेलेनियम देने की सामान्य दृष्टिकोण की तुलना में काफी अलग तरीका है के रूप में परीक्षण आप लिखते हैं सेलेनियम वस्तु है चलाने के लिए है, लेकिन यह अधिक php उपयुक्त लग रहा है , विशेष रूप से इस उपयोग के मामले के लिए।

+0

अच्छा, भले ही getenv और विरासत एक चिकनी समाधान नहीं है। वैसे भी यह दिखाता है कि मैं क्या कर सकता हूं। धन्यवाद। पीएस। मुझे आशा है कि सेलेनियम 2 टेस्टकेस के कार्यान्वयन के बाद से मैंने मुद्दा लिखा था ... या होगा। –

4

कुछ इस

class WebTestCase extends \application\components\test\ExWebTestCase 
    { 
     // default params 
     public $parameters = array(
      'host'       => 'localhost', 
      'port'       => 4444, 
      'seleniumServerRequestsTimeout' => 30000, 
      'timeout'      => 30000, 
    ); 

     // list of browsers with per-browserconfig 
     public static $browsers = array(
      array(
       'browserName' => 'firefox', 
     ), 
      array(
       'browserName' => 'chrome', 
     ), 
      array(
       'browserName' => 'safari', 
     ), 
      array(
       'browserName' => 'internet explorer', 
       'host' => 'some IP of VirtualBox with IE' 
     ) 
    ); 
    } 
2

की तरह इस लिंक एकाधिक ब्राउज़र की जांच में चलाने के लिए: उर स्थानीय होस्ट में testcase चल रहा हैं

http://phpunit.de/manual/current/en/selenium.html उदाहरण 17.4 (PHPUnit 3.7) , 'होस्ट' का उपयोग => 'स्थानीय होस्ट'। setBrowser() फ़ंक्शन की आवश्यकता नहीं है ..

+0

जैसा कि मुझे याद है कि यह SeleniumTestCase के लिए काम करता है Selenium2TestCase के लिए नहीं। –

1

उपयोगकर्ता को ऊपर वर्णित अनुसार कई ब्राउज़रों को परिभाषित करने के लिए $ ब्राउज़र की संपत्ति का उपयोग करना चाहिए।