appium服务

#coding=utf-8
#coding=utf-8
import re
import time,sys,os
import subprocess
from UIAUTO_APP import settings
import threading
from multiprocessing import Process
sys.path.append(os.path.abspath('..'))
from UIAUTO_APP.public.adbUtils import ADB
class AppiumServer(object):
    #TODO
    log_path = settings.testlog+'\\start_appium.log'
    def __init__(self):
        #多个设备信息的list
        self.machine_datas ={} #从文件读取出来的多个设备信息list
    def start_appium(self,ip,port,bp_port,udid):
        #'启动appium服务'
        print(u'devices:{} start appium...'.format(udid))
        command_search = 'netstat -ano|findstr "{}"'.format(port)
        command_data=os.popen(command_search)
        data=command_data.read()
        print (data)
        port_list = re.findall(r":(\d{4,6}).*\s(\d{1,8})",data)#搜索端口和PID
        print (port_list)
        if port_list:
            #停服务
            #排除进程为0的并转为dict去重
            [port_list.remove(i)for i in port_list if i[1]=='0']
            port_pid = dict(port_list)
            for k in port_pid.keys():
                print(u'port:{0} is used,kill pid:{1}'.format(k,port_pid[k]))
                args3 = "taskkill -PID {} -F".format(port_pid[k])
                os.popen(args3)

        #启服务
        cmd2 = "start /b appium -a {0} -p {1} -bp {2} -U {3} -g {4} --no-reset".format(ip,port,bp_port,udid,self.log_path)
        t1 = RunServer(cmd2,self.log_path,udid)
        p = Process(target=t1.start())
        p.start()

    def stop_server(self,port):
        p = os.popen('netstat -ano|findstr {0}|findstr LISTENING'.format(port))
        out = p.read()
        if out:
            print (out)
            pid = out.split()[-1]
            print (pid)
            os.popen('taskkill /pid %s /f'%pid)

    def multi_startappium(self):
        '批量启动appium服务'
        try:
            if self.machine_datas:
                for single_machine in self.machine_datas:
                    self.start_appium(single_machine['ip'],single_machine['port'],single_machine['bp_port'],single_machine['udid'])
            else:
                print(u'no machine info,please check')
        except Exception as e:
        #    logs.exception(e)
            raise e

class RunServer(threading.Thread):

    def __init__(self, cmd,log_path,udid):
        threading.Thread.__init__(self)
        self.cmd = cmd
        self.log_path=log_path
        self.udid=udid
    def run(self):
        with subprocess.Popen(self.cmd,stdout=open(self.log_path,'a'),stderr=subprocess.PIPE,shell=True) as cmd2:
            cmd2.wait()
            time.sleep(8)
        print(u'devices:{} appium server start  completed !'.format(self.udid))
      #  os.system(self.cmd)
if __name__=='__main__':
    print (ADB().getDeviceIDs())
#    AppiumServer().start_appium('127.0.0.1','4723','2000','W8R0215902002905')
    AppiumServer().stop_server('4723')




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值