美文网首页
[AP_12] YAML下载安装|数据读取|数据转化|数据与代码

[AP_12] YAML下载安装|数据读取|数据转化|数据与代码

作者: Fighting_001 | 来源:发表于2019-07-03 01:45 被阅读0次

    目录结构

    一、YAML概述
        1. YAML简介
        2. YAML下载安装
    二、yaml数据类型详解
        1. yaml数据类型
        2. yaml数据读取
        3. yaml数据修改
        4. yaml数据转化
    三、YAML实践:Capability配置文件-数据与代码分离
    

    一、YAML概述

    引入YAML:
    Capability中的各个参数取值是会随设备和APP不同而不同,通过数据和代码分离,将频繁变动的部分抽离出来放到配置文件中,减少代码冗余的误操作引起的执行异常,类似于Web前端的html标签和css分离,推荐使用YAML管理配置数据

    1. YAML简介

    YMAL是一种简洁的非标记性语言,其以数据为中心,使用空白、缩进、分行来组织数据,数据表示简洁易读。YAML解析实现简易,适合在脚本语言中使用,如:Ruby、Java、Perl、Python、PHP、JavaScript。YAML作为专门用于写配置文件的语言,比JSON格式方便。

    YAML语言特点
    ①大小写敏感
    ②使用缩进表示层级关系
    ③缩进时不允许使用Tab键,只允许使用空格
    ④缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

    2. YAML下载安装

    传送门:http://pyyaml.org/wiki/PyYAML
    安装命令:pip install pyyaml

    检验安装效果:
    python
    import yaml

    以上无异常,则表示安装ok

    二、yaml数据类型详解

    1. yaml数据类型

    支持的数据类型:
    (1)纯量:数据最小的单位,单个的、不可再分的值。如:字符串、布尔值、整数...

    number: 111
    
    {number: '111'}
    

    (2)数组:一组按次序排列的值,又称为序列(sequence)/列表(list)

    # yaml风格
    # 方式1
    - Jack
    - Harry
    - Sunny
    # 方式2
    [Jack,Harry,Sunny]
    
    # Python风格
    ['Jack','Harry','Sunny']
    

    (3)对象 :键值对的集合,又称为映射/字典
    注:yaml中键值对的冒号后的值要预留空格

    # yaml风格
    # 方式1
    platformName: Android
    platformVersion: 9.0.0
    # 方式2
    {platformName: Android, platformVersion: 9.0.0}
    
    # Python风格
    {'platformName': 'Android', 'platformVersion': '9.0.0'}
    
    数据嵌套

    yaml数据嵌套表示,可将各种数据根据实际场景进行组合嵌套

    场景:Simon老师25岁,搭档Alice老师22岁,有在管理2个学生Bob和Canddy,分别10岁和9岁

    YAML风格:
    student.yaml

    name: Simon
    age: 25
    partener:
       name: Alice
       age: 22
    student:
     - name: Bob
       age: 10
     - name: Canddy
       age: 9
    

    Python风格:

    {'name':'Simon','age':25,'partener':{'name':'Alice','age':22},'student':[{'name':'Bob','age':10},{'name':'Canddy','age':9}]}
    

    2. yaml数据读取

    load()方法:load(stream,Loader=FullLoader) 解析文件流中的第一个yaml文档并生成相应的Python对象

    测试场景
    读取配置文件中的所有信息;读取yaml数据表中的Simon、搭档、学生的信息

    代码实现
    yaml_load.py

    import yaml
    
    file=open('student.yaml','r')
    data=yaml.load(file,Loader=yaml.FullLoader)
    
    print(data)
    
    print('-----------------------------')
    
    print(data['name']+"---"+str(data['age']))
    
    print('-----------------------------')
    
    print(data['partener'])
    print(data['partener']['name']+"---"+str(data['partener']['age']))
    
    print('-----------------------------')
    
    print(data['student'])
    print(data['student'][0]['name'])
    print(data['student'][1]['name'])
    

    执行结果:

    3. yaml数据修改

    data['name']='test'
    print(data['name'])
    PS:以上只是变量的数据变更,不会真正修改yaml配置表中的数据

    4. yaml数据转化

    dump()方法:可将Python对象序列化成yaml流

    测试场景
    将给定的Python数据类型转化为yaml数据类型

    lis=['aa','bb','cc']
    dic={'url':'www.baidu.com'}
    

    代码实现
    yaml_convert.py

    import yaml
    
    lis=['aa','bb','cc']
    dic={'url1':'www.baidu.com','url2':'www.sogou.com'}
    
    # 输出Python风格数据
    print(lis)
    print(dic)
    
    print('--------------------')
    
    # 输出YAML风格数据
    print(yaml.dump(lis))
    print(yaml.dump(dic))
    

    执行结果:

    三、YAML实践:Capability配置文件-数据与代码分离

    capability的各项参数值与代码进行分离:
    将capability中各项固定的配置信息抽离出来存放在一个yaml配置文件中,使用对象数据类型来存储数据;然后在代码中调用load()方法读取配置数据,从而实现数据和代码的分离

    desired_caps.yaml

    # 移动设备信息
    platformName: Android
    deviceName: 127.0.0.1:62001
    platformVersion: 5.1.1
    
    # 基于uiautomator2识别Toast
    automationName: uiautomator2
    
    # 设置键盘输入法Unicode格式
    unicodeKeyboard: True
    resetKeyboard: True
    
    # 重置登录状态(每次都需要输入[用户名+密码]登录)
    noReset: False
    
    # 移动APP应用信息
    app: C:\Users\Administrator\Desktop\kaoyanbang_3.3.8beta.244.apk
    appPackage: com.tal.kaoyan
    appActivity: com.tal.kaoyan.ui.activity.SplashActivity
    
    # 远程服务器配置信息
    ip: 127.0.0.1
    port: 4723
    

    capability_yaml.py

    from appium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    import yaml
    
    # 解析yaml文档为Python对象
    file=open('desired_caps.yaml','r',encoding='UTF-8')
    data=yaml.load(file,Loader=yaml.FullLoader)
    
    # 定义字典,存储capabilities配置信息
    desired_caps={}
    
    # 移动设备信息
    desired_caps['platformName']=data['platformName']
    desired_caps['deviceName']=data['deviceName']
    desired_caps['platformVersion']=data['platformVersion']
    # 基于uiautomator2识别Toast
    desired_caps['automationName']=data['automationName']
    # 设置键盘输入法Unicode格式
    desired_caps['unicodeKeyboard']=data['unicodeKeyboard']
    desired_caps['resetKeyboard']=data['resetKeyboard']
    # 重置登录状态(每次都需要输入[用户名+密码]登录)
    desired_caps['noReset']=data['noReset']
    # 移动APP应用信息
    desired_caps['app']=data['app']
    desired_caps['appPackage']=data['appPackage']
    desired_caps['appActivity']=data['appActivity']
    # 连接远程服务器,根据配置开启会话
    driver=webdriver.Remote('http://'+str(data['ip'])+':'+str(data['port'])+'/wd/hub',desired_caps)
    
    driver.implicitly_wait(10)  # 等待时间(隐式)
    
    # 定义点击取消升级按钮的方法
    def check_cancelBtn():
        print('check cancel Button')
        try:
            cancelBtn=driver.find_element_by_id('android:id/button2')
        except NoSuchElementException:
            print('no cancel button')
        else:
            cancelBtn.click()
    
    # 定义点击跳过引导页的方法
    def check_skipBtn():
        print('check skip Button')
        try:
            skipBtn=driver.find_element_by_id('com.tal.kaoyan:id/tv_skip')
        except NoSuchElementException:
            print('no skip button')
        else:
            skipBtn.click()
    
    # 调用函数
    check_cancelBtn()
    check_skipBtn()
    

    执行效果:
    可连接Android模拟器,并安装指定的APP,然后启动APP,跳过取消升级按钮、跳过介绍页面,进入登录界面

    相关文章

      网友评论

          本文标题:[AP_12] YAML下载安装|数据读取|数据转化|数据与代码

          本文链接:https://www.haomeiwen.com/subject/wbvixctx.html