前言
除了前文提到的,有多设备同时执行相同用例的需求以外,还可能存在,多台设备要一起在App里交互的情况,那么这也是一种多机并行,只是他们的属于并行启动,操作却是串行的,比如A发布了作品,B点赞,有一个先后顺序。
一、设备的desired_capabilities
1、常规配置
不同设备的desired_capabilities信息不太一样,获取的方式同上一篇文章,这里不再赘述。
2、derivedDataPath
在官方文档的并行测试这一章中,明确说了,为了避免不必要的冲突,derivedDataPath这个值,不同的设备必须配置不一样的路径。
那这个derivedDataPath是什么呢?这个就要看我第一篇环境部署的文章中提到的derivedData文件夹,xcode其实是有一个默认的derivedData文件夹,但是现在需要给不同设备配置一个不同的路径(里边的文件也要对应复制到配置路径里)。
我们先到xcode的设置里,location项找到路径:
然后打开这个路径:
然后把DerivedData文件夹里的内容全部复制到derivedDataPath需要配置的路径里。
搞定了这步之后,针对不同的desired_capabilities,开启不同的连接,每个连接就是一台设备,然后就可以编写业务逻辑用例了:
from appium.options.ios.xcuitest.base import XCUITestOptions
from appium import webdriver
@pytest.fixture(scope="session")
def multi_mobile_enter_app(request):
print("++++++++++++多设备交互+++++++++++++")
devices = Device.get_devices()
driver_list = []
for device in devices:
host = device["host"]
user = device["user"]
env = device["env"]
fs = open(os.path.join(desired_caps_dir, "iOS_desired_capabilities.yaml"), encoding="utf-8")
desired_caps = yaml.load(fs, Loader=yaml.FullLoader)
desired_caps["udid"] = device["udid"]
desired_caps["wdaRemotePort"] = device["wdaPort"]
desired_caps["wdaLocalPort"] = device["wdaPort"]
desired_caps["platformVersion"] = device["platformVersion"]
desired_caps["derivedDataPath"] = device["derivedDataPath"]
options = XCUITestOptions()
options.load_capabilities(desired_caps)
driver = webdriver.Remote(host, options=options)
driver_list.append({"driver": driver, "user": user, "env": env})
yield driver_list
print("=============多设备交互测试用例之后的==========")
# 执行完一个case就会退出APP
for driver in driver_list:
driver["driver"].quit()
二、可能出现的问题
如果使用的是免费开发者账号,那么很有可能过几天,签名信息就没有了,要重新给wda签名,然后重新build生成DerivedData信息,所以就又要再操作一遍以上步骤。