最近学习python+selenium实战,在生成html测试报告文件时,由于代码写的与书尚不完全一致,导致出现运行失败的问题,在此记录:
生成html测试报告的过程:
1.需要使用HTMLTestRunner.py,它是python的标准库unittest的一个扩展,下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html,下载完成后复制到在python安装路径的/lib文件夹下(我用的是anaconda3,复制到我安装路径的C:\ProgramData\Anaconda3\Lib中)
2.由于刚下载的HTMLTestRunner.py是python2语法写的,我自己用的是python3,需要修改文件中的一些内容才使用python3
import StringIO--->import io
(2)line539:
self.outputBuffer=StringIO.StringIO()--->self.outputBuffer=io.StringIO()
(3)line631:
print >> sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime) --->
print (sys.stderr, '\nTime Elapsed: %s' % (self.stopTime-self.startTime))
(4)line642:
if not rmap.has_key(cls): --->if not cls in rmap:
(5)line766:
uo =o.decode('latin-1') ---> uo=e
(6)line772:
ue = e.encode('latin-1') --->ue = e
3.案例:百度搜索的测试用例来生成html测试报告
step1:创建htmlRepoert_baidu.py,代码如下
step2:导入HTMLTestRunner,unittest等
#导入HTMLTestRunner
from selenium import webdriver
import unittest
from HTMLTestRunner import HTMLTestRunner
import time
from _io import open
#测试点击百度,生成html报告
#定义类继承unittest.TestCase
class Baidu(unittest.TestCase):
'''百度搜索测试生成html报告'''
#定义setup()设置驱动,定义变量
def setUp(self):
#设置驱动
self.driver =webdriver.Firefox(executable_path="D:\\Program Files (x86)\\Mozilla Firefox32\\firefox.exe")
#设置隐式等待时间
self.driver.implicitly_wait(10)
#设置要访问的url
self.base_url ="http://www.baidu.com"
#定义要测试方法
def test_baidu_search(self):
'''测试搜索HTMLTestRunner'''
#获取驱动
driver = self.driver
#访问url
driver.get(self.base_url)
#搜索等操作
driver.find_element_by_id("kw").send_keys("HTMLTestRunner")
driver.find_element_by_id("su").click()
#释放资源
def tearDown(self):
self.driver.quit()
#利用unittest执行单元测试
if __name__ == "__main__":
#创建测试集
testSuite = unittest.TestSuite()
#添加测试案例
testSuite.addTest(Baidu("test_baidu_search"))
#定义测试报告存放的位置和名称
#给文件名添加时间,防止被覆盖更新,需要先导入time模块的包
now = time.strftime("%Y_%m_%d_%H:%M:%S")
fileName = "./"+ now + "result.html"
htmlFilePos = open(fileName,"wb")
#定义具体的测试报告
runner = HTMLTestRunner(stream=htmlFilePos,title="百度搜索的测试报告",description="用例执行情况:")
#运行测试用例
runner.run(testSuite)
#关闭报告文件
htmlFilePos.close()
4.运行之后报错信息:
Traceback (most recent call last):
File "D:\study-test\java_test_mar\pySeleniumBook\src\chap08\CreateHtmlReport\htmlReport_Baidu.py", line 53, in <module>
htmlFilePos = open(fileName,"wb")
OSError: [Errno 22] Invalid argument: './2018_06_08_09:29:43result.html'
由于是初学,python语言语法不清晰,认真检查了与书上的写法对比+度娘没查出来那里写错了,跑去问同学她也纳闷了会,好像没错的呀,过了会跟我说你是不是文件名拼错了,我说不造QAQ,然后她跟我发了张度娘的图:
5.深坑所在:windows的文件名不能包含冒号!多么痛的领悟。
#给文件名添加时间,防止被覆盖更新,需要先导入time模块的包
now = time.strftime("%Y_%m_%d_%H:%M:%S")
6.然后我度娘了一下window文件名规范,手敲一遍:
(1)格式:主文件名.扩展名
(2)文件名最多达255字符
(3)可用多间隔符的扩展名,如:a.b.c作为文件名
(4)文件名可包含空格,但是不能包含?:*"/;<>
(5)不区分大小写和中英文