2013-02-20 30 views
5

Tôi đã thiết lập thành công SeleniumGrid để chạy thử nghiệm Python trên nhiều máy có hệ điều hành và trình duyệt khác nhau. Tuy nhiên, tôi vẫn phải viết cùng một trường hợp thử nghiệm 3 lần, một lần cho mỗi nút, vì tham chiếu đến nút nằm trong trường hợp thử nghiệm.Làm cách nào để thiết lập một trường hợp thử nghiệm Lưới Selenium Grid để kiểm tra trên nhiều máy?

Tôi đã xem xét tất cả các loại đề xuất trực tuyến cho Python ví dụ: nút tách ra ips ra vào các tập tin bên ngoài và nhập khẩu này vào trường hợp thử nghiệm nhưng không ai trong số họ dường như làm việc hoặc các hướng dẫn dành cho Java.

Với một cú này từ Mozilla, tôi không chắc chắn làm thế nào tôi thiết lập tập tin này với các trường hợp thử nghiệm của tôi/làm thế nào để chạy nó: http://viewvc.svn.mozilla.org/vc/projects/sumo/tests/frontend/python_tests/suite_sumo.py?view=markup

Làm thế nào để tôi đặt trường hợp thử nghiệm Python tôi lên vì vậy tôi chỉ viết nó Một lần?

lệnh Hub My hướng dẫn nhắc nhở là:

java -jar selenium-server-standalone-2.29.0.jar -host http://localmachineipaddress -port 4444 -role hub 

Nodes My lệnh hướng dẫn nhanh chóng là:

*FireFox PC, Chrome PC, Safari PC, and IE9 PC on local machine* 
java -jar selenium-server-standalone-2.29.0.jar -host localhost -role webdriver -hub http://theHubIP:4444/grid/register -port 5555 -browser browserName=firefox,maxInstances=5,platform=WINDOWS -browser browserName=chrome,maxInstances=5,platform=WINDOWS -Dwebdriver.chrome.driver=c:\SeleniumGrid\chromedriver.exe -browser browserName=iehta,maxInstances=5,platform=WINDOWS -Dwebdriver.ie.driver=c:\SeleniumGrid\IEDriverServer.exe -browser browserName=safari,maxInstances=5,platform=WINDOWS -Dwebdriver.safari.driver=c:\Python27\SafariDriver2.28.0.safariextz  

*FireFox MAC, Safari MAC, and Chrome MAC machine* 
java -jar selenium-server-standalone-2.29.0.jar -role webdriver -hub http://theHubIP:4444/grid/register -debug -port 5556 -browser browserName=firefox,maxInstances=5,platform=MAC -browser browserName=chrome,maxInstances=5,platform=MAC -browser browserName=safari,maxInstances=5,platform=MAC -Dwebdriver.safari.driver=c:\Python27\SafariDriver2.28.0.safariextz 

*IE8 PC machine* 
java -jar selenium-server-standalone-2.29.0.jar -role webdriver -hub http://theHubIP:4444/grid/register -port 5559 -browser browserName=iehta,maxInstances=5,platform=WINDOWS -Dwebdriver.ie.driver=c:\SeleniumGrid\IEDriverServer.exe 

Test Case My lệnh hướng dẫn nhanh chóng là:

python Python27/Test_Cases/SeleniumTest.py 5555 firefox WINDOWS 
python Python27/Test_Cases/SeleniumTest.py 5555 chrome WINDOWS 
python Python27/Test_Cases/SeleniumTest.py 5555 iehta WINDOWS 
python Python27/Test_Cases/SeleniumTest.py 5555 safari WINDOWS 
python Python27/Test_Cases/SeleniumTestIE8.py 5559 iehta WINDOWS 
python Python27/Test_Cases/SeleniumTestApple.py 5556 chrome MAC 
python Python27/Test_Cases/SeleniumTestApple.py 5556 firefox MAC 
python Python27/Test_Cases/SeleniumTestApple.py 5556 safari MAC 

