1.2.3 生成漂亮的测试报告
终于到了展示测试报告的环节了,下面我们学习使用HTMLTestRunner制作一张精美的HTML格式的测试报告。需要先下载HTMLTestRunner这个py文件,读者可以自行上网搜索。另外,为了后续方便使用,请确保此文件存放在测试脚本的同级目录中。
接下来我们所要做的事情非常简单,只需要把之前代码中的runner = unittest.TextTestRunner()替换成下面这段代码。
import HTMLTestRunner report_file = file('demo.html', 'wb') runner = HTMLTestRunner.HTMLTestRunner( stream = report_file, title = 'My first demo', description = 'My demo description' ) |
这样就完成了HTML测试报告的整合了。下面对代码进行分析。
首先,import HTMLTestRunner这个语句比较容易理解,即在调用模块之前需要导入HTMLTestRunner。而这个模块就是之前已经下载好并放入同级目录的HTMLTestRunner。然后,我们会看到如下代码。
report_file = file('demo.html', 'wb') |
它的含义是创建一个HTML文件并命名为demo.html,wb则表示以二进制的方式写入。
以下代码是使用HTMLTestRunner创建测试报告最核心、最关键的部分。
runner = HTMLTestRunner.HTMLTestRunner( stream = report_file, title='My first demo', description='My demo description' ) |
这里实例化了HTMLTestRunner模块下的HTMLTestRunner类。在实例化此类时,通常传入的参数是stream、title及description。第一个参数stream是文件流,此处只需要传入之前创建好的report_file文件对象即可;第二个参数title是报告的标题,用户可以设置任何自己想要的标题;第三个参数description是为报告写下的简单描述。
最后,调用runner对象的run方法并传入先前创建好的测试集对象。代码如下。
runner.run(data_driven_suite()) |
把data_driven_suite这个函数所返回的测试集对象传入runner.run方法中,这样就完成了一张精美的HTML测试报告。下面给出完整的代码。
import unittest from selenium import webdriver class BookFlight(unittest.TestCase): def __init__(self,username,password): unittest.TestCase.__init__(self, methodName='test_login') self.username = username self.password = password def setUp(self): self.driver = webdriver.Firefox() def test_login(self): driver = self.driver driver.get("Mercury Tours登录页面") assert "Mercury Tours" in driver.title username_edit = driver.find_element_by_name("userName") password_edit = driver.find_element_by_name("password") login_button = driver.find_element_by_name("login") username_edit.send_keys(self.username) password_edit.send_keys(self.password) login_button.click() assert "Find a Flight" in driver.title, "\n==> username:{0}\n==> password:{1}". \ format(self.username,self.password) def tearDown(self): self.driver.close() if __name__ == "__main__": def data_driven_suite(): data_repositories = [ {'usr':'mercury','pwd':'mercury'}, {'usr':'mercury1','pwd':'mercury'}, {'usr':'mercury2','pwd':'mercury'}, ] tests = [] for data in data_repositories: tests.append(BookFlight(data['usr'],data['pwd'])) return unittest.TestSuite(tests) import HTMLTestRunner report_file = file('demo.html', 'wb') runner = HTMLTestRunner.HTMLTestRunner( stream=report_file, title='My first demo', description='My demo description' ) runner.run(data_driven_suite()) |
生成的HTML测试报告如图1.18所示。
图1.18 完美的测试报告
从图1.18中可以看出,就像我们预期的那样,一共有3组数据,只有一组通过(pass)测试,另外两组都失败(fail)了。
关于测试报告中的各个关键元素,说明如下:标题是My first demo;Start Time是脚本运行的开始时间;Duration是测试执行的持续时间;Status是脚本运行结果的总状态,即多少个用例成功,多少个用例失败。
这里还有一个过滤功能,用户既可以查看所有用例的执行结果,也可以只查看局部用例,如那些运行失败的用例。
1.3 本章小结
本章开篇引用了一个经典的实例,是为了让读者可以更快上手Selenium,快速了解它的精华内容。如果能掌握这一章的内容,就可以编写一些简单的自动化测试脚本了。尤其是对于那些要借助数据驱动的自动化测试用例,完全可以套用本章的模板,非常有效。
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。