反射简介
反射就是通过指定的字符串(即关键字),从而获取对象中的方法或属性。反射在自动化测试中有非常广泛的应用,是关键字驱动框架的基础。Python中实现反射主要通过以下4个内置函数来完成:
hasattr:判断对象中是否有和关键字相匹配的属性或方法
getattr:获取对象中和关键字相匹配的属性或方法
setattr:设置对象中和关键字相匹配的属性值
delattr:删除对象中和关键字相匹配的属性或方法
反射函数
在关键字驱动框架中,常用的函数就两个:hasattr和getattr,本文也只介绍这两个函数。
数据准备--测试类和对象
class Reflect:def __init__(self):self.name = "zhangsan"self.color = '红色'def eat(self):print("{}正在吃{}苹果".format(self.name,self.color))def play(self,toil):print("{}正在玩{}的小玩具".format(self.name, self.color))ref = Reflect()hasattr:
方法格式
hasattr(object,keywords)
判断object对象中,是否有和keywords相匹配的方法和属性
有则返回:True
没有则返回:False
使用举例
#使用hasattr判断是否有和关键字相匹配的属性和方法# flag = hasattr(ref,"name") #结果为True,存在name属性# flag = hasattr(ref,"eat") #结果为True,存在eat方法flag = hasattr(ref,"Color") #结果为False,不存在Color方法(大小写敏感)print(flag)getattr:
方法格式
getattr(object,keywords)
获取object对象中,和keywords相匹配的属性或方法
属性
返回属性的值
方法
返回方法的引用
如果object中没有对应属性或方法,则会报错
使用举例
通过关键获取对象中的属性
#getarry的使用----通过关键字,获取对象中对应的属性值#通过字符串"name",获取ref对象中,name属性的值,并保存在变量str1中str1 = getattr(ref,"name")#通过字符串"color",获取ref对象中,color属性的值,并保存在变量str2中str2 = getattr(ref,"color")通过关键字获取对象中的方法,并执行该方法
#getarry的使用----通过关键字,获取对象中对应的方法,并执行#第一步:获取方法f_eat = getattr(ref,"eat")f_play = getattr(ref,"play")#第二步:执行方法f_eat() #ref对象中,eat方法没有形参f_play("奥特曼") #ref对象中,play方法有形参,所以必须传入参数
应用举例
做一个小程序,它有以下的功能:用户管理、商品管理、营销管理、数据统计四个模块,用户输入相应的指令后就可以进入对应的模块。
定义测试类 --- 提供四个模块入口,即方法
class ShopManager:def userManage(self):print("欢迎进入用户管理模块")def goodManage(self):print("欢迎进入商品管理模块")def market(self):print("欢迎进入营销管理模块")def statistic(self):print("欢迎进入数据统计模块")sm = ShopManager()根据用户的输入指令,访问指定模块
不使用反射的实现方式
#不使用反射的实现方式while True:target = input("-----请输入要进入的模块:")if target == "userManage":sm.userManage()elif target == "goodManage":sm.goodManage()elif target == "market":sm.market()elif target == "statistic":sm.statistic()else: #输入其它字符,则退出程序break反射的实现方式 #反射的应用while True:target = input("-----请输入要进入的模块:")if hasattr(sm,target):f = getattr(sm,target) #使用映射,根据输入的字符串,选择要执行的方法f()else: #输入其它字符,则退出程序break
文章转载自自动化测试知识分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




