appium capabilities封装到单独的 YAML

   在配置capability时,各个参数都是在代码里面固定的,比如:desired_caps[‘deviceName’] =‘127.0.0.1:62001’ ,如果设备和测试的app发生改变就需要去代码里面一个个修改,除非同时根据不同设备不同App来维护多套代码,这样完全是不符合规范而且违背了自动化的原则。我们可以考虑把数据和代码分离,把数据单独抽离出来放在配置文件里面, 代码直接从配置文件去读取数据,这样就可以提高效率,可以用yaml来管理配置数据。


   YAML : Ain’t Markup Language,是一种简洁的非标记语言,以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。
   YAML 支持的数据类型:
  1. 纯量(scalars):单个的、不可再分的值 : 数据最小的单位,不可以再分割。类似于Python中单个变量。
   2. list数组 : 与Python的list数组结构类似,数组元素使用 “-”开头,也可以根据缩进进行数组嵌套。

例:


- Monday
- Tuesday
- Friday 

# 也可以写成一行, 这与 Python 的 List 是相似的 
[Monday, Tuesday, Friday]

   3. 对象 : 对象的一组键值对,使用冒号结构表示。类似Python中的字典数据结构。

例:

platformName: Android
deviceName: 127.0.0.1:62001

# Yaml 另一种写法, 把所有键值对写成一个行内对象, 注意:冒号后面一定要有空格!
{platformName: Android,deviceName: 127.0.0.1:62001}

   数据转化 : dump()可以将Python对象序列化成YAML流。

例:


   把下面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

   以VIP App 测试,单独封装 YAML 为例:
# 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 测试时的效率。

你可能感兴趣的:(自动化,测试用例,android,python)