生成HTML报告
- 创建存放HTML报告的文件夹
- 创建输出HTML报告
注意生成HTML报告的时候,对它的命名,如果都叫resultreport.html的话,新运行出来的报告就会把之前的覆盖掉,所以一般都是用当时执行时的时间戳来命名
- time.time() 时间戳,获取1970到现在的格林威治时间
- time.localtime(时间戳) 将里面的时间戳本地化
- time.strftime(“想要的时间格式”,时间) 将时间以想要的格式打印出来
- 跑测试套件生成测试报告
异常捕捉与错误截图
当出现错误的时候,将当前出现错误的地方进行截图生成错误截图
driver.get_screenshot_as_file存放错误截图
当前路径下创建一个东西时当前路径可以用.来表示
此处有个断言,判断字符串hao_上网从这里开始,和加载出来的页面title是否相同,如果不相同调用截图将错误页面截取出来
页面title:
两个不相等,所以截取屏幕
数据驱动ddt(用数据的个数驱动方法执行的次数)
如果需要多次执行一个案例,比如说都是搜索,分别搜索中文,英文,数字,此时需要编写三个测试用例吗?
像这样,除了搜索内容外其他都没什么太大变动的,就可以利用数据驱动来做
而python 的unittest 没有自带数据驱动功能。所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成
1. 使用ddt要先引包
from ddt import ddt,data,file_data,unpack
2. 类前要标注 @ddt 引入ddt
3. 要测几组数就写几个数据
@data("123","隐秘的角落","morning")
def test_ddt(self,value):
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys(value)
driver.find_element_by_id("su").click()
time.sleep(2)
4. 如果有每组有多个参数的话,需要加上 @unpack
@unpack是把data中的每一组的几个参数,映射到方法的几个参数上
@data(["123",u"123_百度搜索"], ["隐秘的角落",u"隐秘的角角儿_百度搜索"], ["morning",u"morning_百度搜索"])
@unpack
def test_ddt(self,value,except_value):
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys(value)
driver.find_element_by_id("su").click()
time.sleep(2)
# 判断搜索的网页title和我们期望的一样不
self.assertEqual(driver.title,except_value,msg="两个不一样!!")
5. 但是当想要执行的参数很多,此时写在方法头很长一串就不太美观,可以将参数写在txt或json文件中,然后进行读取
① 读txt文件中的数据
-
从txt文件当中读取数据跑测试用例(注意,txt文件必须是以data打头)
-
读取txt文件中的数据
def getCsv(file_name):
rows=[]
path=sys.path[0]
with open(path+'/data/'+file_name,'rt') as f:
readers = csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
for row in readers:
temprows=[]
for i in row:
temprows.append(i)
rows.append(temprows)
return rows
- 然后所写的方法前要加
@data(* getCsv(‘test_baidu_data.txt’))
@data(*getCsv('test_baidu_data.csv'))
@unpack
def test_ddt(self,value,except_value):
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys(value)
driver.find_element_by_id("su").click()
time.sleep(2)
# 判断搜索的网页title和我们期望的一样不
self.assertEqual(driver.title,except_value,msg="两个不一样!!")
② 读json文件中的数据
标签是@file_data(‘json文件名’)
@file_data('test_data_list.json')
@unpack
def test_ddt(self,value,except_value):
#def test_ddt(self,value):
driver = self.driver
driver.get(self.base_url + "/")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys(value)
driver.find_element_by_id("su").click()
time.sleep(2)
# 判断搜索的网页title和我们期望的一样不
self.assertEqual(driver.title,except_value,msg="两个不一样!!")