2011-02-14 12 views
5

को निर्दिष्ट प्राप्त करने के लिए कोशिश कर रहा है बिना एक से अधिक सेलेनियम परीक्षण में लगातार Firefox प्रोफ़ाइल रखते हुए:एक प्रोफ़ाइल

  • ही फ़ायरफ़ॉक्स प्रोफ़ाइल के दौरान परीक्षण

समस्या:

  • टेस्ट में फैले हुए हैं 30 से अधिक विभिन्न फाइलें, एक सेलेनियम ऑब्जेक्ट को तुरंत चालू करना, और इस प्रकार पहले टेस में फ़ायरफ़ॉक्स प्रोफाइल बनाना क्योंकि वस्तुओं मर टी निम्नलिखित परीक्षण करने के लिए जारी रहती है नहीं होगा एक बार स्क्रिप्ट समाप्त होता है IIRC

  • क्योंकि मैं टेस्ट स्वीट विभिन्न मशीनों

पर चलाया जाना चाहिए था लिख ​​रहा हूँ प्रोफ़ाइल निर्दिष्ट नहीं कर सकते संभावित समाधान:

  • कुछ सामान्य कोड में एक सेलेनियम ऑब्जेक्ट बनाना जो पूरे परीक्षण में स्मृति में रहता है। मैं एक नई पायथन प्रक्रिया को बढ़ाकर और समाप्त होने की प्रतीक्षा करके प्रत्येक परीक्षण चला रहा हूं। मुझे यकीन है कि स्मृति में ऑब्जेक्ट्स को एक नई पायथन ऑब्जेक्ट में कैसे भेजना है।

किसी भी मदद की सराहना की जाती है, धन्यवाद।

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

उत्तर

2

मैं इस समस्या में भाग गया और यह भी ध्यान दिया कि परीक्षणों में एक एकल फ़ायरफ़ॉक्स सत्र जारी रखने से टेस्ट सूट के प्रदर्शन में काफी वृद्धि हुई।

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

from selenium.selenium import selenium 
import unittest, time, re 
import BRConfig 

class BRTestCase(unittest.TestCase): 
    selenium = None 

    @classmethod 
    def getSelenium(cls): 
     if (None == cls.selenium): 
      cls.selenium = selenium("localhost", 4444, "*chrome", BRConfig.WEBROOT) 
      cls.selenium.start() 
     return cls.selenium 

    @classmethod 
    def restartSelenium(cls): 
     cls.selenium.stop() 
     cls.selenium.start() 

    @classmethod 
    def stopSelenium(cls): 
     cls.selenium.stop() 

    def setUp(self): 
     self.verificationErrors = [] 
     self.selenium = BRTestCase.getSelenium() 

    def tearDown(self): 
     self.assertEqual([], self.verificationErrors) 

यह परीक्षण सूट है:

यहाँ आधार परीक्षण वर्ग के लिए कोड है

इस के
import unittest, sys 
import BRConfig, BRTestCase 

# The following imports are my test cases 
import exception_on_signup 
import timezone_error_on_checkout 
import ... 

def suite(): 
    return unittest.TestSuite((\ 
     unittest.makeSuite(exception_on_signup.ExceptionOnSignup), 
     unittest.makeSuite(timezone_error_on_checkout.TimezoneErrorOnCheckout), 
     ... 
    )) 

if __name__ == "__main__": 
    result = unittest.TextTestRunner(verbosity=2).run(suite()) 
    BRTestCase.BRTestCase.stopSelenium() 
    sys.exit(not result.wasSuccessful()) 

एक नुकसान यह है कि आप बस कमांड लाइन से एक भी परीक्षण चलाने यदि फ़ायरफ़ॉक्स स्वचालित रूप से बंद नहीं होगा। मैं आमतौर पर गिटूब को अपना कोड धक्का देने के हिस्से के रूप में एक साथ अपने सभी परीक्षण चलाता हूं, इसलिए, इसे ठीक करने के लिए मेरे लिए यह एक बड़ी प्राथमिकता नहीं है।

from selenium.selenium import selenium 
import unittest, time, re 
import BRConfig 
from BRTestCase import BRTestCase 

class Signin(BRTestCase): 
    def test_signin(self): 
     sel = self.selenium 
     sel.open("/signout") 
     sel.open("/") 
     sel.open("signin") 
     sel.type("email", "[email protected]") 
     sel.type("password", "test") 
     sel.click("//div[@id='signInControl']/form/input[@type='submit']") 
     sel.wait_for_page_to_load("30000") 
     self.assertEqual(BRConfig.WEBROOT, sel.get_location()) 

if __name__ == "__main__": 
    unittest.main() 
:

यहां एक परीक्षण है कि इस प्रणाली में काम करता है का एक उदाहरण है

0

आप सर्वर चलाने के दौरान फ़ायरफ़ॉक्स प्रोफ़ाइल निर्दिष्ट कर सकते हैं। आदेश

जावा -जर सेलेनियम-सर्वर.जर-फ़ायरफ़ॉक्सप्रोफाइल टेम्पलेट "सी: \ सेलेनियम \ प्रोफाइल" जहां "सी: \ सेलेनियम \ प्रोफाइल" आपका पथ होगा जहां फ़ायरफ़ॉक्स टेम्पलेट फ़ाइलें संग्रहीत की जाएंगी।

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