终于到了展示测试报告的环节了,下面我们学习使用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是脚本运行结果的总状态,即多少个用例成功,多少个用例失败。
这里还有一个过滤功能,用户既可以查看所有用例的执行结果,也可以只查看局部用例,如那些运行失败的用例。
本章开篇引用了一个经典的实例,是为了让读者可以更快上手Selenium,快速了解它的精华内容。如果能掌握这一章的内容,就可以编写一些简单的自动化测试脚本了。尤其是对于那些要借助数据驱动的自动化测试用例,完全可以套用本章的模板,非常有效。
以上笔者的经历更像一张横向的知识网,创建了一个交流平台 914172719 ,群内有各种技术同行交流、学习资料、面试经验等。其中用到jenkins、docker、moutebank、python编程等,还需要花更多的精力去深入学习,当每项技能都能掌握到一定深度,才能称为一个完整的知识体系。
最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!
转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!
面试经:一线城市搬砖!又面软件测试岗,5000就知足了…
面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…
什么样的人适合从事软件测试工作?
那个准点下班的人,比我先升职了…
测试岗反复跳槽,跳着跳着就跳没了…