在阅读虫师的Selenium2自动化测试实战,为了不让自己看了之后忘记,我还是写一下这个基于selenium的HTML测试报告
unittest是python自带的一个单元测试框架,我们利用unittest的一个扩展HTMLTestRunner生成HTML测试报告。(windows系统:下载HTMLTestRunner放到...Python35Lib目录下),HTMLTestRunner是基于Python2开发的,为了使其支持Python3,需要修改:
第
94
行
import
StringIO
修改成
import
io
第
539
行
self
.outputBuffer
=
StringIO.StringIO()
修改成
self
.outputBuffer
=
io.StringIO()
第
642
行
if
not
rmap.has_key(
cls
):
修改成
if
notcls
in
rmap:
第
631
行
print
>> sys.stderr,
'
Time Elapsed: %s'
%
(
self
.stopTime
-
self
.startTime)
修改成
print
(sys.stderr,
'
TimeElapsed: %s'
%
(
self
.stopTime
-
self
.startTime))
第
766
行 uo
=
o.decode(
'latin-1'
)
修改成 uo
=
e
第722行 ue = e.decode('latin-1')
修改成 ue = e
以下就是百度测试的一个案例:
import unittest, time
from HTMLTestRunner import HTMLTestRunner
class Mytest(unittest.TestCase):
'''百度搜索测试''' def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(10) self.base_url = "http://www.baidu.com" def test_baidu(self): '''搜索关键字:HTMLTestRunner''' driver = self.driver driver.get(self.base_url+"/") driver.find_element_by_id('kw').clear() driver.find_element_by_id('kw').send_keys('unitset') driver.find_element_by_id('su').click() #time.sleep(2) #title = driver.title #self.assertEqual(title,"unitset_百度sousuo") def tearDown(self): self.driver.quit() if __name__=="__main__": unittest.main() testunit = unittest.TestSuite() testunit.addTest(Mytest("test_baidu")) #按照一定格式获取当前时间 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(testunit) fp.close()
以上只是针对单个测试文件生成的测试报告,对于集成测试报告
test_case文件夹下有两个测试用例,分别为:
#百度测试文档 from selenium import webdriver import unittest from HTMLTestRunner import HTMLTestRunner import time class Mytest(unittest.TestCase): '''百度搜索测试''' def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(10) self.base_url = "http://www.baidu.com" def test_baidu(self): '''搜索关键字:HTMLTestRunner''' driver = self.driver driver.get(self.base_url+"/") driver.find_element_by_id('kw').clear() driver.find_element_by_id('kw').send_keys('unitset') driver.find_element_by_id('su').click() #time.sleep(2) #title = driver.title #self.assertEqual(title,"unitset_百度sousuo") def tearDown(self): self.driver.quit() if __name__=="__main__": unittest.main()
#有道测试 from selenium import webdriver import unittest import time class Mytest(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(10) self.base_url = "http://www.youdao.com" def test_youdao(self): driver = self.driver driver.get(self.base_url+"/") driver.find_element_by_id('translateContent').clear() driver.find_element_by_id('translateContent').send_keys('webdriver') driver.find_element_by_xpath('//*[@id="form"]/button').click() #time.sleep(2) #title = driver.title #self.assertEqual(title,"webdriver_有道搜索") def tearDown(self): self.driver.close() if __name__=="__main__": unittest.main()
我们对runtest进行修改:
#指定测试用例为当前文件夹下的test_case目录 test_dir = './test_case' discover = unittest.defaultTestLoader.discover(test_dir,pattern = 'test_*.py') if __name__=='__main__': #执行测试 #runner = unittest.TextTestRunner() #runner.run(suite) 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(discover) fp.close()
最终生成2017-08-21 15_26_03result: