zoukankan      html  css  js  c++  java
  • python自动化测试学习笔记-10YAML

    之前学习的编写测试用例的方法,都是从excel中编写接口的测试用例,然后通过读取excel文件进行接口自动化测试,这种方式我们叫做数据驱动的方式,由于excel操作起来不灵活,无法实现关联关系的接口测试,所以我们学习一种更灵活的编写测试用例的方法YAML方式,可以通过数据驱动和代码驱动实现自动化测试;

    YAML是一种容易人类阅读、适合表示程序语言的数据结构、可用于不同程序间交换数据、支持泛型工具、支持串行处理、丰富的表达能力和可扩展性、易于使用的语言。

    YAML利用缩进或者是explicit indicatior(如{})来表示属性的嵌套,更为直观和simple。

    一、YAML的格式

    YAML的格式及特点如下:

    YAML使用可打印的Unicode字元,可使用UTF-8或UTF-16。
    使用空白字元为文件缩排来表示结构;不过不能使用跳格字元(TAB)。
    注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解)
    每个清单成员以单行表示,并用短杠+空白( -   )起始。或使用方括号( [ ] ),并用逗号+空白( ,   )分开成员。
    每个杂凑表的成员用冒号+空白( :   )分开键值和内容。或使用大括号( {   } ),并用逗号+空白( ,   )分开。
    杂凑表的键值可以用问号 ( ? )起始,用来明确的表示多个词汇组成的键值。
    字串平常并不使用引号,但必要的时候可以用双引号 ( " )或单引号 ( ' )框住。
    使用双引号表示字串时,可用倒斜线( )开始的跳脱字元(这跟C语言类似)表示特殊字元。
    区块的字串用缩排和修饰词(非必要)来和其他资料分隔,有新行保留(preserve)(使用符号 | )或新行折叠(flod)(使用符号 > )两种方式。
    在单一档案中,可用连续三个连字号(---)区分多个档案。
    另外,还有选择性的连续三个点号( ... )用来表示档案结尾。
    重复的内容可使从参考标记星号 ( * )复制到锚点标记( & )。
    指定格式可以使用两个惊叹号 ( !! ),后面接上名称。
    档案中的单一文件可以使用指导指令,使用方法是百分比符号( % )。有两个指导指令在YAML1.1版中被定义:
     %YAML 指导指令,用来识别文件的YAML版本。
     %TAG 指导指令,被用在URI的字首标记。这个方法在标记节点的型态时相当有用。
    YAML再使用逗号及冒号时,后面都必须接一个空白字元。

    以下示例:

    1、yaml中支持映射或字典的表示,如下:

    username : pei
    passwd : 123456

    2、yaml中支持列表或数组的表示,如下:

    area :
    - 海淀
    - 昌平
    - 大兴

    3、字典和列表可以复合起来使用

    - name : wang
    age : 24
    - name: pei
    age: 26

    4、yaml中有以下基本类型:

    字符串 整型 浮点型 布尔型 null 时间 日期

    str: "Hello World!"
    int: 99
    float: 8.88
    boolean: true # or false
    None: null # 也可以用 ~ 号来表示 null
    time: 2016-09-22t11:43:30.20+08:00 # ISO8601,写法百度
    date: 2016-09-22 # 同样ISO8601

    5、强制转换 
    yaml是可以进行强制转换的,用 !! 实现,如下:

    str: !!str 3.14
    int: !!int "123"

    输出后结果:{'str': '3.14', 'int': 123}

    6、

    在同一个yaml文件中,可以用 — 来分段,这样可以将多个文档写在一个文件中

    name : wang
    age : 24
    ---
    name: pei
    age: 26

    7、yaml中分级使用缩进表示,只要在同一个缩进上就是同一个级别

    name : wang
    age : 24
    money:
    建行 : 10000
    工行 : 20000
    农行 : 30000
    商行 : 40000

    执行查看结果:

    {'age': 24, 'name': 'wang', 'money': {'农行': 30000, '工行': 20000, '建行': 10000, '商行': 40000}}

     

     

     二、应用

     1、Python中可以解析yaml文件,用户数据获取,通过load方法读取文件内容:

    先新建一个yaml文件userinfo.yml或者userinfo.yaml格式都可以

    username : pei
    passwd : 123456
    age : 24
    weight : 55
    height : 166
    sex :
    house :
    - 海淀
    - 昌平
    - 大兴
    money :
    -
    - $
    - ¥

     新建一个Python文件,用来获取yaml文件的内容:

    test.py

    import  yaml
    f=open('userinfo.yml','r',encoding='utf-8')
    print(yaml.load(f))

     执行查看结果:

    {'mony': ['¥', '$', '¥'], 'sex': '女', 'heigth': 166, 'passwd': 123456, 'house': ['海淀', '昌平', '大兴'], 'age': 24, 'weigth': 55, 'username': 'pei'}

     2、当yaml文件中有多个区块的时候,可以使用load_all()获取数据,如下:

    load_all()生成一个迭代器

    ---
    username : pei
    passwd : 123456
    age : 24
    weight : 55
    height : 166
    sex :
    house :
    - 海淀
    - 昌平
    - 大兴
    money : 3000
    ---
    username : LI
    passwd : 123456
    age : 24
    weight : 56
    height : 165
    sex :
    house :
    - 海淀
    - 昌平
    - 大兴
    money : 300
    ---
    username : XING
    passwd : 123456
    age : 24
    weight : 67
    height : 178
    sex :
    house :
    - 海淀
    - 昌平
    - 大兴
    money : 10000

     Python:

     import yaml,json

    f=open('userinfo.yml','r',encoding='utf-8')
    data=yaml.load_all(f)
    for i in data:
    print(i)

     执行查看结果:

    {'house': ['海淀', '昌平', '大兴'], 'username': 'pei', 'passwd': 123456, 'weight': 55, 'sex': '女', 'height': 166, 'money': 3000, 'age': 24}
    {'house': ['海淀', '昌平', '大兴'], 'username': 'LI', 'passwd': 123456, 'weight': 56, 'sex': '女', 'height': 165, 'money': 300, 'age': 24}
    {'house': ['海淀', '昌平', '大兴'], 'username': 'XING', 'passwd': 123456, 'weight': 67, 'sex': '男', 'height': 178, 'money': 10000, 'age': 24}

    3、yaml.dump 将一个python对象生成为yaml文档

    import  yaml
    data={
    'username':'wang',
    'age':25,
    'money':10000
    }
    f=open('dumpyaml.yaml','w',encoding='utf-8')
    yaml.dump(data,f)

    yaml.dump接收的第二个参数一定要是一个打开的文本文件或二进制文件,yaml.dump会把生成的yaml文档写到文件里

    执行查看结果:生成了一个文件,写入了值

    {age: 25, money: 10000, username: wang}

    4、yaml.dump_all()将多个段输出到一个文件中


    import yaml
    data={
    'username':'wang',
    'age':25,
    'money':10000
    }
    data2={
    'username':'pei',
    'passwd':'123456'

    }
    f=open('dumpyaml.yaml','w',encoding='utf-8')
    print(yaml.dump_all([data,data2],f))

    执行查看结果:

    {age: 25, money: 10000, username: wang}
    --- {passwd: '123456', username: pei}

    如果使用的是yaml.dump()传入过个段,则会被当做一个list传入,如下:

    yaml.dump([data,data2],f)

    执行:

    - {age: 25, money: 10000, username: wang}
    - {passwd: '123456', username: pei}

     

     

     

  • 相关阅读:
    验证 Email
    取系统时间
    DbHelperSQL.cs
    显示BYTE流图片
    [原]c# 读取文本文件(txt)
    数据库文件组和文件的作用
    Transact—SQL
    m_pMainWnd
    sql server 2005 window 身份证验证模式与SQL Server身份验证
    WM_CLOSE WM_DESTROY WM_QUIT
  • 原文地址:https://www.cnblogs.com/phoebes/p/8633042.html
Copyright © 2011-2022 走看看