属性动态管理和及unittest框架
一、属性动态管理机制
-
常规的属性添加方法
类属性添加
# 1、类里面的实例方法中:self.属性名 = 属性值
# 2、类外部:对象.属性名 = 属性值
class A:
def func(self):
# 类里面的方法中
self.name = '小小简'
a = A()
# 类外部
a.age = 18
实例属性添加
# 1、类里面的实例方法中:self.属性名 = 属性值 # 2、类外部:对象.属性名 = 属性值 class A: def func(self): # 类里面的方法中 self.name = '小小简' a = A() # 类外部 a.age = 18
class A: pass # 实例化一个对象 a = A() name = input('属性名:') value = input('属性值:') # 问题一:如何把上面输入的name和value的值,设置为对象a的属性,和属性值? # 问题二:如何把列表['age',18]中的两个值,设置为对象a的属性和属性值?
-
需求
class A: pass # 实例化一个对象 a = A() name = input('属性名:') value = input('属性值:') # 问题一:如何把上面输入的name和value的值,设置为对象a的属性,和属性值? # 问题二:如何把列表['age',18]中的两个值,设置为对象a的属性和属性值?\
动态添加属性
setattr(obj,name,value) 参数1:对象 参数2:属性名 参数3:属性值
动态获取属性
getattr(obj,name,`默认值`) 参数1:对象 参数2:属性名 参数3:属性不存在是返回的默认值(非必填)
动态删除属性
delattr(obj,name) 参数1:对象 参数2: 属性名
动态判断对象属性是否存在
hasattr(obj,name,默认值) 参数1:对象 参数2:属性名 参数3:默认值 属性存在返回True,不存在返回Flase
二:测试需求
登录功能校验函数 入参: 出参(返回值) :{"code":业务码,"msg":"提示信息"} 内部校验逻辑,账号密码是否为空, 账号密码是否正确 正常登录的账号为:python47 密码:lemonban 功能函数如下
def login_check(username=None, password=None): """ 登录校验的函数 :param username: 账号 :param password: 密码 : return: dict type """ if username and password : if username == 'python47' and password == 'lemonban': return {"code": 0, "msg": "登录成功"} else: return {"code": 1, "msg": "账号或密码不正确"} else: return {"code": 1, "msg": "所有的参数不能为空"}
用例设计
1、账号密码正确
入参:账号python35 密码lemonban
预期结果:{"code": 0, "msg": "登录成功"}
实际结果:
2、账号正确,密码错误
入参:账号python35 密码lemonban11
预期结果:{"code": 1, "msg": "账号或密码不正确"}
实际结果:
3、错误的账号
入参:账号python25 密码lemonban
预期结果:{"code": 1, "msg": "账号或密码不正确"}
实际结果:
4、账号为空
入参:账号为空 密码lemonban11
预期结果:{"code": 1, "msg": "所以的参数不能为空"}
实际结果:
5、密码为空
入参:账号Python6 密码为空
预期结果:{"code": 1, "msg": "所以的参数不能为空"}
实际结果
三、unittest框架
1、TestCase:测试用例
用例编写需求
1、定义一个类,让它继承unittest.TestCase
2、在测试类中定义方法(每个以test开头的方法,就是一条用例)
3、在测试方法中编写用例执行的逻辑代码
unittest中关于用例执行通过和失败的评判标准
用例执行过程中是否出现(断言异常)AssertionError,来评判用例是否执行通过
注意点:在unittest中比较预期结果和实际结果时,一定要用断言
class TestLogin(TestCase): def test_login_success(self): """登录成功的用例""" # 调用功能函数获取实际结果 result = login_check('python47', "lemonban") # 如果是做接口测试(调用 接口) # 预期结果 excepted = {"code": 0, "msg": "登录成功"} # 1、使用python中的关键字assert来断言(不推荐) # assert excepted == result # 如果条件不相等:抛出断言异常 # 2、unittest中提供的断言方法(推荐) self.assertEqual(excepted, result)
用例执行顺序
1、先按文件名,以ASCII进行排序
2、文件内的测试类,以ASCII对测试类的名称进行排序
3、测试类内的用例,以ASCII对用例方法的名称进行排序
2、TestSuite:测试套件
TestSuite:存放用例的用例集 收集用例到套件的几种方式:
1、通过用例文件的路径进行加载(常用,推荐)
suite = unittest.defaultTestLoader.discover(r'C:\project\py47\code_demo\testcases')
#注意点:目录的路径,不是py文件的路径
2、通过用例模块进行加载(不常用)
# 导入测试模块 from code_demo.testcases import test_login #加载模块用例到测试套件 suite = unittest.defaultTestLoader.loadTestsFromModule(test_login)
3、通过测试类收集(不常用)
# 导入测试类
from code_demo.testcases.test_demo import TestDemo
# 加载测试类用例到测试套件
suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestDemo)
3、TestRunner:测试运行器
unittest内置的运行器:
unittest.TextTestRunner(一般不用,没有报告)
# 收集用例到测试套件 suite = unittest.defaultTestLoader.discover(r'用例文件目录的路径') # 1、创建一个测试执行器 runner = unittest.TextTestRunner() # 2、执行测试套件中的所有用例 runner.run(suite) runner.run(suite)
使用第三方运行器生成报告
unittestreport
安装命令:pip install unittestreport
# 收集用例到测试套件 suite = unittest.defaultTestLoader.discover(r'用例文件目录的路径') from unittestreport import TestRunner runner = TestRunner(suite) runner.run()
BeautifulReport
安装命令 :pip install BeautifulReport
from BeautifulReport import BeautifulReport runner = BeautifulReport(suite) runner.report(description='测试报告'
本文来自博客园,作者:nicole_cute,转载请注明原文链接:https://www.cnblogs.com/Small-Big/articles/15829267.html