day15_1作业: 将day14的作业优化。加上ddt和html测试报告。
步骤一:项目层级结构,如下:
步骤二:安装 ddt、unittestreport 库
第三步:各代码如下:
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)
'''
函数入参:参数1: 账号, 参数2:密码1 , 参数3: 密码2
参数全部传字符串类型,不考虑其他类型
函数内部:
1. 判断是否为空
2. 判断账号密码是否在6-18之间
3. 判断账号是否被注册过
4. 两次密码是否一致
5. 上面添加都校验通过才能注册成功,其他情况都注册失败
各种情况的返回结果如下:
注册成功 返回结果:{"code": 1, "msg": "注册成功"}
有参数为空, 返回结果 {"code": 0, "msg": "所有参数不能为空"}
两次密码不一致 返回结果:{"code": 0, "msg": "两次密码不一致"}
账户已存在 返回结果:{"code": 0, "msg": "该账户已存在"}
密码不在6-18位之间 返回结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
账号不在6-18位之间 返回结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
'''
"""
test_register.py 代码如下:
import unittest
from unittestreport import ddt, list_data
import register
@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']},
{'title': '验证 用户名、密码为空', 'expected': '所有参数不能为空', 'data': ['', '', '']},
{'title': '验证 用户名为空', 'expected': '所有参数不能为空', 'data': ['', '1234567', '1234567']},
{'title': '验证 用户名小于6', 'expected': '账号和密码必须在6-18位之间', 'data': ['test', '1234567', '1234567']},
{'title': '验证 密码小于6', 'expected': '账号和密码必须在6-18位之间', 'data': ['test456', '12345', '12345']},
{'title': '验证 用户名大于18', 'expected': '账号和密码必须在6-18位之间', 'data': ['test1234567890abcde', '123456', '123456']},
{'title': '验证 密码大于18', 'expected': '账号和密码必须在6-18位之间', 'data': ['test456', 'test1234567890abcde', 'test1234567890abcde']},
{'title': '验证 2个密码是否一致', 'expected': '两次密码不一致', 'data': ['test456', '123456', '654321']}
]
@list_data(cases)
def test_register(self, data):
actual_results = register.register(*data['data'])['msg']
self.assertEqual(data['expected'], actual_results)
run_test.py 代码如下:
# 用第三方html报告: https://gitee.com/lemon-test-official/unittestreport
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()
执行结果如下:
1.生成测试报告,测试报告中有用例描述;
补充知识:
导ddt的包方式不一样,装饰器那里的写法有区别 ;
本文来自博客园,作者:nicole_cute,转载请注明原文链接:https://www.cnblogs.com/Small-Big/p/15846809.html