6

OS とブラウザーが異なる複数のマシンで Python テストを実行するように SeleniumGrid を正常にセットアップしました。ただし、ノードへの参照はテスト ケース内にあるため、同じテスト ケースをノードごとに 1 回ずつ 3 回記述する必要があります。

私は、Python に関するあらゆる種類のオンライン提案を見てきました。ノードIPを外部ファイルに分離し、これをテストケースにインポートしますが、どれも機能していないようであるか、手順はJava用です。

Mozilla のこのファイルでは、テスト ケースでこのファイルをどのように設定したか、またはどのように実行するかがわかりません: http://viewvc.svn.mozilla.org/vc/projects/sumo/tests/frontend/python_tests /suite_sumo.py?view=マークアップ

Python テスト ケースを設定して、1 回しか記述しないようにするにはどうすればよいですか?

私のハブ コマンド プロンプトの手順は次のとおりです。

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

My Nodes コマンド プロンプトの手順は次のとおりです。

*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   

私のテスト ケースのコマンド プロンプトの手順は次のとおりです。

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

私のテストケースは次のとおりです。

# 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())
4

2 に答える 2

2

nose_parameterizedモジュールを使用して、一度に 2 つのブラウザーをテストすることができました。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]
        # [...]

あなたの質問が尋ねるように、Selenium Gridを使用するには、Webドライバーを適切に変更するだけです。

于 2016-12-05T20:05:27.253 に答える
1

シェル呼び出しを介してブラウザーとプラットフォームの引数を渡す代わりに、Python スクリプトに構成ファイルを読み取らせることができます。基本的に、実行したいブラウザーとプラットフォームのリストをリストした構成ファイルが必要です。

秘訣は、すべての組み合わせで他のテストを呼び出す、より高いレベルのスイート ファイルが必要だということです。したがって、ブラウザとプラットフォームの組み合わせについてこの構成ファイルをポーリングするスイート ファイルがあり、さまざまな組み合わせでスイートを実行します。

Python でマルチスレッドがサポートされている場合は、テストの実行を並列化することもできます。

たとえば、Ruby では、.yml ファイルから構成を読み取り、ブラウザー プラットフォームの組み合わせごとに複数のスレッドで rake 呼び出しを実行します。

于 2013-04-01T20:03:43.417 に答える