Appium Appium server 进程管理

木月 · 2021年05月17日 · 最后由 Thirty-Thirty 回复于 2021年05月19日 · 2493 次阅读

🔔 做啥子

首先,这个是我实际工作过程中没用到过的,是一些朋友同事咨询,问题是啥呢,就是希望实现 Appium Server 的启动和关闭,随着脚本的执行来控制,而不是一直在后台执行着。
看她们实现,从网上找的多进程模块来实现的,也就是 multiprocessing 模块,来管理进程,虽然我对 multiprocessing 使用不多,但也知道她们实现的不对,怎么错的就不给大家展示了。
然后,我习惯使用的是 subprocess 模块,并且满足实现该目标的几个属性:
1、可以多进程执行
2、可以监控进程输出,方便控制
3、随起随用,用完即关

🔔 实现逻辑

1、测试脚本设计,脚本执行开始/结束时,输出特定输出流(用于控制 Appium server 启动管理)

@classmethod
def setUpClass(cls):
    LogSys.logInfo("INSTRUMENTATION_STATUS: server start")
    Support.sleep(5) # 必不可少,需要等待server 启动起来再跑测试脚本
    cls.Device = cls.readConfig(cls)
    cls.alerts = cls.readConfigAlert(cls)
    Config.permission = cls.alerts['permission']
    Config.app = cls.alerts['APP']
    LogSys.logInfo(Config.permission)
    LogSys.logInfo(Config.app)
    cls.driver = webdriver.Remote(cls.Device['Appium_server'].format(cls.Device['appium']['device']['port']), cls.Device['appium']['device'])

@classmethod
def tearDownClass(cls):
    LogSys.logInfo("INSTRUMENTATION_STATUS: server end")
    cls.driver.quit()

2、yaml 管理设备信息时,提前分配好端口

iPhone7:
    automationName: XCUITest
    platformName: iOS
    platformVersion: 12.4.0
    deviceName: iPhone
    bundleId: com.hnczb.czb
    udid: 288659964546ba8fd20eaf7d16b39.....
    xcodeSigningId: iPhone Developer
    xcodeOrgId: .....
    newCommandTimeout: 3600
    autoAcceptAlerts: True
    unicodeKeyboard: True
    resetKeyboard: True
    onReset: False
    port: 4724

3、Appim Server 进程启动管理

class appiumServer(object):

    def start(self, IsOpt=False, port=4723):
        self.p = Popen('appium -p {}'.format(port), stdout=PIPE, stderr=STDOUT, shell=True)

    def stop(self):
        self.p.kill()

4、主进程(脚本执行)管理

class CaseAuto():
    def run(self, cmd, port):
        self.p = Popen(cmd, stdout=PIPE, stderr=STDOUT, shell=True, encoding='utf-8')
        server = appiumServer()
        while self.p.poll() is None:
            lineStr = self.p.stdout.readline()

            if lineStr:
                if 'server start' in lineStr:
                    server.start(port=port)

                elif 'server end' in lineStr:
                    server.stop()
                else:
                    pass

大功告成!

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 1 条回复 时间 点赞
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册