Appium+Python app自动化测试之脚本启动和停止Appium服务
研究了一段时间的Appium android app的自动化测试,工作中需要连接多台手机终端同时执行测试用例,我实现的方式是获取用例中需要执行用例的设备id个数以及实际连接到的设备数(通过adb devices获取),然后启动相应数量的Appium 服务,以便每个设备执行时并发进行并且互不影响。当然也可以通过selenium grid来实现,只是目前还在学习研究中,还是先把目前启动多个appium服务实现的方式记录下来。
一、Windows下启动单个appium服务
需要启动多个appium服务,那必须为每个服务指定端口。
启动appium服务的相关参数可以参考这篇博文:http://www.cnblogs.com/xinleishare/p/4793538.html
appium -a 127.0.0.1 -p --bootstrap-port --session-override --log "E:/appium" --command-timeout
通过该命令启动一个端口为4726,bootstrap端口为4780,Appium log存放路径为E盘,session可以覆盖并且命令超时为600s Appium服务,访问的URL地址为:http://127.0.0.1:4726/wd/hub。
为什么在这里指定bootstrap端口呢?当不指定bootstrap端口时,启动的appium服务默认的bootstrap端口为4724。当我们同时启动两个或多个appium服务,不指定bootstrap端口,那么所有服务bootstrap端口默认都为4723,当连接多个手机设备启动driver时,部分手机不执行用例,为了稳定起见,在这里分别指定bootstrap端口。
二、python脚本启动appium服务
为了根据连接设备的个数启动相应数量的appium服务,直接将appium服务的启动放在python脚本中运行。实现的方式是通过python脚本执行上面的cmd命令行。
def start_Appium(self, host, port, bootstrap_port, appium_log_path): #device_uid,
#appium -p 4723 -bp 4724 -U 22238e79 --command-timeout 600
errormsg = ""
appium_server_url =""
try:
if self.port_is_free(host,port):
cmd ='start /b appium -a '+ host +' -p '+ str(port)+ ' --bootstrap-port '+ str(bootstrap_port) + ' --session-override --log '+ '"'+appium_log_path + '" --command-timeout 600' #' -U '+ device_uid+
print cmd
#p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) #stdout=PIPE, stderr=PIPE)
p = subprocess.call(cmd, shell=True,stdout=open('E:/logs.log','w'),stderr=subprocess.STDOUT)
print p
appium_server_url = 'http://' + host +':' + str(port) +'/wd/hub'
print appium_server_url
else:
print "port:%d is used!"%(port)
except Exception, msg:
errormsg = str(msg)
return appium_server_url, errormsg
当然这里返回appium url后需要去验证是否真正启动了该appium服务(可以通过requests访问启动的url或者根据netstat查看端口)。
注意:代码中cmd使用了"start /b",主要是用于让cmd命令在后台执行,不影响python脚本的执行。如果不加“start /b”的话,启动appium服务后就停留在Appium日志状态,将不会返回执行后续的python脚本。
三、停止Appium服务
当用例执行完毕后,关闭当前的appium服务。实现方式是python脚本调用bat关闭Appium服务。python脚本将appium server的端口传入到bat中,bat脚本根据端口号获取其进程pid,然后获取应用名并通过taskkill关闭。
StopAppium.bat脚本如下:
@echo off
setlocal enabledelayedexpansion
rem %1传入端口号
for /f "delims= tokens=1" %%i in ('netstat -aon ^| findstr %1 ') do (
set a=%%i
goto js
)
:js
taskkill /f /pid "!a:~71,5!"
rem pause>nul
python脚本执行如下:
def stop_Appium(self, Appium_url):
cmd = 'StopAppium.bat %s'%(self.get_port(Appium_url))
#print cmd
p = os.popen(cmd)
print p.read()
其中Appium_url为之前启动的Appium服务的URL地址,通过get_port方法是获取URL中的port。
以上就是自己实现的启动和停止appium服务方法,如果有写的不对的希望大家指出,如果有更好的方法也希望不吝赐教。
Appium+Python app自动化测试之脚本启动和停止Appium服务的更多相关文章
- Appium + Python App自动化第一个脚本
今天跟大家讲解一个Appium和Python App自动化的脚本.[1]打开你的夜神模拟器(或者连接你的手机) [2]打开桌面的Appium [3]下载你要测的App的apk文件,放到桌面[4]拖动你 ...
- Appium + Python App自动化(2)第一个脚本
[1]打开你的夜神模拟器(或者连接你的手机) [2]打开桌面的Appium [3]下载你要测的App的apk文件,放到桌面 [4]拖动你的apk安装包到夜神模拟器里,然后模拟器会提示你安装.安装.原来 ...
- (appium+python)UI自动化_09_unittest批量运行测试用例&生成测试报告
前言 上篇文章[(appium+python)UI自动化_08_unittest编写测试用例]讲到如何使用unittets编写测试用例,并执行测试文件.接下来讲解下unittest如何批量执行测试文件 ...
- 启动和停止Oracle服务bat脚本
总所周知,Oracle随开机启动会占很大内存,而你每次想用的时候还得去计算机服务里去找服务.一个一个的启动,比较麻烦. 这里给出两个bat脚本,来直接双击启动和停止Oracle服务[脚本内容来源于网络 ...
- Linux下shell通用脚本启动jar(微服务)
Linux下shell通用脚本启动jar(微服务) vim app_jar.sh #!/bin/bash #source /etc/profile # Auth:Liucx # Please chan ...
- 本地计算机上的SQLServer(MSSQLSERVER)服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止
SQLServer的服务启动问题: 本地计算机上的SQLServer(MSSQLSERVER)服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止 出现这个问题导致无法启动SQLServer服 ...
- sqlserver学习笔记(一)—— 登录本机sqlserver、启动和停止sqlserver服务、创建和删除数据库
(重要参考:51自学网——SQL Server数据库教程) 首先按照网上教程安装好sqlserver,打开登录 登录本机sqlserver:①. ②localhost ③127.0.0.1 启动和停止 ...
- (appium+python)UI自动化_02_appium启动手机app
前提:需先安装配置好appium+python自动化环境,已配置好环境的小伙伴可以参考以下步骤启动Android app,具体步骤如下: 一.USB连接手机 (1)手机USB连接电脑 (2)手机打开开 ...
- App自动化测试之Appium环境安装(涉及雷电模拟器和真机)
1.安装Microsoft .NET Framework 4.5 及以上版本 2.安装Appium 官方网站地址:http://appium.io/ 我装了1.17.0版本 3.安装JDK 1.8及以 ...
随机推荐
- CCNP路由实验(1) -- EIGRP
EIGRP(Enhanced Interior Gateway Routing Protocol,增强型内部网关路由协议)是Cisco公司开发的一个平衡混合型路由协议,它融合了距离向量和链路状态两种路 ...
- sicily-1029 Rabbit
一. 题意(0.04s) 每一对成熟的兔子可以生一对兔子,兔子在m个月之后成熟,假设兔子都不会死,计算d个月后一共有多少只兔子. 二. 要高精度加法(用string) 三. ...
- 模式匹配-KMP算法
/***字符串匹配算法***/ #include<cstring> #include<iostream> using namespace std; #define OK 1 # ...
- 求高手帮忙解决一下问题Java Web Cookie实例
package cn.com; import java.io.IOException; import java.io.PrintWriter; import java.util.LinkedHashM ...
- JavaSE复习日记 : 循环语句(for/while/do while)
/* * 循环语句(for循环,while和do while循环) */ /* * for循环语句 * * for循环语法: * for (表达式1;表达式2;表达式3 ){ * java语句 * } ...
- 五毛的cocos2d-x学习笔记07-计时器、数据读写、文件读写
调度器: 定时任务是通过调度器实现的.cocos2d-x推荐用调度器而不是其他方法实现定时任务.Node类都知道如何调度和取消调度事件. 有3种调度器: 默认调度器:schedulerUpdate() ...
- C3p0实践
jar包 c3p0-0.9.2.1.jar mchange-commons-java-0.2.3.4.jar mysql-connector-java-5.1.28-bin.jar 建立数据库 CRE ...
- mysql xtrabackup 备份恢复实现,mysql命令备份数据库,打包压缩数据库
简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠 ...
- android-适配Adapter
Adapter是把数据和用户界面视图绑定到一起的桥梁类,负责创建用来表示父视图中的每一个条目的子视图,并提供对底层数据的访问. public class MainActivity extends Ac ...
- oracle,如何查看视图结构,获得视图中的字段名称、字段类型、字段长度等。
需要获得一个视图中的字段名称.字段类型.字段长度等信息,该如何编写sql语句.通过select * from user_views可以获得给定用户下所有的视图名称了,但是没找到如何获取视图结构的解决方 ...