目录

1. Yaml格式简介

1.1 Python搭建Yaml环境

2. Yaml基本语法

2.1 基本规则

2.2 yaml转字典

2.3 yaml转列表

2.4 复合结构

2.5 基本类型

2.6 引用

2.7 强制转换

3. Yaml格式测试用例

3. 1  yaml使用场景

3.2 yaml语法

 3.3 yaml操作  


1. Yaml格式简介

  • YAML的意思是:“Yet Another Markup Language”(仍是一种置标语言)的缩写
  • YAML是专门用来写配置文件的语言,非常简洁和强大,远比JSON格式方便
  • 可以用之作为你自动化测试框架的配置文件或者用例文件
  • 1.1 Python搭建Yaml环境

    PyYaml是Python的一个专门针对yaml文件操作的模块,使用起来非常简单

    pip install PyYaml

    2. Yaml基本语法

    2.1 基本规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab,只允许使用空格
  • 缩进的空格数目不重要,只要相同层级的元素左对齐即可
  • #表示注释,从它开始到行尾都被忽略
  • 2.2 yaml转字典

    # 下面格式读到python里会是个dict
    name:灰蓝
    age:0
    job:Tester

    输出

    {'job':'Tester','age':0,'name':u\u7070\u84dd}

    2.3 yaml转列表

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

    # 下面格式读到python里回事个list
    - 灰蓝
    - 0
    - Tester

    输出

    [u'\u7070\u84dd', 0, 'Tester']

    2.4 复合结构

    字典和列表可以复合起来使用,如下:

    # 下面格式读到python里会是个dict
    - name:灰蓝
      age:0
      job:Tester
    - name:jams
      age:30

    输出

    [{'job':'Tester','age':0,'name':u\u7070\u84dd},
    {'age':30,'name':'jams'}]

    2.5 基本类型

    yaml中有以下基本类型:

  • 字符串
  • 整形
  • 浮点型
  • 布尔型
  • null
  • 时间
  • 日期
  • 我们写个例子看看:

    str: "Hello world!"
    int: 110
    float: 3.14
    boolean: true # or false
    None: null # 也可以用 ~ 号来表示null
    time: 2020-07-20t11:43:30.20+08:00 # ISO8601,写法百度
    date: 2020-07-20 # 同样ISO8601

    输出:

    {'str': 'Hello world!', 'int': 110, 'float': 3.14, 'boolean': True, 'None': None, 'time': datetime.datetime(2020, 7, 20, 11, 43, 30, 200000, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800))), 'date': datetime.date(2020, 7, 20)}
    

    这里要注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被python转义,到最后是输出了特殊字符;可能比较拗口,来个例子理解下:

    info: helloworld
    info1: 'hello\world'
    info2: "hello\nworld"
    import yaml
    def get_yaml_data(fileDir):
        # 1. 打开yaml文件
        fo = open(fileDir,'r',encoding='utf-8')
        # 2. 使用第三方库去获取
        res = yaml.load(fo,Loader=yaml.FullLoader) # 处理警告
        print(res)
        print(res['info1'])
        print(res['info2'])
    
    if __name__ == '__main__':
        get_yaml_data('../configs/config.yaml')
    
    

     

    如果字符串没有空格或者特殊字符,不需要加引号,但如果其中有空格或特殊字符,则需要加引号了

    info: helloworld
    info1: "hello world"
    info2: "hello\nworld"

    输出:

     这里要注意单引号和双引号的区别,单引号中的特殊字符转到Python会被转义,也就是到最后是原样输出了,双引号不会被python转义,到最后是输出了特殊字符;可能比较拗口,来个例子理解下:

    # 单引号/n  双引号/n
    info: helloworld
    info1: 'hello world'
    info2: "hello\nworld"

    输出:

     可以看到,单引号中的'/n'最后是输出了,双引号中的'/n'最后是转义成了回车

    字符串处理中写成多行、'|'、'>'、'+'、'-'的意义这里就不讲了。

     分隔符,分割多个yaml文件

    # 分隔符,分割多个yaml文件 ---
    ---
    info:
      - 10
      - 20
      - 30
    ---
    data:
      - 1000
      - 2000
      - 3000
    
    import yaml
    # def get_yaml_data(fileDir):
    #     # 1. 打开yaml文件
    #     fo = open(fileDir,'r',encoding='utf-8')
    #     # 2. 使用第三方库去获取
    #     res = yaml.load(fo,Loader=yaml.FullLoader) # 处理警告
    #     print(res)
    #     print(res['info1'])
    #     print(res['info2'])
    
    def get_yamls_data(fileDir):
        '''
        des: 一个yaml文件内包含多个yaml数据
        :param fileDir:
        :return:
        '''
        # 1. 打开yaml文件
        fo = open(fileDir,'r',encoding='utf-8')
        # 2. 使用第三方库去获取
        res = yaml.load_all(fo,Loader=yaml.FullLoader) # 处理警告
        for one in res:
            print(one)
    
    
    if __name__ == '__main__':
        get_yamls_data('../configs/config.yaml')
    
    

     

    2.6 引用

    &和*用于引用

    name: &name 灰蓝
    tester: *name

    输出:

    name: 灰蓝
    tester: 灰蓝

    2.7 强制转换

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

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

    输出:

     明显能够看到23被强制转成了int类型,而flaoat型的3.14则被强转成了str型。

    另外pyYaml还支持转换成Python/object类型。

    2.8 分段

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

    ---
    name: cc
    age: 20
    ---
    name: cici
    age: 18

    这时候我们就得用到我们的load_all()方法出场了,load_all方法会生成一个迭代器,可以用for输出出来:

    import yaml
    
    ys = yaml.load_all(file('test.yaml','r'))
    for y in ys:
        print y

    输出:

    {'age': 20, 'name': 'cc'}
    {'age': 18, 'name': 'kk'}

    对应的也有dump_all()方法,一个意思,就是将多个段输出到一个文件中,

    import yaml
    
    object1 = {"name":"cc","age":20}
    object2 = {"kk",18}
    
    with open('test.yaml','w') as f:
        res = yaml.dump_all([object1, object2], f)

    打开test.yaml:

     

    dump()和dump_all()方法可以传入列表,也可以传入一个可序列化生成器,如:range(0),                如下:

    import yaml
    y =yaml.dump(range(10))
    print y

    输出:

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

    在dump和dump_all()的时候还可以配一堆参数

    3. Yaml格式测试用例

    3. 1  yaml使用场景

  • 配置文件
  • 测试用例
  • 3.2 yaml语法

  • 字典
  • 列表
  • 嵌套
  • 注释
  • &*变量操作
  • 多用例
  • 空格与颜色变化
  • # yaml 测试用例
    # 登录模块
    # 列表:里面每个元素就是一个用例
    # 字典:一个用例里面:一些详情
    
    - #login_test_01
      url: /account/sLogin #路径
      method: POST #详情
      detail: 用户名正确,密码正确 #详情
      headers: #请求头
      data: #请求体
        username: md0000
        password: 888888
      resp:
        code: 20000 #code
        msg: 成功
    
    - #login_test_02
      url: /account/sLogin #路径
      method: POST #详情
      detail: 用户名正确,密码为空 #详情
      headers: #请求头
      data: #请求体
        username: md0000
        password:
      resp:
        code: 9999 #code
        msg: 输入的密码错误!

     3.3 yaml操作  

    运行模式

    1.  使用终端运行:python -m run.py              

    2. 使用执行文件运行:

    run.bat(windows) 

    run.sh(linux)  运行指令 ./run.sh

    3. jenkins运行 会使用自带的sh 功能运行     

             

    物联沃分享整理
    物联沃-IOTWORD物联网 » Yaml详解

    发表评论