前言
在上一篇文章--Appium系列(十八)多设备并行执行测试用例中,我们对多用例执行进行改造,但是改完后会不会出现问题呢,我们在调试中遇到了问题,怎么解决呢。本文带你解决之前代码运行出现的问题。
正文
我们运行之前启动的代码。我们发现代码运行了,但是只启动了一台设备,为什么呢,我们看下日志。
我想到的是不是在安装app出现了问题,我试着用adb 去安装下,发现adb可以正常安装app。那么我们打印下对应的日志。看下在用例初始化的问题。我们发现在下面的第二行出现了问题,默认取的都是第一个,
packname = get_apkname(apk_path)
dev = get_devices()[0]
is_first_install = False # 1.判断是否安装app
is_install = isinstallapk(packname, dev)
if is_install is False: # 2.如果没有安装,则安装
installapk(apk_path, dev)
is_first_install = True
# 3.启动apk测试
apkname = get_apkname(apk_path)
launcheractivity = get_apk_lautc(apk_path)
desired_caps = {
'platformName': 'Android',
'deviceName': dev, # adb deivces
'platformVersion': getPlatForm(dev),
'appPackage': apkname, # 包名
'appActivity': launcheractivity, # apk的launcherActivity
}
这里的有问题,应该是根据参数来获取的,所以,我们对这里进行改造。因为在前面的进程中,我们有传递,所以我们可以直接获取即可。
is_first_install = False
# 1.判断是否安装app
is_install = isinstallapk(self.parme['appPackage'], self.parme['deviceName'])
if is_install is False:
# 2.如果没有安装,则安装
installapk(apk_path, self.parme['deviceName'])
is_first_install = True
desired_caps = {
'platformName': 'Android',
'deviceName': self.parme['deviceName'], # adb deivces
'platformVersion': self.parme['platformVersion'], # 从设置中可以获取
'appPackage': self.parme['appPackage'], # 包名
'appActivity': self.parme['appActivity'], # apk的launcherActivity
# 'skipServerInstallation': True
}
self.driver = webdriver.Remote('http://0.0.0.0:%s/wd/hub'%str(self.parme['port']), desired_caps)
sleep(10)
改造完毕之后运行,还是发现了问题,还是无法启动,那么是哪里出来了问题,我们去打印appium的日志。
for i in range(0, len(port_list)):
cmd = "appium -p %s --log /Users/**/Desktop/testplan/newon/log/%s.log " % (
port_list[i],port_list[i])
我们去改写了启动appium服务的脚本,打印了对应的日志。
看了下日志,两个日志的选择的设备都是同一个,那么我们应该如何改写呢,其实很简单。
在desired_caps没有配置uid,所以配置下uid
desired_caps = {
'platformName': 'Android',
'deviceName': self.parme['deviceName'], # adb deivces
'platformVersion': self.parme['platformVersion'], # 从设置中可以获取
'appPackage': self.parme['appPackage'], # 包名
'udid':self.parme['deviceName'],
'appActivity': self.parme['appActivity'], # apk的launcherActivity
# 'skipServerInstallation': True
}
然后我们再次去启动测试,
这样我们就可以启动app,链接本地的测试设备进行测试了。