2011-03-31 14 views
6

मैंने पहले रूबी/आरएसपीईसी का उपयोग करके कुछ सेलेनियम परीक्षण लिखे हैं, और इसे काफी शक्तिशाली पाया है। अब, मैं PHPUnit के साथ सेलेनियम का उपयोग कर रहा हूं, और कुछ चीजें हैं जो मुझे याद आ रही हैं, यह सिर्फ अनुभवहीनता के कारण हो सकती है। रूबी/आरएसपीईसी में, मैं प्रत्येक परीक्षण मामले के लिए "वैश्विक" सेटअप को परिभाषित करने में सक्षम होने के लिए उपयोग किया जाता हूं, जहां मैं अन्य चीजों के साथ, ब्राउज़र विंडो खोलता हूं और अपनी साइट में लॉग इन करता हूं।सेटअपअप में ब्राउज़र सत्र(), tearDown(), प्रति टेस्टकेस सेटअप नहीं?

मुझे लगता है कि PHPUnit की थोड़ी कमी है, उसमें 1) आपके पास केवल setUp() और tearDown() है, जो प्रत्येक व्यक्तिगत परीक्षण से पहले और बाद में चलाए जाते हैं, और 2) ऐसा लगता है कि वास्तविक ब्राउज़र सत्र के बीच स्थापित किया गया है setUp() और परीक्षण, और tearDown() से पहले बंद हुआ।

यह परीक्षणों में थोड़ा और अव्यवस्था के लिए बनाता है, क्योंकि आपको शुरुआत में पृष्ठ को खोलना होगा और अंत में सफाई करना होगा। हर एक परीक्षण में। यह लैंडिंग पृष्ठ पर वापस जाने के बावजूद, प्रत्येक एकल परीक्षण के लिए ब्राउज़र को बंद करने और फिर से खोलने के लिए अनावश्यक ओवरहेड की तरह लगता है।

क्या मैं जो खोज रहा हूं उसे प्राप्त करने के कोई वैकल्पिक तरीके हैं?

+0

यह सुनिश्चित नहीं है कि आप यही चाहते हैं, लेकिन PHPUnit न केवल 'सेटअप' और 'टायरडाउन' प्रदान करता है बल्कि अन्य तरीकों का एक समूह भी है जिसका उपयोग आपके परीक्षणों की वैश्विक स्थिति को स्थापित करने के लिए किया जा सकता है। [PHPUnit मैनुअल में फिक्स्चर] पर अध्याय देखें (http://www.phpunit.de/manual/3.6/en/fixtures.html)। कृपया स्पष्ट करें कि यह वही है जो आप ढूंढ रहे हैं या नहीं। – Gordon

उत्तर

8

मैं अतीत में क्या किया एक संरक्षित विधि कि इतने तरह सत्र के लिए एक वस्तु देता है बनाने के लिए है:

protected function initBrowserSession() { 
    if (!$this->browserSession) { 
     $this->setBrowser('*firefox'); 
     $this->setBrowserUrl('http://www.example.com/'); 
     //Initialize Session 
     $this->open('http://www.example.com/login.php'); 
     // Do whatever other setup you need here 
    } 
    $this->browserSession = true; 
} 

public function testSomePage() { 
    $this->initBrowserSession(); 
    //Perform your test here 
} 

आप वास्तव में setupBefore/AfterClass कार्यों का उपयोग नहीं कर सकते हैं क्योंकि वे स्थिर हैं (और के रूप में ऐसे में आपको उदाहरण तक पहुंच नहीं होगी)।

अब, इसके साथ में, मैं ऐसा करने के लिए आपकी प्रेरणा पर सवाल उठाऊंगा। एक परीक्षण करके परीक्षणों के बीच एक सत्र का पुन: उपयोग करता है, आप परीक्षणों के बीच दुष्प्रभाव होने की संभावना पेश कर रहे हैं। प्रत्येक परीक्षण के लिए एक नया सत्र दोबारा खोलकर आप परीक्षण के ठीक नीचे प्रभाव को अलग कर रहे हैं। ब्राउजर को फिर से खोलने के प्रदर्शन (कम से कम उचित हद तक) की परवाह कौन करता है? ऐसा करने से वास्तव में परीक्षण की वैधता बढ़ जाती है क्योंकि यह अलग है। फिर फिर, लंबे समय तक सत्र का परीक्षण करने के लिए कुछ कहा जा सकता है। लेकिन अगर ऐसा होता, तो मैं व्यक्तिगत कार्यक्षमता परीक्षण में एक अलग परीक्षण केस/कक्षा बनाउंगा ...

0

हालांकि मैं @ircmaxell से सहमत हूं कि परीक्षण के बीच सत्र को रीसेट करना सबसे अच्छा हो सकता है, मैं देख सकता हूं वह मामला जहां ब्राउज़र को ब्राउज़र को पुनरारंभ करने के लिए कुछ मिनट लगने में परीक्षण करना होगा।

इसलिए, मैंने कुछ खुदाई की, और पाया कि आप बेस क्लास में प्रारंभ() विधि को ओवरराइड कर सकते हैं। मेरी सेटअप में, मैं निम्नलिखित है:

<?php 
require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; 

class SeleniumTestCase extends PHPUnit_Extensions_SeleniumTestCase 
{ 
    public function setUp() { 
     parent::setUp(); 
     // Set browser, URL, etc. 
     $this->setBrowser('firefox'); 
     $this->setBrowserUrl('http://www.example.com'); 
    } 

    public function start() { 
     parent::start(); 
     // Perform any setup steps that depend on 
     // the browser session being started, like logging in/out 
    } 
} 

यह स्वचालित रूप से किसी भी कक्षा कि SeleniumTestCase विस्तार को प्रभावित करेगा, ताकि आप हर एक परीक्षण में पर्यावरण की स्थापना के बारे में चिंता करने की जरूरत नहीं है।

मैंने परीक्षण नहीं किया है, लेकिन ऐसा लगता है कि टियरडाउन() से पहले एक स्टॉप() विधि भी कहा जाता है।

उम्मीद है कि इससे मदद मिलती है।

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