• day13_0820单元测试框架unittest


    自动化的基础

    • 怎么写用例,怎么运行用例 单元测试框架
    • 用例写在哪,测试程序怎么读取用例 Excel,CSV ,YAML, Json
    • 日志处理
    • 配置文件处理
    • 什么是接口,接口类型

    unittest 框架

    • 这是一个内置的框架
    • 单元测试框架
    • 通过代码怎么做测试

    单元测试

    • 单元测试 —> 模块测试 —> 集成测试 —> 系统测试
    • 就是对某个函数或类进行测试
    • 组织代码的最小单位

    单元测试怎么做

    • 1、自己编写用例函数,自己调用,自己生成报告,自己组织报告
    • 2、使用线程的单元测试框架

    单元测试框架的作用

    • 1、自动收集用例
    • 2、自动调用用例
    • 3、生成测试报告
    • 4、自动断言
    • 5、编写预置条件

    unittest的用法 怎么编写用例

    • 测试用例是卸载模块当中,模块名称 test_*.py
    • 写的测试用例(测试函数)也是以test开头
    • 写测试类 Test
    • 测试类要继承 unittest.TestCase

    运行测试用例

    • 1、运行单个测试函数
    • 2、运行单个测试类
    • 3、运行单个测试模块
    • 4、运行整个项目的用例

    项目工程目录结构

    • day12_单元测试框架 # 目录
      • report 目录
        • report.html
      • d1_单元测试.py
      • test_login.py # 测试用例
      • test_login1.py
      • 总结.md
      • 练习题.py
      • run.py # 主程序的入口
    # 被测函数代码
    def login():
    	"""登录功能,开发写的"""
    	response = {"message":None,
    				"code":None ,
    				"token":None
    	}
    	if username == 'kino' and passwd = '123456':
    		response['message'] = 'success'
    		response['code'] = 200
    		response['token'] = 'success'
    		return response 
    		return {"message":"good token",
    				"code": 200,
    				"token":"good token"
    		}
    	if username == '':
    		response['message'] = '用户名为空'
    		response['code'] = 400
    		return response
    	if password == '':
    		response['message'] = '密码为空'
    		response['code'] = 400
    		return response
    	else:
    		response['message'] = '用户名或密码错误'
    		response['code'] = 400
    		return response
    	
    # 测试调用函数
    # 方案一:
    print(login('kino','123456'))
    print(login('','123456'))
    print(login('kino',''))
    print(login('kio','12345688'))
    # 控制台输出:
    # {"message":"success",
    			# 	"code": 200,
    			#	"token":"good token"
    		# }
    # 方案二:
    case1 = {"username":"kino","passwod":"123456", 
    		"expected":
    		{"message":"success","code": 200,"token":"good token"}
    		}
    case2 = {"username":"","passwod":"123456", 
    		"expected":
    		{"message":"用户名为空","code": 400,"token":None}
    		}
    case3 = {"username":"kino","passwod":"", 
    		"expected":
    		{"message":"密码为空","code": 400,"token":None}
    		}
    case4 = {"username":"kino1","passwod":"1234567", 
    		"expected":
    		{"message":"用户名或密码错误","code": 400,"token":None}
    		}
    
    def valid_login():
    	"""测试登录功能是否正常"""
    	actual = login(case1['username'], case1['passwd'])
    	expected = case1['expected']
    	if actual == expeced:
    		print("测试用例通过")else:
    		print("测试用例失败")
    		
    def valid_login_assert():
    	"""测试登录功能是否正常"""
    	actual = login(case1['username'], case1['passwd'])
    	expected = case1['expected']
    	msg = 
    	f"""
    	expected:{expected}
    	acutal:{acutal}
    	"""
    	assert expected == actual, msg
    
    valid_login_assert() # 什么都没有发生,用例通过  写个测试函数来测试  传参,for循环也介意
    
    ### 单元测试  test_login.py
    import unittest
    
    class TestLogin(unittest.TestCase):
    	
    	def test_login(self):
    		actual = login(case1['username'],case1['password'])
    		expected = case1['expected']
    		# assert actual == expected
    		self.assertEqual(expected, acutal)
    	def test_login2(self):
    		actual = login(case2['username'],case2['password'])
    		expected = case2['expected']
    		# assert actual == expected
    		self.assertEqual(expected, acutal)
    	def test_login3(self):
    		actual = login(case3['username'],case3['password'])
    		expected = case3['expected']
    		# assert actual == expected
    		self.assertEqual(expected, acutal)
    	
    	def test_login4(self):
    		actual = login(case4['username'],case4['password'])
    		expected = case4['expected']
    		# assert actual == expected
    		self.assertEqual(expected, acutal)
    ### run.py
    # 1、测试用例 TestCase  
    # 2、测试集或者测试套件 TestCase
    # 3、测试加载器,TestLoader()
    import unittest
    import unittestreport
    # 填入开始目录 符合规则的用例会自动生成
    suit = unittest.defaultTestLoader.discover('test')
    print(suit)
    
    # 运行
    result = unittest.TextTestRunner().run(suit)
    print(result)
    
    # 定制化的运行器和测试报告
    # pip install unittestreport
    runner = unittestreport.TestRunner(suit,
    								   title = "测试报告",
    								   tester = "荒年",
    								   desc="xxx项目生成的测试报告",
    								   tempaates = 1  # 2 模板
    	)
    runner.run()	
    print(result1)
    # 生成-report文件夹  report.html
    
    
    
    		
    		
    		
    
    
    	
    
    
    
    
    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
  • 相关阅读:
    Python数据挖掘 | 升级版自动查核酸
    JMeter界面和字体的调整
    怎样去除DataFrame字段列名
    HTML5 Canvas
    单片机C语言实例:4、数码管左右移显示
    【Elasticsearch专栏 07】深入探索:Elasticsearch的倒排索引如何进行模糊查询和通配符查询
    学习登录接口过程中的踩坑记录
    沁恒CH9102是一个USB总线的转接芯片,实现USB转高速异步串口
    Pytest的常用高级用法及示例
    LTE& NR ARQ
  • 原文地址:https://blog.csdn.net/weixin_47057243/article/details/126474589