unittest_DDT数据驱动及BeautifulReport生产HTML测试报告
1、创建一个被测模块
users = [{'user': 'python34', 'password': '123456'}]
def register(username, password1, password2):
# 判断是否有参数为空
if not all([username, password1, password2]):
return {"code": 0, "msg": "所有参数不能为空"}
# 注册功能
for user in users: # 遍历出所有账号,判断账号是否存在
if username == user['user']:
# 账号存在
return {"code": 0, "msg": "该账户已存在"}
else:
if password1 != password2:
# 两次密码不一致
return {"code": 0, "msg": "两次密码不一致"}
else:
# 账号不存在 密码不重复,判断账号密码长度是否在 6-18位之间
if 6 <= len(username) >= 6 and 6 <= len(password1) <= 18:
# 注册账号
users.append({'user': username, 'password': password2})
return {"code": 1, "msg": "注册成功"}
else:
# 账号密码长度不对,注册失败
return {"code": 0, "msg": "账号和密码必须在6-18位之间"}
if __name__ == "__main__":
res = register('python14', '123456', '123456')
print(res)
2、创建获取Excel包
加载工作簿,一个excel文件
openpyxl模块下的load_workbook
封装为一个openpyxl.workbook.workbook.Workbook的对象
wb = load_workbook('case.xlsx')
wb.active上次关闭的sheet
读取表
表又被封装为worksheet对象
wb[表名]
ws = wb['Sheet1']
# # 可以获取总行/列数
print(ws.max_row,ws.max_column)
获取单元格
根据行row列column取单元格,行列都是从1开始
cell = ws.cell(row=2,column=1)
通过cell对象的value属性可以获取值
value只有两种类型,字符串和数值
如果cell里没有值,返回None
print(cell,cell.value)
from openpyxl import load_workbook
class open_excel:
def __init__(self,filename,sheetname):
self.wb = load_workbook(filename)
self.ws = self.wb[sheetname]
def open_sheet(self):
"""
把每行数据用字典封装起来,合并成一个集合,方便后面调用
:return:
"""
row = self.ws.max_row
column = self.ws.max_column
title = {}
data = []
for i in range(1,column+1):
wa = self.ws.cell(row=1,column=i).value
title[i]=wa
for i in range(1, row + 1):
temp = {}
for j in range(1,column+1):
temp[title[j]] = self.ws.cell(i,j).value
data.append(temp)
del data[0]
for i in data:
i['expect'] = eval(i['expect'])
return data
if __name__ == '__main__':
res = open_excel(r'D:\PYthon\untitled_test\Ningmengban\day18\case.xlsx','Sheet1')
s = res.open_sheet()
print(s)
3、测试用例模块
from unittest import TestCase
from ddt import ddt,data
from register import registers
from register import excel
res = excel.open_excel(r'D:\PYthon\untitled_test\Ningmengban\day18\case.xlsx', 'Sheet1')
case = res.open_sheet()
# ddt 数据驱动
@ddt
class test_case(TestCase):
@data(*case)
def test_log(self,case):
res = registers.register(
username=case['username'],
password1=case['password1'],
password2=case['password2']
)
self.assertEqual(res,case['expect'])
if __name__ == '__main__':
res = excel.open_excel(r'D:\PYthon\untitled_test\Ningmengban\day18\case.xlsx', 'Sheet1')
case = res.open_sheet()
print(case)
4、main模块
from BeautifulReport import BeautifulReport
import unittest
res = unittest.TestLoader()
ts = res.discover(r'D:\PYthon\untitled_test\Ningmengban\day18\register')
br = BeautifulReport(ts)
br.report('测试报告','玩玩.html',report_dir=r'D:\PYthon\untitled_test\Ningmengban\day18\register')