前言
- 前两天在上班的时候微信突然收到一个陌生的好友申请,我怀着万分好奇的心情同意添加好友的申请后发现是一个咨询问题的悻悻学子,怀揣着对自动化的向往,让我不禁回想起多年前到处寻找答案的自己
- 一直都是在各个社区里寻找答案,是时候为社区做一些反馈。 就这样写一篇完整的 Appium 教程的想法就在我心里萌生。
文章内容如果有错误请及时联系
如何启动一个Appium server
- 启动一个appium server
启动命令: appium -a 127.0.0.1 -p 4723 -bp 4724 -U SJE5T17619002517 --session-override -g appium.log
参数说明:
1、-a
: 指定监听的ip 如: 127.0.0.1
2、-p
: 指定监听的端口 默认4723 也可修改
3、-b
: bootstartport 指定appium和测试设备的通信端口
4、-U
: 手机设备 Android使用: adb devices
查看 iOS bundleID 使用: idevice_id -l
5、-g
指定appium log的日志路径
6、--session-override
允许会话覆盖(如有冲突)
启动Appium server 代码
- 在学习阶段我们会手动在 terminal 上输入appium server 启动命令,但在实际工作中这种方法是不可取的,所以我们需要使用代码封装启动命令,如果你学习时使用了appium desktop 启动了Appium server 则就不需要使用以下代码
- 判断Appium server 是否启动成功使用
http://host:port/wd/hub/status
- 以下代码启动Appium server 兼容了windows和mac
import subprocess
import os
import time
import requests
import sys
import re
class AppiumServer(object):
def __init__(self, host, port, udid, webDriver=None):
self.host = host
self.port = port
self.udid = udid
self.webDriver = webDriver
def start_appium_server(self):
"""
启动Appium Server
:param host: 启动的本地ip
:param port: 启动端口
:param udid: 绑定的udid
"""
bootStarpPort = str(self.port + 1)
appium_log = os.path.join('.', str(self.port) + '.log')
if os.path.exists(appium_log):
os.remove(appium_log)
cmd = " appium -a {0} -p {1} -bp {2} -U {3} --session-override -g {4}".format(
self.host, self.port, bootStarpPort, self.udid, appium_log)
if self.checkPort():
self.stopPort()
p = subprocess.Popen(cmd, shell=True, stderr=subprocess.STDOUT)
flage = False
checkCount = 0
while not flage and checkCount < 7:
time.sleep(1)
flage = self.checkPort()
if flage:
print("端口:{0} Appium 系统服务启动成功".format(self.port))
if not flage and checkCount == 6:
print("端口:{0} Appium 系统服务启动成功".format(self.port))
checkCount += 1
def checkPort(self):
"""
端口检查
:return: check res
"""
try:
requests.get("http://{0}:{1}/wd/hub/status".format(self.host, self.port))
res = True
except:
res = False
return res
def stopPort(self):
"""
关闭appium server
:param port:
:return:
"""
platform = sys.platform
if "win" in platform:
cmd = 'netstat -ano|findstr "{0}"'.format(self.port)
else:
cmd = "ps -ef | grep {0}".format(self.port) + "| awk '{print $2}'"
pid_list = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.readlines()
pattrn = re.compile(r"(\d+)")
for pid in pid_list:
if "win" in platform:
cmd = "taskkill /pid {0} /f".format(pattrn.findall(str(pid))[-1])
print(cmd)
else:
cmd = 'kill -9 {0}'.format(pattrn.findall(str(pid))[0])
os.system(cmd)
print("端口:{0}退出成功".format(self.port))
if __name__ == '__main__':
appium_server = AppiumServer("127.0.0.1", 4723, "udid")
appium_server.start_appium_server()