如果在任何时候都不清楚(或者如果白话不太正确),我很抱歉,但我会尽力而为!
第一次在论坛上发帖;)...
任何知情人士的帮助将不胜感激。
我正在使用 Selenium 和 Python 绑定来跨多个平台 (OS) 和浏览器对基于 Web 的应用程序进行自动化测试。
作为其中的一部分,我使用 HTMLTestRunner 模块在每次测试运行结束时生成报告。我的问题就在这里。
我的代码当前读取的结果是,对于相应列表中的每个平台/浏览器组合,HTMLTestRunner 模块被初始化并执行单个测试用例......依次生成报告并关闭。
由于 HTMLTestRunner 被设计为初始化,然后执行所有测试用例,然后使用所有测试结果创建单个报告,因此生成的报告会覆盖它自身(或导致格式问题),这会产生问题。
顺便说一句,如果我使用 'unittest.TextTestRunner()' 而不是 HTMLTestRunner ,那么本质上会发生同样的事情,只是结果显然显示在 shell 中。跑了 1 次测试...好吧...跑了 1 次测试...好吧...等
我尝试使用'unittest.main(exit=False) 行,它实际上似乎适用于shell 中显示的结果,例如,所有测试都在提供任何报告之前运行。
不幸的是,我还没有找到一种在 HTMLTestRunner 中使用此功能的方法。
(我怀疑有人会回来使用元类来动态生成测试,而不是像这样循环执行代码行。虽然我研究了这个,但我发现自己完全不知道如何实现这个和一个许多开发人员类型告诉我,这是我们要避开的事情(不想在这里开始辩论!)。)
无论如何,我正在使用的代码的简化示例如下:
global platform_list
platform_list = ['XP','VISTA','LINUX','WIN8','MAC']
global browser_list
browser_list = ['internet explorer','firefox','chrome','safari','opera']
class configuration(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Remote(command_executor= executor, desired_capabilities={'platform': platform, 'browserName': browser})
self.driver.implicitly_wait(30)
self.base_url = environment
self.verificationErrors = []
self.accept_next_alert = True
def is_element_present(self, how, what):
try: self.driver.find_element(by=how, value=what)
except NoSuchElementException, e: return False
return True
def is_alert_present(self):
try: self.driver.switch_to_alert()
except NoAlertPresentException, e: return False
return True
def close_alert_and_get_its_text(self):
try:
alert = self.driver.switch_to_alert()
alert_text = alert.text
if self.accept_next_alert:
alert.accept()
else:
alert.dismiss()
return alert_text
finally: self.accept_next_alert = True
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
class test_case_A(configuration):
def test_case_A(self):
try:
some code
except:
some code
class test_case_B(test_case_A):
def test_case_B(self):
self.test_case_A()
try:
some code
except:
some code
unit_test_suite = unittest.TestSuite()
unit_test_suite.addTest(test_case_A('test_case_A')), (test_case_B('test_case_B'))
results = file('results.html', 'wb')
runner = HTMLTestRunner.HTMLTestRunner(stream = results, title = 'Whatever', description = 'Whatever')
global platform
global browser
for platform in platform_list:
for browser in browser_list:
unittest.TextTestRunner().run(unit_test_suite)
我只想声明,虽然上述代码的某些元素可能是不必要的,例如全局声明,但实际上它们是必需的!
任何帮助将不胜感激!非常感谢...