zoukankan      html  css  js  c++  java
  • 用命令方式启动、停止appium服务和app

    启动appium服务并监听一个端口命令:

    命令command==>  appium -a {ip} -p {port} -U {deviceName} -g {log}

    以shell命令方式执行命令,并输入日志到log文件:用subprocess需导入

    subprocess.Popen(command, stdout=open(LOG_PATH, 'a+'), stderr=subprocess.PIPE, shell=True)  #相当于再cmd窗口输入上面的命令command

    根据端口号查询是否已经启动服务:

    subprocess.getoutput('netstat -ano | findstr %s'%self.port)   #如果找到以启动端口包含port,则会返回对应信息,

    netstat -ano | findstr 1111   查询端口号1111的进程信息,从中可以获得pid

    启动模拟器或手机,访问服务监听的那个端口:

    webdriver.Remote('http://127.0.0.1:4723/wd/hub',dic)  #dic是模拟器或手机的设备信息和app信息

    根据pid查询进程信息,第一列就是进程名称

    tasklist | findstr 2472

     根据进程名称杀死改名成对应的所有进程:

    taskkill /F /IM node.exe /t   #node.exe是进程名

    根据pid杀死进程

    taskkill /pid 2472 -t -f  #2472是pid

    例子:

    yaml文件格式如下:内容为手机信息和app信息

    device_type: android
    tester:
      resetKeyboard: true
      appActivity: com.tencent.mobileqq.activity.SplashActivity
      appPackage: com.tencent.mobileqq
    #  appPackage: com.android.browser
    #  appActivity: .BrowserActivity
      noReset: False
      unicodeKeyboard: true
    devices:
      android:
        - port: 9009
          platformName: Android
          udid: emulator-5554
          platformVersion: 5.1.1
          name: 雷电a
          ip: 127.0.0.2
          deviceName: emulator-5554

    启动服务、测试服务是否启动、启动app

    from lib.tool import Tool
    from conf.setting import LOG_PATH
    from lib.log import logger
    from appium import webdriver
    import subprocess
    class Controller(object):
    def __init__(self):#初始化函数主要是对设备和app信息的获取
    self.tool=Tool()#tool类中写的有获取设备文件yaml数据的方法
    self.yml=self.tool.app_data#获取到yaml文件中的设备信息
    self.device_type=self.yml.get('device_type')
    self.device_name=self.yml.get('devices').get(self.device_type)[0].get('deviceName')
    self.devices=self.yml.get('devices')
    self.port=self.devices.get(self.device_type)[0].get('port')
    self.tester=self.yml.get('tester')
    # print(self.device_name)




    #taskkill -PID 4152 -F
    # 每次启动前都要kill掉所有的进程taskkill /F /IM node.exe /t

    def kill_server(self):

    #taskkill /F /IM node.exe /t 我们开启的appium进程名是node.exe
    logger.debug('执行[KILL SERVER]操作:%s' % subprocess.getoutput("taskkill /F /IM node.exe /t"))
    logger.debug('重启ADB服务!%s' % subprocess.getoutput("adb kill-server"))

    def start_server(self):#启动server
    device=self.devices.get(self.device_type)[0]

    #命令字符串
    command="appium -a {ip} -p {port} -U {deviceName} -g {log}".format(
    ip=device.get('ip'),
    port=device.get('port'),
    deviceName=device.get('deviceName'),
    log=LOG_PATH.replace('app_log.log',device.get('name')+'.log')

    )
    print(command)
    logger.debug('服务启动命令:%s'%command)

    #执行命令
    subprocess.Popen(command, stdout=open(LOG_PATH, 'a+'), stderr=subprocess.PIPE, shell=True)

    def test_server(self):
    while True:
    #查询是否端口已启动,即服务启动
    c=subprocess.getoutput('netstat -ano | findstr %s'%self.port)
    if c:

    logger.debug('启动成功。。。。')
    break
    else:
    logger.debug('启动失败,5s后重试')
    import time
    time.sleep(5)
    return True

    def start_driver(self):
    device=self.devices.get(self.device_type)[0]
    self.tester.update(device)
    # print(self.tester)
    driver=webdriver.Remote('http://{ip}:{port}/wd/hub'.format(
    ip=device.get('ip'),
    port=device.get('port')

    ),self.tester)


    if __name__=='__main__':
    controller=Controller()
    print(controller.device_name)
    controller.kill_server()
    controller.start_server()
    if controller.test_server():
    controller.start_driver()
     
  • 相关阅读:
    Java基础——clone()方法浅析
    Unity shader error: “Too many texture interpolators would be used for ForwardBase pass”
    ar 解压一个.a文件报错: xxx.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
    How to set up "lldb_codesign" certificate!
    Unity-iPhone has Conflicting Provisioning Settings
    ETC1/DXT1 compressed textures are not supported when publishing to iPhone
    Xcode 提交APP时遇到 “has one iOS Distribution certificate but its private key is not installed”
    XCode iOS之应用程序标题本地化
    苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置
    Unity 4.7 导出工程在XCode10.1上编译报错
  • 原文地址:https://www.cnblogs.com/bendouyao/p/9461418.html
Copyright © 2011-2022 走看看