【python自动化框架搭建】生成单元测试报告详细步骤

'''
要求 :
1、 设计至少五条用例

2、至少用两种方式往测试集合(套件)中添加测试用例

3、执行测试集合(套件)中的测试用例,生成测试报告
'''
# 测试的代码
# 设计用例,对此功能函数进行单元测试
users = [{'user': 'python23', 'password': '123456'}]


def register_test(username, password1, password2):
    # 注册功能
    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位之间"}
# data = ["test_0001", "12345678", "1234567"]
# result = register_test(*data)
# print(result)

#  上面已经被注册的账号:python23
#  入参三个:  账号    密码1  密码2
#  账号未被注册过,两个密码一样才能注册成功,其他情况都注册失败,对应的结果如下:
# 注册成功               预期结果:{"code": 1, "msg": "注册成功"}
# 两次密码不一致         预期结果:{"code": 0, "msg": "两次密码不一致"}
# 账户已存在             预期结果:{"code": 0, "msg": "该账户已存在"}
# 密码不在6-18位之间     预期结果:{"code": 0, "msg": "账号和密码必须在6-18位之间"}
# 编写测试用例
# 导入unittest模块和注册模块函数
import unittest
from Day13_2020_03_04.pack01.homework_practice.register import register_test

class TestRegister(unittest.TestCase):
    """账号注册类"""
    def setUp(self):
        # 每一条测试用例执行之前都会执行
        print("{}开始执行了".format(self))
    def tearDown(self):
        # 每一条测试用例执行之后都会执行
        print("{}执行完了".format(self))
    @classmethod
    def setUpClass(cls):
        # 执行这个测试用例类中的测试用例之前会执行
        print("{}开始执行测试用例类执行完了".format(cls))
    @classmethod
    def tearDownClass(cls):
        # 执行测试用例类全部执行完了,就会执行该方法
        print("{}执行测试用例类全部执行完了,就会执行该方法".format(cls))
    # 注册成功
    def test_register_pass(self):
        # 入参
        data = ["test_0001","12345678","12345678"]
        # 预期结果
        excepted = {"code": 1, "msg": "注册成功"}
        # 第一步:调用功能函数,传入参数(实际结果)
        result = register_test(*data)
        # 对比预期结果和实际结果
        self.assertEqual(excepted, result)
    # 两次输入密码不一致
    def test_register_pwd_different(self):
        # 入参
        data = ["test_0001", "12345678", "1234567"]
        # 预期结果
        excepted = {"code": 0, "msg": "两次密码不一致"}
        # 第一步:调用功能函数,传入参数(实际结果)
        result = register_test(*data)
        # 对比预期结果和实际结果
        self.assertEqual(excepted,result)
    # 账户已存在
    def test_username_already_exists(self):
        # 入参
        data = ["python23", "12345678", "12345678"]
        # 预期结果
        excepted = {"code": 0, "msg": "该账户已存在"}
        # 第一步:调用功能函数,传入参数(实际结果)
        result = register_test(*data)
        # 对比预期结果和实际结果
        self.assertEqual(excepted,result)
    # 密码小于6位
    def test_register_pwd_6(self):
        data = ["test_0002", "12345","12345"]
        # 预期结果
        excepted = {"code": 0, "msg": "账号和密码必须在6-18位之间"}
        # 第一步:调用功能函数,传入参数(实际结果)
        result = register_test(*data)
        # 第二步:比对预期结果和实际结果是否一致
        self.assertEqual(excepted,result)
    # 密码大于18位
    def test_register_pwd_18(self):
        data = ["test_0003", "12345909090990789098","12345909090990789098"]
        # 预期结果
        excepted = {"code": 0, "msg": "账号和密码必须在6-18位之间"}
        # 第一步:调用功能函数,传入参数(实际结果)
        result = register_test(*data)
        # 第二步:比对预期结果和实际结果是否一致
        self.assertEqual(excepted,result)
    # 账号小于6位
    def test_register_username_6(self):
        data = ["test", "12345678", "12345678"]
        # 预期结果
        excepted = {"code": 0, "msg": "账号和密码必须在6-18位之间"}
        # 第一步:调用功能函数,传入参数(实际结果)
        result = register_test(*data)
        # 第二步:比对预期结果和实际结果是否一致
        self.assertEqual(excepted,result)
    # 账号大于18位
    def test_register_username_18(self):
        data = ["test12345909090990789098", "12345678", "12345678"]
        # 预期结果
        excepted = {"code": 0, "msg": "账号和密码必须在6-18位之间"}
        # 第一步:调用功能函数,传入参数(实际结果)
        result = register_test(*data)
        # 第二步:比对预期结果和实际结果是否一致
        self.assertEqual(excepted,result)
    # 账号为空
    def test_register_username_none(self):
        data = [None, "12345678", "12345678"]
        # 预期结果
        excepted = {"code": 0, "msg": "账号和密码必须在6-18位之间"}
        # 第一步:调用功能函数,传入参数(实际结果)
        result = register_test(*data)
        # 第二步:比对预期结果和实际结果是否一致
        self.assertEqual(excepted,result)
    # 密码为空
    def test_register_pws_none(self):
        data = ["test_0004", None, None]
        # 预期结果
        excepted = {"code": 0, "msg": "账号和密码必须在6-18位之间"}
        # 第一步:调用功能函数,传入参数(实际结果)
        result = register_test(*data)
        # 第二步:比对预期结果和实际结果是否一致
        self.assertEqual(excepted,result)
"""
添加:测试程序启动文件
第一步:创建一个测试套件(unittest.TestSuite)
第二步:将测试用例加入到测试套件中
第三步:创建一个测试运行程序对象(unittest.TextTestRunner)
第四步:通过运行程序,去执行测试套件中的测试用例
"""
from HTMLTestRunnerNew import HTMLTestRunner
import unittest
from Day13_2020_03_04.pack01.homework_practice import test_register_case

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

# # 第三种方法:将一个模块中的所有测试用例,加载到测试套件
# loader = unittest.TestLoader()
# # login_test_case 标黄不影响
# suite.addTest(loader.loadTestsFromModule(test_register_case))

# 第四种方法:通过一个目录,去导入改目录下的所有模块中的测试用例
loader = unittest.TestLoader()
# r防止转义,注意测试用例的模块名称,要以test开头
suite.addTest(loader.discover(r"D:projectclass23Day13_2020_03_04pack01homework_practice"))

"""
stream:测试文件名字
verbosity:
title:报告的标题
description:相关的描述
tester:测试人员姓名
"""
runner = HTMLTestRunner(stream=open("report.html","wb"),
                        verbosity=2,
                        title="python第二份测试报告",
                        description="注册类测试报告",
                        tester="chen")
# 第四步:通过运行程序,去执行测试套件中的测试用例
runner.run(suite)

 输出测试HTML报告:

原文地址:https://www.cnblogs.com/python-test001/p/12420683.html