python-unittest用例的两种方法测试

unittest一条方法测试不同用例


先写成功能实现的代码

users = [{
          
   "user": "Nicholas", "password": "123456"}]

def register(username, password1, password2):

    tuple_1 = (username, password1, password2)
    # 判断是否有参数为空
    """所有参数不能为空"""
    if not all(tuple_1):
        return {
          
   "code": 0, "msg": "所有参数不能为空"}
    # 注册功能
    for user in users:  # 遍历出所有的账号,判断账号是否存在
        if username == user[user]:
            """此账号以存在"""
            return {
          
   "code": 0, "msg": "此账号以存在"}

    else:
        if password1 != password2:
            """两次密码不一致"""
            return {
          
   "code": 0, "msg": "两次密码不一致"}
            # 账户不存在,密码不重复,判断账号长度在6-18之间
        else:
            if 6 <= len(password2) <= 18:
                users.append({
          
   "user": username, "password": password2})
                return {
          
   "code": 1, "msg": "注册成功"}

创建一个类来调用方法并接收case数据


– 注意:在class中需要重新定义__init__方法,因为在调用class类的时候,传入参数会传到class类中,但是class类中最先是没有__init__方法,所以参数会传入class的父类unittest.TestCase,但是unittest.TestCase类不能接收case数据,所以要重新定义__init__方法,并且重新调用父类的super().init(methodName)方法,使父类方法生效


from student_work import register
import unittest


class test_cases(unittest.TestCase):

    def __init__(self, methodName, case1):
        self.case1 = case1
        super().__init__(methodName)

    def test_register_successfully(self):
        """123456"""
        data = self.case1["data"]
        expected = self.case1["expected"]
        rest = register(*data)
        self.assertEqual(expected, rest)

传入参数

import unittest
from student_work2 import test_cases
from HTMLTestRunnerNew import HTMLTestRunner
"""
case1 = {
    "data": ("Boss_sun", "1234567", "1234567"),
    "expected": {"code": 1, "msg": "注册成功"}
}
"""
cases = [
    {
          
   "data": ("Boss_sun", "1234567", "1234567"), "expected": {
          
   "code": 1, "msg": "注册成功"}},
    {
          
   "data": ("Nicholas", "1234567", "1234567"), "expected": {
          
   "code": 0, "msg": "此账号以存在"}},
    {
          
   "data": ("Boss_sun1", "1234567", "1234568"), "expected": {
          
   "code": 0, "msg": "两次密码不一致"}}

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

# 加载单条用例
"""
uses_case = test_cases("test_register_successfully", case1)
suite.addTest(uses_case)
"""
# 加载多条测试用例
# 多条用例也就是把字典内容汇总到了一个列表中,所有把所有的单条用例取出来也就行了,因此用for循环

for case1 in cases:
    uses_case = test_cases("test_register_successfully", case1)
    suite.addTest(uses_case)

# 测试运行程序
runner = HTMLTestRunner(stream=open("work2.html", "wb"),
                        title="Nicholas home work",
                        description="this is home work for Nicholas"
                        )
runner.run(suite)
经验分享 程序员 微信小程序 职场和发展