day15作业:敲写代码

第一个文件:test_cases.py

# ==========================
# @time:2019/10/29 20:01
# @Author:coco
# @File:test_cases.py
# @software:PyCharm
# ============================

import time
import unittest
from register import register
from read_excle02 import ReadExcle
from py23_15day.test_project.ddt import ddt, data

"""
ddt:能够实现数据驱动,通过用例用例数据,自动生成测试用例
自动遍历数据,自动生成测试用例

每遍历一条用例数据,会录成一个参数,传到生成的用例中去
"""


@ddt
class RegisterTestCase(unittest.TestCase):
    excle = ReadExcle("cases.xlsx", 'register')
    cases = excle.read_data_obj()

    @data(*cases)
    def test_register(self, case):
        # 第一步 准备用例数据
        # 获取用例的行号
        row = case.case_id + 1
        # 获取预期结果
        excepted = eval(case.excepted)
        # 获取用例入参
        data = eval(case.data)

        # 第二步 调用功能函数
        res = register(*data)
        # 第三步 比对预期结果和实际结果
        try:
            self.assertEqual(excepted, res)
        except AssertionError as e:
            self.excle.write_data(row=row, column=5, value='未通过')
            raise e
        else:
            self.excle.write_data(row=row, column=5, value='通过')

第二个文件:run_test.py

# ==========================
# @time:2019/11/3 11:14
# @Author:coco
# @File:run_test.py
# @software:PyCharm
# ============================

import unittest
import test_cases
from HTMLTestRunnerNew import HTMLTestRunner

# 创建测试套件
suite = unittest.TestSuite()

# 加载用例到套件
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(test_cases))

with open('zy_report.html', 'wb') as fb:
    # 创建测试运行程序
    runner = HTMLTestRunner(stream=fb,
                            title='我的测试报告',
                            description='案例运用',
                            tester='coco')
    # 执行测试用例
    runner.run(suite)

第三个文件:register.py

# ==========================
# @time:2019/10/28 20:10
# @Author:coco
# @File:register.py
# @software:PyCharm
# ============================

users = [{'user': 'python23', 'password': '1123456'}]


def register(username, password1, passwrod2):
    # 注册功能
    for user in users:  # 遍历出所有的账号,判断账号是否存在
        if username == user['user']:
            # 账号存在
            return {"code": 0, "msg": "该账号已存在"}
        else:
            if password1 != passwrod2:
                # 两次密码不一致
                return {"code": 0, "msg": "两次密码不一致"}
            else:
                # 账号不存在,密码重复,判断账号密码长度是否在6-18位之间
                if 6 <= len(username) >= 6 and 6 <= len(password1) <= 18:
                    # 注册账号
                    users.append({'user': username, 'password': passwrod2})
                    return {"code": 1, "msg": "注册成功"}
                else:
                    # 账号密码长度不对,注册失败
                    return {"code": 0, "msg": "账号和密码必须在6-18位之间"}

第四个文件:read_excle02.py

# ==========================
# @time:2019/10/30 21:27
# @Author:coco
# @File:read_excle02.py
# @software:PyCharm
# ============================
import openpyxl


class CaseData:
    """测试用例数据类,专门用来存放数据的"""
    pass


class ReadExcle(object):

    def __init__(self, filename, sheetname):
        self.filename = filename
        self.sheetname = sheetname

    def open(self):
        """打开工作表和表单"""
        self.wb = openpyxl.load_workbook(self.filename)
        self.sh = self.wb[self.sheetname]

    def read_data(self):
        """读取数据的方法"""
        # 打开工作薄和表单
        self.open()
        # 将表单中的内容,按行获取所有的格子
        rows = list(self.sh.rows)
        # 创建一个空列表,用例存放所有的用例数据
        cases = []
        # 获取表头,放到一个列表中
        title = [c.value for c in rows[0]]

        # 获取除表头以外的其他行中的数据
        for r in rows[1:]:
            # 每遍历一行,创建一个列表,用例存放该行的数据
            data = [c.value for c in r]
            # 将表头和该行的数据进行聚合打包,转换字典
            case_data = dict(zip(title, data))
            # 将该行的用例数据加入到cases这个列表中
            cases.append(case_data)
        # 关闭工作薄
        self.wb.close()
        # 将读取好的数据返回出去
        return cases

    def read_data_obj(self):
        """读取数据的方法,数据返回的是列表嵌套对象的形式"""
        # 打开工作薄和表单
        self.open()
        # 将表单中的内容,按行获取所有的格子
        rows = list(self.sh.rows)
        # 创建一个空列表,用例存放所有的用例数据
        cases = []
        # 通过列表推导式获取表头,放到一个列表中

        title = [c.value for c in rows[0]]
        # 获取除表头以外的其他行中的数据
        for r in rows[1:]:
            # 通过列表推导式,获取该行的数据,放到一个列表中,该行的数据
            data = [c.value for c in r]
            # 创建一个用例数据对象
            case = CaseData()
            # 将表头和该行的数据进行聚合打包,然后进行遍历
            for i in zip(title, data):
                # 通过反射机制将表头设为对象属性,对应值设为对象的属性值
                setattr(case, i[0], i[1])
                # 将该行的用例数据加入到cases这个列表中
            cases.append(case)
        # 关闭工作薄
        self.wb.close()
        # 将读取好的数据返回出去
        return cases

    def write_data(self, row, column, value):
        """写入数据"""
        # 打开工作薄和表单
        self.open()
        # 写入内容
        self.sh.cell(row=row, column=column, value=value)
        # 保存文件
        self.wb.save(self.filename)
        # 关闭工作薄
        self.wb.close()


if __name__ == '__main__':
    read = ReadExcle('cases.xlsx', 'register')
    # 读取
    # data = read.read_data_obj()
    # print(data)
    # read.write_data(2, 4, '通过')
    # read.write_data(3, 4, '未通过')

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值