前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >工厂模式在自动化测试中的应用

工厂模式在自动化测试中的应用

作者头像
我去热饭
发布2022-05-19 13:05:12
7970
发布2022-05-19 13:05:12
举报
文章被收录于专栏:测试开发干货

比如我们是一个自动化测试人员,我们接到需求,需要做一个自动化脚本。

但是这个需求呢,是需要你同时处理多个设备/多个身份/多个driver的。比如小邪👿同学 去买 小饭同学的 手表。我们的整个流程是这样:

小饭同学 上架 手表 ------小邪👿同学对手表下订单-------小饭同学 确认订单准备发货-----小邪👿同学取消了订单--------小饭同学很生气点了举报投诉-------客服美眉及时打开浏览器之后看看这俩个闹事的叫什么----客服开始处理纠纷。

整个过程中呢,我们3个角色,其中闹事的俩人是appium操作移动手机端,处理纠纷的客服是selenium 浏览器端。

我们不用任何设计模式 一样可以写完这个脚本。但是复用性很差,假如领导说要你做几百个这种类型的脚本,你要怎么做?

可能想到的是封装,给不同身份 的人的各种操作功能都封装上。

然后呢 你觉得混在一起比较乱,想着给分开放吧。然后还有公共的功能,获取昵称等等,就放在公共区域。

其实按照你的做法 最终的最优解,就是工厂模式!也就是说 其实早有很多前辈早就按照我们上述的思想 走到了尽头,创建了工厂模式,我们后来者直接用就可以了。

工厂模式,顾名思义,就是做一个工厂,然后我们需要什么 它就造什么!

我这里只按照我的理解,给大家形象的做个比喻:

我们创建一个工厂,其中有个后勤部门,有若干个生产部门,1个前台。

这时候来了个客户,他找到前台说,我要做一个自行车,一个轮椅。

然后前台说没问题,然后紧接着就 联系 公司内的生产部门:自行车生产部门 和 轮椅生产部门了。让他们各自生产产品。

这时候自行车 和 轮椅部门 说到,我们其实就负责组装,有一些大零件其实公用的,都直接跟后勤部门要就可以了,比如轮子。所以他们各自跟后勤部门 要了一对轮子。然后按照不同的组装,生产了一个自行车 一个轮椅给到 客户

这就是工厂的 我个人的理解。我们就要亲手做了这三部分。:

class 后勤:

def 生产轮子:

class 自行车部门(继承后勤部门):

def 组装成自行车:

class 轮椅部门(继承后勤部门):

def 组装成轮椅:

class 前台:

def 接收客户需求:

给不同的生产部门派活

就是这么简单的理解,我们现在考虑如何实现我们上述买手表的脚本吧:

先看我们调用起来组装成各种复杂的逻辑流畅 脚本有多简单:

非常简单快捷,之后怎么复用/增删修改,都变得简单了。这就是高复用性,高拓展性,高可读性 的脚本。

那么我上面怎么实现的呢?

代码语言:javascript
复制
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类就是我们的后勤保障部门,它有个公共的获取昵称功能

好了大家可以仔细品味这个工厂模式,之后假如我们要加入新的身份和它自带的方法脚本。只需要加个生产部门即可。调用起来别提多方便了!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试开发干货 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档