2012-12-20 19 views
5

में गतिशील रूप से $ ब्राउज़र स्थैतिक संपत्ति को सेट करना मैं सॉसलैब्स का उपयोग करके कुछ ब्राउज़र परीक्षण स्थापित कर रहा हूं। मैं स्थानीय रूप से और सॉस के माध्यम से परीक्षण चलाने में सक्षम हूं, इसलिए अब मैं इसे अपने जेनकींस इंस्टॉल के साथ एकीकृत करने की कोशिश कर रहा हूं ताकि बिल्ड और ब्राउज़र परीक्षण स्वचालित रूप से ट्रिगर हो सकें।सॉस .io phpunit सेलेनियम परीक्षण

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

मैं बाध्यकारी सॉसेज उपयोग कर रहा हूँ, मेरे testcase सुंदर इस डेमो के समान दिखता है: https://github.com/jlipps/sausage/blob/master/WebDriverDemo.php

मैं सेटअप() $ ब्राउज़रों सरणी अपडेट करने के लिए कोशिश की है, लेकिन यह कभी नहीं प्रभावी करने के लिए लगता है। जैसे।

public function setUp() 
{ 
    self::$browsers = array(
     'browserName' => getenv('SELENIUM_BROWSER'), 
     'desiredCapabilities' => array(
      'version' => getenv('SELENIUM_VERSION'), 
      'platform' => getenv('SELENIUM_PLATFORM'), 
     ) 
    ); 
} 

क्या जेनकिंस से ब्राउज़र विवरण पास करने का कोई तरीका है ताकि परीक्षण के मामले अधिक लचीले हों? मुझे लगता है कि मैं यहाँ कुछ आसान याद कर रहा हूँ?

+0

जेनकिंस में पैरामीटर प्लगइन्स हैं जो नौकरी ट्रिगर करते समय पैरामीटर लेते हैं। ऐसा कुछ होगा: https://wiki.jenkins-ci.org/display/JENKINS/ पैरामीटरेटेड + बिल्ड आपकी मदद करता है? –

+0

मुझे phpunit परीक्षण मामले में पैराम प्राप्त करने में कोई समस्या नहीं है। एक बार जब वे वहां हों, तो उन्हें उपयोग करने में बहुत देर हो रही है। –

उत्तर

1

ठीक है, इसलिए मैंने इसे काम किया। क्या किसी और के पास एक ही समस्या होनी चाहिए, यहां मैंने इसका समाधान कैसे किया है।

जेएनकिंस रन की एएनटी स्क्रिप्ट में, जो बदले में PHPUnit चलाता है, मैंने एक config.xml फ़ाइल शामिल की। यह true

<phpunit> 
    <php> 
     <env name="sauce" value="true" /> 
    </php> 
</phpunit> 

करने के लिए एक config (पर्यावरण) चर sauce बुलाया सेट अब चाल वास्तव में $ ब्राउज़रों स्थिर सरणी का उपयोग नहीं करने के लिए है, लेकिन इसके बजाय setupSpecificBrowser विधि का उपयोग करने के लिए। तो, अब मेरे परीक्षणों के मेरे सेटअप() फ़ंक्शन में, मैं बस सॉस एनवी वैरिएबल पर स्विच करता हूं और यदि यह मौजूद है तो मुझे पता है कि हम जेनकींस से चल रहे हैं और इसलिए मैं इससे आपूर्ति किए गए चर का उपयोग करता हूं।

if(getenv('sauce') == true) { 
     $browser = array(
       'browserName' => getenv('SELENIUM_BROWSER'), 
       'desiredCapabilities' => array(
         'version' => getenv('SELENIUM_VERSION'), 
         'platform' => getenv('SELENIUM_PLATFORM'), 
       ) 
     ); 
    } else { 
     $browser = array(
       'browserName' => 'firefox', 
       'local' => true, 
       'sessionStrategy' => 'isolated' 
     ); 
    } 
    $this->setupSpecificBrowser($browser); 

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

+0

क्या आपने एक से अधिक ब्राउज़र जोड़ने का प्रबंधन किया था? –

+0

परीक्षणों का स्वचालित नामकरण इस तरह से तोड़ने लगता है। सभी परीक्षणों का नाम "अज्ञात नौकरी" रखा गया था –

+0

मेरी विधि का उपयोग करके आपको प्रति ब्राउज़र एक अलग जेनकिन्स कार्य सेट करना होगा, जिसे आप परीक्षण करना चाहते थे - क्योंकि इन्हें चींटी में सॉसऑनडेन्ड प्लगइन के माध्यम से पारित किया जा रहा है। उस ने कहा, यूआई आपको बहु-चयन ब्राउज़र की अनुमति देता है। मुझे यकीन नहीं है कि आप इन मानों को कैसे एक्सेस करेंगे यदि आपने ऐसा किया (apols मेरे पास अभी परीक्षण करने का समय नहीं है) –

