python单元测试-TestCase&TestSuite【一条测试用例,多条测试用例unittest使用】【自己笔记】

python单元测试-TestCase&TestSuite

目录

python单元测试-TestCase&TestSuite

1.仅一条用例时单测【register单元测试】

2.一条测试用例时【testcase】

3.运行该条用例【run_test】

4.多条用例时单测testcase

5.测试用例运行run_test

6.重写init方法原因


1.仅一条用例时单测【register单元测试】

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位之间"}

 

2.一条测试用例时【testcase】

import unittest
from learning.practice.register import register

class RegisterTest(unittest.TestCase):
    # 重写init方法的作用:再父类的基础上进行扩展,导入参数
    def __init__(self, methodName, case_data):
        self.case_data = case_data
        # 调用父类的init方法super超类调用父类方法
        super().__init__(methodName)

    def test_register_pass(self):
        # 正常注册
        # 第一步:准备用例数据
        # 入参
        data = self.case_data["data"]

        # 预期结果
        excepted = self.case_data["excepted"]

        # 第二步:获取实际结果
        # 实际结果(传入参数,调用待测试的功能函数)
        # 元组进行拆包*
        res = register(*data)

        # 第三步:比较预期结果和实际结果(断言)
        # 断言预期和实际是否相等    assertEqual
        self.assertEqual(excepted, res)

 

3.运行该条用例【run_test】

import unittest
from learning.practice.demo1.testcase import RegisterTest
from HTMLTestRunnerNew import HTMLTestRunner

#单独一条用例数据
case1 = {"excepted": {"code": 1, "msg": "注册成功"},
         "data": ('python27', '123456', '123456')}

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

# 逐条加载
# 创建一条测试用例(一个测试用例对象)
case = RegisterTest("test_register_pass",case1)     #需要重写init方法,才能导入参数

#通过类创建对象时,参数会传到类的哪个方法int

#加载用例套件
suite.addTest(case)

#创建一个测试运行程序
runner = HTMLTestRunner(stream=open("demo1_report.html", "wb"), title="demo1测试报告", description="baobao",
                        tester="想")  # 以覆盖写入二进制方式

# 执行测试套件中的测试用例
runner.run(suite)

 

4.多条用例时单测testcase

【ps:文档注释"""正常注册"""】

import unittest
from learning.practice.register import register


class RegisterTest(unittest.TestCase):
    # 重写init方法的作用:再父类的基础上进行扩展,导入参数
    def __init__(self, methodName, case_data):
        self.case_data = case_data
        # 调用父类的init方法super超类调用父类方法
        super().__init__(methodName)

    def test_register_pass(self):
        """正常注册 """
        # 第一步:准备用例数据
        # 入参
        data = self.case_data["data"]

        # 预期结果
        excepted = self.case_data["excepted"]

        # 第二步:获取实际结果
        # 实际结果(传入参数,调用待测试的功能函数)
        # 元组进行拆包*
        res = register(*data)

        # 第三步:比较预期结果和实际结果(断言)
        # 断言预期和实际是否相等    assertEqual
        self.assertEqual(excepted, res)

 

5.测试用例运行run_test

import unittest
from learning.practice.demo1.testcase import RegisterTest
from HTMLTestRunnerNew import HTMLTestRunner

# 多条用例数据
cases = [{"excepted": {"code": 1, "msg": "注册成功"}, "data": ('python27', '123456', '123456')},
         {"excepted": {"code": 0, "msg": "所有参数不能为空"}, "data": ('python28', '123456', None)},
         {"excepted": {"code": 0, "msg": "两次密码不一致"}, "data": ('python29', '123456', '1234567')},
         {"excepted": {"code": 0, "msg": "该账户已存在"}, "data": ('python26', '123456', '123456')}]
"""
# 单独一条用例数据
case1 = {"excepted": {"code": 1, "msg": "注册成功"},
         "data": ('python27', '123456', '123456')}
"""
# 创建测试套件
suite = unittest.TestSuite()

# 通过循环来遍历用例数据,每遍历出来一条数据,就创建一个用例对象,将用例对象添加到套件中
for case_data in cases:
    # 逐条加载
    # 创建一条测试用例(通过测试用例类创建一个测试用例对象)
    case = RegisterTest("test_register_pass", case_data)  # 需要重写init方法,才能导入参数

    # 通过类创建对象时,参数会传到类的哪个方法int

    # 加载用例套件
    suite.addTest(case)

# 创建一个测试运行程序
runner = HTMLTestRunner(stream=open("demo1_report.html", "wb"), title="demo1测试报告", description="baobao",
                        tester="想")  # 以覆盖写入二进制方式

# 执行测试套件中的测试用例
runner.run(suite)

6.重写init方法原因

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值