r一、准备
1、本节用到的模块——HTMLTestRunner
1)下载:下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
鼠标右键→目标另存为,保存到本地。
2)安装:将下载的HTMLTestRunner.py文件复制到Python安装目录下即可
...\Python36\Lib
3)验证:在Python交互模式下引入HTMLTestRunner模块,如系统没有报错,则说明添加成功
2、修改HTMLTestRunner
因为HTMLTestRunner是基于Python2开发的,如果在Python3环境下使用,需要对其部分内容进行修改。使用notepad++打开HTMLTestRunner.py文件,修改如下内容:
第94行,将import StringIO修改成import io
第539行,将self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer= io.StringIO()
第631行,将print >> sys.stderr, ‘\nTime Elapsed: %s‘
%(self.stopTime-self.startTime)修改成print(sys.stderr, ‘\nTimeElapsed: %s‘ %
(self.stopTime-self.startTime))
第642行,将if not rmap.has_key(cls):修改成if not cls in rmap:
第766行,将uo = o.decode(‘latin-1‘)修改成uo = e
第772行,将ue = e.decode(‘latin-1‘)修改成ue = e
二、生成HTML测试报告
以百度搜索为例生成HTML测试报告
1、代码实现
# -*- coding: utf-8 -*- from selenium import webdriver from HTMLTestRunner import HTMLTestRunner import unittest,time class BaiduIdeTest(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "https://www.baidu.com/" def test_baidu_ide(self): driver = self.driver driver.get(self.base_url) driver.find_element_by_id("kw").clear() driver.find_element_by_id("kw").send_keys("HTMLTestRunner") driver.find_element_by_id("su").click() time.sleep(5) self.assertEqual(u"HTMLTestRunner_百度搜索", driver.title) def tearDown(self): self.driver.quit() if __name__ == "__main__": #构造测试套件 testsuit = unittest.TestSuite() testsuit.addTest(BaiduIdeTest("test_baidu_ide")) #定义测试报告存放路径 fp = open(‘./result.html‘,‘wb‘) #定义测试报告 runner = HTMLTestRunner(stream=fp, title=‘自动化测试报告‘, description=‘用例执行情况:‘) runner.run(testsuit) #关闭测试报告 fp.close()
2、代码分析
1)将HTMLTestRunner模块用import导入进来。
2)通过open()方法以二进制写模式(‘wb‘)打开当前目录下的result.heml,如果没有,则自动创建。
3)调用HTMLTestRunner模块下的HTMLTestRunner类。
stream 指定测试报告文件
title 定义测试报告的标题
description 定义测试报告的副标题
4)通过HTMLTestRunner的run()方法来运行测试套件中的测试用例
5)关闭测试报告文件close()
3、代码效果
4、tips
代码执行的时候将鼠标放到“if __name__ == "__main__":”右键选择“Run‘baidu_ide_text‘” 而不要使用“Run untitest in baidu_ide_text‘”,否则无法生成测试报告
三、更易读的测试报告
通过Python的doc string类型的注释增强测试报告的可度性。
python代码注释分为两种:commen(普通注释#开头)和doc string(描述函数、类和方法三引号表示)
1、代码实现
...... class BaiduIdeTest(unittest.TestCase): ‘‘‘百度搜索测试‘‘‘ def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "https://www.baidu.com/" def test_baidu_ide(self): ‘‘‘搜索关键字‘‘‘ driver = self.driver driver.get(self.base_url) driver.find_element_by_id("kw").clear() driver.find_element_by_id("kw").send_keys("HTMLTestRunner") driver.find_element_by_id("su").click() time.sleep(5) self.assertEqual(u"HTMLTestRunner_百度搜索", driver.title) ........
2、代码效果
四、测试报告名称
使用python的time模块,在报告名称中加入当前时间增强测试报告文件的识别性。
1、知识准备
time.time():获取当前时间戳
time.ctime():当前时间的字符串形式
time.location():当前时间的struct_time形式
time.strftime():获得当前时间,可以将时间格式化字符串
常用格式化符号:
%Y:带世纪的年,2017
%y:不带世纪的年,17
%m:月份
%d:天
%H:24小时制的小时
%M:分
%S:秒
2、代码实现
...... if __name__ == "__main__": #构造测试套件 testsuit = unittest.TestSuite() testsuit.addTest(BaiduIdeTest("test_baidu_ide")) #按照一定格式获取当前时间 now = time.strftime("%Y%m%d_%H%M%S") #将当前时间加入到报告文件名称中 filename = ‘./‘+now+‘result.html‘ #定义测试报告存放路径 fp = open(filename,‘wb‘) #定义测试报告 runner = HTMLTestRunner(stream=fp, title=‘自动化测试报告‘, description=‘用例执行情况:‘) runner.run(testsuit) #关闭测试报告 fp.close()
3、代码效果
五、项目集成测试报告
将以上内容集成到项目的runtest.py文件中,使其作用于整个测试项目
1、代码实现
# -*- coding: utf-8 -*- from selenium import webdriver import unittest, time class YoudaoIdeTest(unittest.TestCase): ‘‘‘有道翻译测试‘‘‘ def setUp(self): self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.base_url = "http://www.youdao.com/" def test_youdao_ide(self): ‘‘‘中英翻译测试‘‘‘ driver = self.driver driver.get(self.base_url) driver.find_element_by_id("translateContent").clear() driver.find_element_by_id("translateContent").send_keys(u"自动化测试报告") driver.find_element_by_css_selector("button").click() time.sleep(5) self.assertEqual(u"【自动化测试报告】", driver.title) def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main()
2、代码效果