最初,我有 def setup() ,其中包含从另一个文件调用特定 Web 浏览器的选项,该文件包含有关如何设置 Web 浏览器的所有信息。备注未使用的浏览器。
def setUp(self):
# Choose the Web Browser to test with
operabrowser(self)
# chromebrowser(self)
...
def test_one()
...
def test_two()
...
我试图摆脱每次编辑测试文件的麻烦,我希望设置一个控制台输入来调用浏览器,并且我已添加到 def setup() 中。
browser_choice = input ( """Choose your browser
Opera, [Firefox], Chrome or Safari
> """ ).lower ()
if browser_choice == 'opera':
operabrowser()
else chromebrowser()
这适用于单个单元测试,但如果文件中有多个测试,它每次都会询问浏览器选择。
如何让此选项对于将在测试文件中运行的所有测试仅询问一次?我尝试了一些其他方法来解决这个问题,但都没有成功。
测试应该定义为类方法,在代码中它们似乎是独立的函数,与包含
setUp()
方法的类没有直接关系。你只需要像这样修改你的代码:
import unittest
class YouTests(unittest.TestCase):
def setUp(self):
q = 'Choose your browser Opera, [Firefox], Chrome or Safari >'
browser_choice = input (q).lower ()
if browser_choice == 'opera':
operabrowser()
else:
chromebrowser()
def test_one(self):
pass
def test_two(self):
pass
...
如果您有多个继承自
unittest.TestCase
的类,并且所有类都应使用相同的浏览器,则最好将浏览器选择插入到您的 global
范围中。例如:
browser_object = None
...
def operabrowser():
global browser_object
# Init opera object here
def chromebrowser():
global browser_object
# Init chrome object here
...
# Your tests using the browser_object
...
if __name__ == '__main__':
q = 'Choose your browser Opera, [Firefox], Chrome or Safari >'
browser_choice = input (q).lower ()
if browser_choice == 'opera':
operabrowser()
elif browser_choice == 'firefox':
...
else:
chromebrowser()
unittest.main()
我遵循您的建议,我可以使用所选的浏览器完全运行我的测试用例。 但我想知道如何通过子进程在测试套件中运行多个测试用例。我想我不能在每个TC中输入浏览器名称。你能给我建议吗?
-- MyTC.py:
<code>
class TC_01_Check_Get_OPOS_Version(unittest.TestCase):
def setUp(self):
vr_Input_Browser = 'Please choose Browser that you want to run'
vr_Selected_Browser = input(vr_Input_Browser)
#-- Run with Selected Browser:
if vr_Selected_Browser == "Chrome":
self.Driver = webdriver.Chrome()
elif vr_Selected_Browser == "Firefox":
self.Driver = webdriver.Firefox(service=FirefoxService(executable_path=GeckoDriverManager().install()))
#-- Open WebPage/ URL:
self.Driver.get(vr_TC_01_WebPage)
time.sleep(3)
self.Driver.maximize_window()
def test_1(self):
...
def tearDown(self):
time.sleep(10)
self.Driver.quit()
</code>
-- MyTestSuite.py:
<code>
import subprocess
subprocess.run ("MyTC1.py", shell=True)
subprocess.run ("MyTC2.py", shell=True)
subprocess.run ("MyTC3.py", shell=True)
subprocess.run ("MyTC4.py", shell=True)
</code>