Test Case của tôi là:

# coding: utf-8 
from selenium import webdriver 
from selenium.common.exceptions import TimeoutException 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.common.keys import Keys 
import HTMLTestRunner 
import unittest, time 
import sys 

class SeleniumTest1(unittest.TestCase): 
    def setUp(self): 
    self.driver = webdriver.Remote(command_executor="http://theNodeIP:5555/wd/hub",desired_capabilities={ "browserName": browser, "platform": platform, "node":node }) 
    self.driver.implicitly_wait(2) 

def mytest(self): 
    self.driver.get("http://url.com") 
    self.driver.find_element_by_css_xpath("test_some_stuff").click() 

def tearDown(self): 
    self.driver.quit() 

def suite(): 
    s1 = unittest.TestLoader().loadTestsFromTestCase(SeleniumTest1) 
    return unittest.TestSuite([s1]) 

def run(suite, report = "C:\\Python27\\Test_Cases\\Reports\\SeleniumTest1.html"): 
with open(report, "w") as f: 
    HTMLTestRunner.HTMLTestRunner(
       stream = f, 
       title = 'SeleniumTest1', 
       verbosity = 2, 
       description = 'SeleniumTest1' 
       ).run(suite) 

if __name__ == "__main__": 
args = sys.argv 

node=args[1] 

browser = args[2] 

platform = args[3] 

run(suite()) 
+0

Tại sao không chỉ đặt mã thử nghiệm lặp lại vào hàm v.d. def someRepeatTest (webdriver): # dòng mã của bạn vào đây ... –

Trả lời

1

Thay vì đi qua các đối số cho trình duyệt và nền tảng thông qua cuộc gọi shell của bạn, bạn có thể có kịch bản Python của bạn đọc một tập tin cấu hình. Về cơ bản, bạn sẽ có một tệp cấu hình liệt kê các trình duyệt mà bạn muốn chạy cùng với một danh sách các nền tảng.

Bí quyết là bạn cần có tệp bộ cấp cao hơn sẽ gọi các thử nghiệm khác với mọi kết hợp. Vì vậy, bạn sẽ có một tập tin bộ sưu tập tập tin cấu hình này cho các kết hợp trình duyệt và nền tảng, thực hiện các bộ với các combo khác nhau.

Bạn thậm chí có thể song song việc thực hiện kiểm tra nếu có hỗ trợ đa luồng trong Python.

Ví dụ, trong Ruby, tôi sẽ đọc cấu hình của tôi từ tệp .yml và sau đó thực thi các cuộc gọi rake trong nhiều luồng với mỗi kết hợp nền tảng trình duyệt.

2

Tôi đã có thể kiểm tra hai trình duyệt cùng một lúc bằng mô-đun nose_parameterized. (Bạn không cần phải sử dụng các Á hậu kiểm tra mũi để sử dụng các mô-đun nose_parameterized.)

from django.test import LiveServerTestCase 
from nose_parameterized import parameterized 
from selenium import webdriver 


class UITest(LiveServerTestCase): 

    def setUp(self): 
     self.selenium = { 
      'chrome': webdriver.Chrome(), 
      'firefox': webdriver.Firefox(), 
     } 

    def tearDown(self): 
     for browser in self.selenium: 
      self.selenium[browser].quit() 

    testdata = [ 
     ('chrome',), 
     ('firefox',), 
    ] 

    @parameterized.expand(testdata) 
    def test_something(self, browser): 
     driver = self.selenium[browser] 
     # [...] 

Để sử dụng Selenium Grid, như câu hỏi của bạn yêu cầu, chỉ cần thay đổi cho phù hợp với webdrivers.

+0

Như bạn có thể "thành công thiết lập SeleniumGrid để chạy thử nghiệm Python của tôi", xin vui lòng giúp tôi với vấn đề của tôi ở đây https://stackoverflow.com/q/45127482/ 248616. Cảm ơn rất nhiều! –

Các vấn đề liên quan