問題描述
我有一個名為 basetestcase() 的父測試類這是由所有測試類繼承的
I have a parent test class named as basetestcase() This is inherited by all the test classes
class BaseTestCase(unittest.TestCase):
driver = None
browser = read from command line
operatingSystem = read from command line
url = read from command line
@classmethod
def setUpClass(cls):
"""
SetUp to initialize webdriver session, pages and other needed objects
Returns:
None
"""
# Get webdriver instance
# Browser should be read from the arguments
if browser == "iexplorer":
cls.driver = webdriver.Ie()
elif browser == "firefox":
cls.driver = webdriver.Firefox()
elif browser == "chrome":
cls.driver = webdriver.Chrome()
else:
cls.driver = webdriver.PhantomJS()
# Similarly I want to get operating system and url also from command line
driver.get(url)
print("Tests are running on: " + operatingSystem)
然后我有兩個單獨的測試類:
Then I have two separate test classes:
class TestClass1(BaseTestCase):
@classmethod
def setUpClass(cls):
super(TestClass1, cls).setUpClass()
# Create object of another class to use in the test class
# cls.abc = ABC()
def test_methodA(self):
# self.abc.methodFromABC() # This does not work
# Not sure if I can use self.driver as it was defined as cls.driver in the setUpClass()
self.driver.find_element(By.ID, "test_id").click()
if __name__ == '__main__':
unittest.main(verbosity=2)
這是第二類,兩個類都在單獨的 .py 文件中
This is the 2nd class, both the classes are in separate .py files
class TestClass2(GUIBaseTestCase):
@classmethod
def setUpClass(self):
super(TestClass2, self).setUpClass()
def test_methodA(self):
self.driver.find_element(By.ID, "test_id").click()
if __name__ == '__main__':
unittest.main(verbosity=2)
然后我有一個測試套件腳本,一個單獨的 .py 文件,它將它們組合在一起在一個套件中運行
Then I have a test suite script, a separate .py file which clubs them together to run in a suite
import unittest
from tests.TestClass1 import TestClass1
from tests.TestClass2 import TestClass2
# Get all tests from TestClass1 and TestClass2
tc1 = unittest.TestLoader().loadTestsFromTestCase(TestClass1)
tc2 = unittest.TestLoader().loadTestsFromTestCase(TestClass2)
# Create a test suite combining TestClass1 and TestClass2
smokeTest = unittest.TestSuite([tc1, tc2])
unittest.TextTestRunner(verbosity=2).run(smokeTest)
我想運行測試套件,并想從命令行向 basetestcase 提供瀏覽器、操作系統和 url,這些參數直接由 basetestcase.py 使用.實際測試類繼承 basetestcase.
I want to run the test suite and want to provide browser, operating system and url to the basetestcase from the command line and these arguments are directly used by basetestcase.py. Actual test classes inherit the basetestcase.
您能否幫助我以最佳方式從命令行獲取這些值并提供給基本測試用例?
Could you please help me with how to get these values from the command line in the best way and provide to the basetestcase?
推薦答案
我也很難在多個瀏覽器上運行相同的測試用例.經過多次迭代、反復試驗以及朋友們的意見,我為我的項目實施了以下解決方案:
I also struggled to run the same test cases on multiple browsers. After a lot of iterations, trial and error and input from friends I implemented the following solutions to my projects:
這里的 TestCase 是包含所有測試的類,瀏覽器驅動程序為 None.SafariTestCase 繼承 TestCase 并覆蓋 setUpClass 并將瀏覽器驅動程序設置為 safari 驅動程序,與 ChromeTestCase 相同,您可以為其他瀏覽器添加更多類.可以在 TestSuite 文件中獲取命令行輸入,并根據參數有條件地加載測試:
Here TestCase is the class that has all the tests and the browser driver is None. SafariTestCase inherits the TestCase and overrides setUpClass and sets the browser driver to be safari driver and same with the ChromeTestCase and you can add more class for other browsers. Command Line input can be taken in the TestSuite file and conditionally load tests based on the arguments:
class TestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.browser = None
def test_1(self):
self.assert(self.browser.find_element_by_id('test1')
def test_2(self):
self.assert(self.browser.find_element_by_id('test2')
def test_3(self):
self.assert(self.browser.find_element_by_id('test3')
@classmethod
def tearDownClass(cls):
cls.browser.quit()
class SafariTestCase(TestCase):
@classmethod:
def setUpClass(cls):
cls.browser = webdriver.Safari(executable_path='/usr/bin/safaridriver')
class ChromeTestCase(TestCase):
@classmethod:
def setUpClass(cls):
cls.browser = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver')
在運行器文件TestSuite.py中:
In the runner file TestSuite.py:
import TestCase as tc
if len(sys.argv) == 1:
print("Missing arguments, tell a couple of browsers to test against.")
sys.exit(1)
if sys.argv[1] == 'safari':
test = unittest.TestLoader().loadTestsFromTestCase(tc.SafariTestCase)
if sys.argv[1] == 'chrome':
test = unittest.TestLoader().loadTestsFromTestCase(lt.ChromeTestCase)
unittest.TextTestRunner().run(test)
這篇關于Python unittest 將參數傳遞給父測試類的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!