比如我们是一个自动化测试人员,我们接到需求,需要做一个自动化脚本。
但是这个需求呢,是需要你同时处理多个设备/多个身份/多个driver的。比如小邪👿同学 去买 小饭同学的 手表。我们的整个流程是这样:
小饭同学 上架 手表 ------小邪👿同学对手表下订单-------小饭同学 确认订单准备发货-----小邪👿同学取消了订单--------小饭同学很生气点了举报投诉-------客服美眉及时打开浏览器之后看看这俩个闹事的叫什么----客服开始处理纠纷。
整个过程中呢,我们3个角色,其中闹事的俩人是appium操作移动手机端,处理纠纷的客服是selenium 浏览器端。
我们不用任何设计模式 一样可以写完这个脚本。但是复用性很差,假如领导说要你做几百个这种类型的脚本,你要怎么做?
可能想到的是封装,给不同身份 的人的各种操作功能都封装上。
然后呢 你觉得混在一起比较乱,想着给分开放吧。然后还有公共的功能,获取昵称等等,就放在公共区域。
其实按照你的做法 最终的最优解,就是工厂模式!也就是说 其实早有很多前辈早就按照我们上述的思想 走到了尽头,创建了工厂模式,我们后来者直接用就可以了。
工厂模式,顾名思义,就是做一个工厂,然后我们需要什么 它就造什么!
我这里只按照我的理解,给大家形象的做个比喻:
我们创建一个工厂,其中有个后勤部门,有若干个生产部门,1个前台。
这时候来了个客户,他找到前台说,我要做一个自行车,一个轮椅。
然后前台说没问题,然后紧接着就 联系 公司内的生产部门:自行车生产部门 和 轮椅生产部门了。让他们各自生产产品。
这时候自行车 和 轮椅部门 说到,我们其实就负责组装,有一些大零件其实公用的,都直接跟后勤部门要就可以了,比如轮子。所以他们各自跟后勤部门 要了一对轮子。然后按照不同的组装,生产了一个自行车 一个轮椅给到 客户
这就是工厂的 我个人的理解。我们就要亲手做了这三部分。:
class 后勤:
def 生产轮子:
class 自行车部门(继承后勤部门):
def 组装成自行车:
class 轮椅部门(继承后勤部门):
def 组装成轮椅:
class 前台:
def 接收客户需求:
给不同的生产部门派活
就是这么简单的理解,我们现在考虑如何实现我们上述买手表的脚本吧:
先看我们调用起来组装成各种复杂的逻辑流畅 脚本有多简单:
非常简单快捷,之后怎么复用/增删修改,都变得简单了。这就是高复用性,高拓展性,高可读性 的脚本。
那么我上面怎么实现的呢?
class Person:
def __init__(self,nicheng):
self.nicheng = nicheng
def get_nicheng(self):
print(self.nicheng)
class mj(Person):
def __init__(self ):
print("-----------------\n正在创建买家对象:" )
self.nicheng = '小邪😈同学'
self.driver = ''
self.login()
def login(self):
print('运行appium买家登陆脚本\n')
# self.driver.find('')
def xiadan(self):
print('买家在下单')
# self.driver.find('')
def quxiao(self):
print('买家取消订单')
# self.driver.find('')
class sj(Person):
def __init__(self):
print("-----------------\n正在创建商家对象:")
self.nicheng = '小饭同学'
self.driver = ''
self.login()
def login(self):
print('运行appium 商家登陆脚本\n')
# self.driver.find('')
def queren(self):
print('商家在确认订单')
# self.driver.find('')
def tousu(self):
print('商家在投诉')
# self.driver.find('')
def shoubiao(self):
print('商家在上架手表')
# self.driver.find('')
class KF(Person):
def __init__(self):
print("-----------------\n正在创建客服:")
self.driver = ''
self.login()
def login(self):
print('运行selenium 客服登陆脚本\n')
# self.driver.find('')
def jiufen(self):
print('运行客服处理纠纷脚本')
#self.driver.find('')
print('客服在看闹事双方昵称都叫什么:')
print('买家昵称:')
new_mj.get_nicheng()
print('商家昵称:')
new_sj.get_nicheng()
class Factory:
def create_user(self, shenfen):
if shenfen == 'mj':
return mj()
if shenfen == 'sj':
return sj()
if shenfen == 'kf':
return KF()
如上图:
Factory类就是 我们的前台,它负责接收客户需求shenfen,根据要不同身份的需求,来创建不同的对象
KF类就是创建我们客服的生产部门,它有自己的登陆脚本,处理纠纷脚本
sj类就是我们创建商家对象的生产部门,它有自己的登陆/确认订单/投诉/上架手表功能脚本
mj类就是我们创建买家对象的生产部门,它有自己的登陆/下单/取消订单功能脚本
Person类就是我们的后勤保障部门,它有个公共的获取昵称功能
好了大家可以仔细品味这个工厂模式,之后假如我们要加入新的身份和它自带的方法脚本。只需要加个生产部门即可。调用起来别提多方便了!