day16作业: 将day15的作业优化。加上ddt和html测试报告, 操作excel表格
说明:操作 xlsx表格 属于下节课内容,可不用表格保存测试数据;只需要用ddt、html 完成作业即可。
ddt数据驱动时,使用unittestreport库生成html测试报告,关于用例描述,作者木森 有说明,如下:
原文:https://unittestreport.readthedocs.io/en/latest/doc5_ddt/
第一步:沿用 day14 已设计好的测试用例表格 ( test_register_cases.xlsx ),如下:
第一步:沿用 day14 已设计好的测试用例表格 ( test_register_cases.xlsx ),如下:
第二步:建立项目结构,含一个存放测试报告的 reports 目录,目录如下:
第三步:安装相关的 第三方库:
a、openpyxl : 操作xlsx表格用 ;
b、unittestreport :生成html测试报告用 ;
c、ddt : 数据驱动用 ;
第4步:写代码,各py文件代码如下:
a、被测函数 register.py 代码如下(讲师提供) :
users = [{'user': 'python26', '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('python28', '123456', '123456')
print(res)
b、common.py 代码( 封装,获取xlsx表格数据 )如下:
import openpyxl
def get_cases_from_xlsx():
"""
用做读取 test_register_cases.xlsx 表格数据,返回一个 cases 列表
:return:
"""
# 读取excel中的数据
# 第一步:打开工作簿
# 表格的行、列
wb = openpyxl.load_workbook('test_register_cases.xlsx')
# 第二步:选取表单
sh = wb['register_case']
cases = []
# 第三步:读取数据
for row in range(2, sh.max_row+1):
dict_temp = {}
data = []
for column in range(2, sh.max_column+1):
if column == 2:
dict_temp['title'] = sh.cell(row=row, column=column).value
if column == 3:
data_username = sh.cell(row=row, column=column).value
# 如果读取到的用户名为None,把None替换成''
if data_username is None:
data.append('')
else:
data.append(data_username)
if column == 4:
data_password1 = sh.cell(row=row, column=column).value
# 如果读取到的密码1为None,把None替换成''
if data_password1 is None:
data.append('')
else:
data.append(str(data_password1))
if column == 5:
data_password2 = sh.cell(row=row, column=column).value
# 如果读取到的密码2为None,把None替换成''
if data_password2 is None:
data.append('')
else:
data.append(str(data_password2))
if column == 6:
dict_temp['expected'] = sh.cell(row=row, column=column).value
dict_temp['data'] = data
# print(dict_temp)
cases.append(dict_temp)
return cases
if __name__ == '__main__':
print(get_cases_from_xlsx())
c、test_register.py 代码如下:
import unittest
from unittestreport import ddt, list_data
import register
import common
@ddt
class TestClass(unittest.TestCase):
# 以下 data 在第2个位置或第3个位置都适配 unittestreport 中的 list_data;
# cases = [{'title': '验证 用户名已经被注册', 'data': ['python26', '123456', '123456'], 'expected': '该账户已存在'},
# {'title': '验证 正确的用户名、密码', 'data': ['test123', '1234567', '1234567'], 'expected': '注册成功'},
# ]
# cases = [{'title': '验证 用户名已经被注册', 'expected': '该账户已存在', 'data': ['python26', '123456', '123456']},
# {'title': '验证 正确的用户名、密码', 'expected': '注册成功', 'data': ['test123', '1234567', '1234567']},
# ]
# 调用common中已封装好的方法get_cases_from_xlsx() 获取测试数据
cases = common.get_cases_from_xlsx()
@list_data(cases)
def test_register(self, data):
actual_results = register.register(*data['data'])['msg']
self.assertEqual(data['expected'], actual_results)
d、run_test.py 代码如下:
import os
import unittestreport
import unittest
# 用 os.path 获取文件所在目录
file_path = os.path.realpath('__file__')
file_dir = os.path.dirname(file_path)
# 1、加载测试用例到套件中
suite = unittest.defaultTestLoader.discover(file_dir)
# 2、创建一个用例运行程序
runner = unittestreport.TestRunner(suite,
tester='测试人员—nicole',
filename="register函数测试报告_样式2",
report_dir="./reports",
title='register函数测试报告',
desc='register函数单元测试报告',
templates=2)
# 3、运行测试用例
runner.run()
e、执行结果如下:
生成的测试报告,如下:
本文来自博客园,作者:nicole_cute,转载请注明原文链接:https://www.cnblogs.com/Small-Big/p/15846928.html