2020-06-15使用excel文件里的用例来进行登录测试

1.test_register13.py 文件

# ================================
# -*- coding:utf-8 -*-
# @Author:henry
# @Time:2020/6/16 11:26  
# Email:yinpingwei@gmail.com
# @File: test_register13.py
# =================================


import unittest    # 导入unittest模块

import os    # 引入os 模块

from py30.class_Lesson13.register13 import register    # 从(class_work_two)包.(register)模块 导入(register)函数

import ddt    # 引入ddt模块

file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),'class_login.xlsx')    # 获取需要执行的excel文件的路径

from openpyxl import load_workbook     # 引入openpyxl 的函数 load_workbook

wb = load_workbook(file_path)      # 返回excel文件(class_login.xlsx)

sh = wb['login']       # 选择class_login.xlsx文件(wb)里的表单名称(login)

all_datas = []      # 最外层的空列表
titles = []     # 定义一个空列表
for item in list(sh.rows)[0]:      # 遍历第1行当中每一列,就是key名
    titles.append(item.value)       # 列表添加值
# print(titles)        # 打印出所获取的key值

for item in list(sh.rows)[1:]:  # 遍历数据行
    values = []
    for val in item:  # 获取每一行的值
        values.append(val.value)     # 列表添加值
    res = dict(zip(titles, values))  # title和values的数据,打包成字典
    res["expected"] = eval(res["expected"])  # 将expected的字符串,用eval转换为字典对象。
    if type(res['password1']) == int and type(res['password2']) == int:  # 如果密码1和密码2的类型是int类型
        res['password1'] = str(res['password1'])     # 那么将密码1转为字符串类型
        res['password2'] = str(res['password2'])     # 那么将密码2转为字符串类型

    all_datas.append(res)  # 追加到列表


# print(all_datas)     # 打印出字典形式的用例

@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(*all_datas)    # 拆包传参
    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      # 把异常抛出

2.main13.py 文件

# 用例收集
import unittest   # 导入unittest模块
# 导入(from 包名.模块名 import 函数/变量)
from py30.class_Lesson13.test_register13 import Testlogregister
# 实例化TestLoader
s = unittest.TestLoader().discover(r'F:\PyChaer-workspare\py30\class_Lesson13')   # 搜索目录下的用例
print(s)   # 打印出用例

# 用例执行和生成测试报告
# # 导入这个包
from BeautifulReport import BeautifulReport
cuto = BeautifulReport(s)
# 给到名称和创建html文件
cuto.report('2020-0612作业测试报告','beau.report.html')

3.register13.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('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位之间"}
实际结果:
'''
  1. class_login.xlsx 用例文件
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值