0

बस ध्यान दें, कि ब्राउज़र के बाद समानांतर परीक्षण बंद हो जाता है। इसके अलावा यदि आपके पास तीन अलग-अलग ब्राउज़र हैं ($ ब्राउज़र्स स्थिर सरणी में) और ब्राउजर को क्रोम पर सेट करें तो आपके पास क्रोम चलने वाली तीन मशीनें होंगी।

5

स्रोत के माध्यम से खुदाई करने में काफी समय व्यतीत करने के बाद, मुझे "एकाधिक ब्राउज़र" परिदृश्य का समाधान मिला। कई ब्राउज़रों और दिए गए उत्तर के बारे में चैम्पमैटिक के दावे वास्तव में सही थे: यह समानांतर परीक्षण के लिए काम नहीं करता है और यदि आपके ब्राउज़र ब्राउज़र सरणी में एकाधिक ब्राउज़र परिभाषित हैं तो एक ही ब्राउज़र को कई बार चलाता है। समाधान अभी भी पर्यावरण चर का उपयोग करता है, लेकिन आपको अभी भी अपने $ ब्राउज़र सरणी का उपयोग करना होगा।

तो, पहले सुनिश्चित करें कि आप अपने अमूर्त टेस्ट क्लास में अपने $ ब्राउज़र सरणी को परिभाषित करते हैं। फिर, मान लें कि आप env var ब्राउजर को परिभाषित करते हैं और उस ब्राउज़र को असाइन करते हैं जिसे आप परीक्षण करना चाहते हैं। आप अपने सार परीक्षण कक्षा में निम्नलिखित स्थिर समारोह है कि सॉस \ सॉसेज \ WebDriverTestCase फैली सेट कर सकते हैं:

public static function browserSetup() 
    { 
     switch (getenv('BROWSER')) { 
      case 'firefox': 
       self::$browsers = array(
        array(
         'browserName' => 'firefox', 
         'desiredCapabilities' => array(
          'platform' => 'self::WIN_VERSION', 
          'version' => self::FIREFOX_VERSION, 
         ) 
        ) 
       ); 
       break; 

      case 'safari': 
       //safari desiredCapabilities 
       break; 

      case 'explorer': 
       //ie desiredCapabilities 
       break; 

      case 'chrome': 
      //chrome desiredCapabilities 

      default: //This will just use the default $browsers array you defined 
     return; 
    } 
अब जब कि browserSetup() परिभाषित किया गया है, तो आप इसे पहले टेस्ट स्वीट सेट किया गया है कहा जाता है सुनिश्चित करने के लिए है

अप ताकि परीक्षण केवल आपके ब्राउजर पर्यावरण चर में निर्दिष्ट ब्राउज़र पर चलने के लिए सेट हैं।आइए PHPUnit_Extensions_Selenium2TestCase को देखें, जिसे सॉस \ सॉसेज \ WebDriverTestCase द्वारा व्यय किया गया है; PHPUnit_Extensions_Selenium2TestCase निम्न विधि को परिभाषित करता है:

public static function suite($className) 
{ 
    return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className); 
} 

इस विधि ताकि आप अपने सार परीक्षण कक्षा में इस विधि को ओवरराइड करने की जरूरत है सभी ब्राउज़रों आप अपने $ ब्राउज़रों सरणी में निर्दिष्ट के साथ टेस्ट स्वीट स्थापित करने के लिए, यह सुनिश्चित करते हुए कहा जाता हो जाता है fromTestCaseClass से पहले browserSetup()() कॉल करने के लिए कहा जाता है:

public static function suite($className) 
{ 
    self::browserSetup(); 
    return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className); 
} 

अब, अगर आप ब्राउज़र आप परीक्षण करना चाहते साथ वातावरण चर ब्राउज़र को परिभाषित, आप अपने टेस्ट स्वीट और अपने $ ब्राउज़रों सरणी शुरू हो जाएगा कर सकते हैं आपके ब्राउजर एनवीरो में परिभाषित एक ब्राउज़र के लिए निर्दिष्ट सेटिंग्स के साथ ठीक से ओवरराइड nment चर। सुनिश्चित करें कि जेनकिंस बिल्ड-> निष्पादन खोल अनुभाग में इस पर्यावरण परिवर्तनीय को सही ढंग से सेट कर रहा है, और आप जाने के लिए अच्छे हैं।

+0

वह समाधान कुछ हद तक आशाजनक दिखता है। "स्थानीय ',' सॉस ', –

+0

जैसे browsergroup पर स्विच क्यों न करें यह आपकी बेस क्लास के रूप में' PHPUnit_Extensions_SeleniumTestCase' का उपयोग करते समय भी काम करता है। – Kryten