1. register.py 函数文件
# 测试需求2:(作业)
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('python14','123456', '123456')
print(res)
'''
用例如下:
1.账号输入为空
预期结果:{"code": 0, "msg": "所有参数不能为空"}
实际结果:
2.密码输入为空
预期结果:{"code": 0, "msg": "所有参数不能为空"}
实际结果:
3.注册成功
预期结果:{"code": 1, "msg": "注册成功"}
实际结果:
4.账号已存在
预期结果:{"code": 0, "msg": "该账户已存在"}
实际结果:
5.两次密码不一致
预期结果:{"code": 0, "msg": "两次密码不一致"}
实际结果:
6.账号长度小于6位,注册失败
预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
实际结果:
7.账号长度大于18位,注册失败
预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
实际结果:
8.密码长度小于6位,注册失败
预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
实际结果:
9.密码长度大于18位,注册失败
预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
实际结果:
'''
2.test_register.py 测试用例文件
'''
==================================
cooding:utf-8
@Time :2020/6/13 14:40
@Author :henry
@Email :yinpingwei@gmail.com
@File :test_register.py
@Software:PyCharm
===================================
'''
print('''
设计了9条测试用例如下:
用例如下:
1.账号输入为空
预期结果:{"code": 0, "msg": "所有参数不能为空"}
实际结果:
2.密码输入为空
预期结果:{"code": 0, "msg": "所有参数不能为空"}
实际结果:
3.注册成功
预期结果:{"code": 1, "msg": "注册成功"}
实际结果:
4.账号已存在
预期结果:{"code": 0, "msg": "该账户已存在"}
实际结果:
5.两次密码不一致
预期结果:{"code": 0, "msg": "两次密码不一致"}
实际结果:
6.账号长度小于6位,注册失败
预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
实际结果:
7.账号长度大于18位,注册失败
预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
实际结果:
8.密码长度小于6位,注册失败
预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
实际结果:
9.密码长度大于18位,注册失败
预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
实际结果:
''')
import unittest # 导入unittest模块
from py30.class_work_two.register import register # 从(class_work_two)包.(register)模块 导入(register)函数
import ddt # 引入ddt模块
# 用例
use_case = [
# 用例1:账号输入为空
{'username':'','password1':'123456','password2':'123456','expected':{"code": 0, "msg": "所有参数不能为空"},'title':'账号输入为空'},
# 用例2:密码输入为空
{'username':'python14','password1':'','password2':'','expected':{"code": 0, "msg": "所有参数不能为空"},'title':'密码输入为空'},
# 用例3:注册成功
{'username':'python14','password1':'123456','password2':'123456','expected':{"code": 1, "msg": "注册成功"},'title':'注册成功'},
# 用例4:账号已存在
{'username':'python26','password1':'123456','password2':'123456','expected':{"code": 0, "msg": "该账户已存在"},'title':'账号已存在'},
# 用例5:两次密码不一致
{'username':'python15','password1':'123456','password2':'12345678','expected':{"code": 0, "msg": "两次密码不一致"},'title':'两次密码不一致'},
# 用例6:账号长度小于6位,注册失败
{'username':'pytho','password1':'123456','password2':'123456','expected':{"code": 0, "msg": "账号和密码必须在6-18位之间"},'title':'账号长度小于6位,注册失败'},
# 用例7:账号长度大于18位,注册失败
{'username':'python30qilehaokaix','password1':'123456','password2':'123456','expected':{"code": 0, "msg": "账号和密码必须在6-18位之间"},'title':'账号长度大于18位,注册失败'},
# 用例8:密码长度小于6位,注册失败
{'username':'python16','password1':'12345','password2':'12345','expected':{"code": 0, "msg": "账号和密码必须在6-18位之间"},'title':'密码长度小于6位,注册失败'},
# 用例9:密码长度大于18位,注册失败
{'username':'python17','password1':'8888888888888888888','password2':'8888888888888888888','expected':{"code": 0, "msg": "账号和密码必须在6-18位之间"},'title':'密码长度大于18位,注册失败'},
]
@ddt.ddt
class Testlogregister(unittest.TestCase): # 定义测试类,继承unittest.TestCase
@classmethod # 装饰器,声明为类方法
def setUpClass(cls) -> None: # 这是类方法,意思是继承了类,这里重写了,只会执行一次
print('=========== 测试用例类{}开始执行了'.format(cls))
@classmethod # 装饰器,声明为类方法
def tearDownClass(cls) -> None: # 这是类方法,意思是继承了类,这里重写了,只会执行一次
print('=========== 测试用例类{}执行结束了'.format(cls))
def setUp(self) -> None: # 这是前置条件,定义了每个测试用例都会执行
print('************ 用例{}开始执行了'.format(self))
def tearDown(self) -> None: # 这是后置条件,定义了每个测试用例都会执行
print('************ 用例{}执行结束了'.format(self))
@ddt.data(*use_case) # 拆包传参
def test_logster(self,case): # 定一个变量接收
rop = register(case['username'],case['password1'],case['password2']) # 实际结果
# 断言:判断预期结果与实际结果是否一致
try: # 异常处理
self.assertEqual(rop,case['expected']) # 断言:判断预期结果与实际结果是否一致
except AssertionError as e: # 有异常进入这里
print('报错是{0}'.format(e)) # 打印提示异常信息
raise e # 把异常抛出
3.main.py 用例收集与生成报告文件
'''
==================================
cooding:utf-8
@Time :2020/6/13 14:40
@Author :henry
@Email :yinpingwei@gmail.com
@File :main.py
@Software:PyCharm
===================================
'''
# 用例收集
import unittest # 导入unittest模块
# 导入(from 包名.模块名 import 函数/变量)
from py30.class_work_two.test_register import Testlogregister
# 实例化TestLoader
s = unittest.TestLoader().discover('F:\PyChaer-workspare\py30') # 搜索目录下的用例
print(s) # 打印出用例
# 用例执行和生成测试报告
# 导入这个包
from BeautifulReport import BeautifulReport
cuto = BeautifulReport(s)
# 给到名称和创建html文件
cuto.report('2020-0612作业测试报告','beau.report.html')
# 第二种:HtmlTestRunner模块
# 导入这个包
# from HTMLTestRunnerNew import HTMLTestRunner
# # 创建一个html文件,以写入的模式打开,支持中文
# with open('cuto.report.html','wb') as fs:
# # 运行测试用例,将结果写入html当中
# runner = HTMLTestRunner(fs,title='2020-0612作业测试报告',tester='henry') # 实例化之后运行这个对象.可以指定给参数
# runner.run(s) # 调用run方法
4.html 报告