在配置capability时,各个参数都是在代码里面固定的,比如:desired_caps[‘deviceName’] =‘127.0.0.1:62001’ ,如果设备和测试的app发生改变就需要去代码里面一个个修改,除非同时根据不同设备不同App来维护多套代码,这样完全是不符合规范而且违背了自动化的原则。我们可以考虑把数据和代码分离,把数据单独抽离出来放在配置文件里面, 代码直接从配置文件去读取数据,这样就可以提高效率,可以用yaml来管理配置数据。
例:
- Monday
- Tuesday
- Friday
# 也可以写成一行, 这与 Python 的 List 是相似的
[Monday, Tuesday, Friday]
例:
platformName: Android
deviceName: 127.0.0.1:62001
# Yaml 另一种写法, 把所有键值对写成一个行内对象, 注意:冒号后面一定要有空格!
{platformName: Android,deviceName: 127.0.0.1:62001}
例:
把下面python数据类型转化为yaml数据类型 :
title = [‘welcome’,‘to’,‘VIP’]
website={‘url’:‘www.vip.com’}
import yaml
title = ['welcome','to','VIP']
website={'url':'www.vip.com'}
# yaml data
print(yaml.dump(title))
print(yaml.dump(website))
# 输出结果如下,与 Python 的 Lst 和 Dict 相似。
[welcome, to, VIP]
{url: www.vip.com}
Process finished with exit code 0
# create desired_caps.yaml,注意冒号后必须有空格!
platformName: Android
deviceName: 127.0.0.1:62001
noReset: False
appPackage: com.achievo.vipshop
appActivity: com.achievo.vipshop.activity.LodingActivity
port: 4723
# create capability_yaml.py
from appium import webdriver
import yaml
# 读取数据
file=open('desired_caps.yaml','r')
# 解析数据流,并生成 Python对象
data=yaml.load(file)
desired_caps={}
desired_caps['platformName']=data['platformName']
desired_caps['deviceName']=data['deviceName']
desired_caps['noReset']=data['noReset']
desired_caps['appPackage']=data['appPackage']
desired_caps['appActivity']=data['appActivity']
driver = webdriver.Remote('http://localhost:'+ str(data['ip']) + '/wd/hub', desired_caps)
通过以上封装 Yaml,然后读取,解析数据,就可以提高在 App 测试时的效率。