• python pyyaml操作yaml配置文件


    在测试工作中,可以使用yaml编写测试用例,执行测试用例时直接获取yaml中的用例数据进行测试(如:接口自动化测试)

    1.什么是yaml

      是一种可读的数据序列化语言,通常用于配置文件

      非常简洁和强大,远比json格式更方便

      可用作自动化测试框架的配置文件和测试用例文件

      原则
      a.大小写敏感
      b.使用缩进表示层级关系
      c.缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级。
      d.使用#表示注释
      e.字符串可以不用引号标注

    2.yaml配置文件的格式

      使用:号隔开表示键值对

      使用-号表示数组

      例如:

    ip: 127.0.0.1
    port: 2002
    port_in: 8764
    charset: utf-8
    post_type:
        - 1
        - 2
        - 3
        - 4
    
    读取后的结果:
    {'ip': '127.0.0.1', 'port': 2002, 'port_in': 8764, 'charset': 'utf-8', 'post_type': [1, 2, 3, 4]}
    

    &和*用于引用

    ip: &ip 127.0.0.1
    url: *ip
    
    #运行结果
    {'ip': '127.0.0.1', 'url': '127.0.0.1'}
    

    3.使用python操作yaml配置文件

      (注:PyYAML5.1之后,通过禁止默认加载程序(FullLoader)执行任意功能,该load函数也变得更加安全)

      pyyaml:python的第三方库,用于操作yaml配置文件

      安装pyyaml:pip install PyYaml

      字符串转换成字典:yaml.load()  

    import yaml
    
    def get_configres(filepath):
       '''
       获取yaml配置文件中的内容
       :param filepath:
       :return: 返回的是一个字典
       '''
       f1=open(filepath,"r")
       res=yaml.load(f1,Loader=yaml.FullLoader)
       return res
    
    res=get_configres("../config/cfg.yaml")
    print(res,type(res))
    
    #运行结果:
    {'ip': '127.0.0.1', 'port': 2002, 'port_in': 8764, 'charset': 'utf-8', 'post_type': [1, 2, 3, 4]} <class 'dict'>
    

     字典转换成字符串:yaml.dump()

    params={'ip': '127.0.0.1', 'port': 2002, 'port_in': 8764, 'charset': 'utf-8', 'post_type': [1, 2, 3, 4]}
    res_str=yaml.dump(params)
    print(res_str,type(res_str))
    
    #运行结果:
    charset: utf-8
    ip: 127.0.0.1
    port: 2002
    port_in: 8764
    post_type:
    - 1
    - 2
    - 3
    - 4
     <class 'str'>
    

      使用yaml写测试用例

    --- #登录模块
    - #test1
      url: /api/login
      method: post
      detail: 正常登录
      data:
        username: admin
        password: ipharmacare
      check:
        retcode: 0
    
    - #test2
      url: /api/login
      method: post
      detail: 不传账号,传密码
      data:
        username: test2
        password: ipharmacare2
      check:
        retcode: 0
    
    
    #运行结果:
    [{'url': '/api/login', 'method': 'post', 'detail': '正常登录', 'data': {'username': 'admin', 'password': 'ipharmacare'}, 'check': {'retcode': 0}}, {'url': '/api/login', 'method': 'post', 'detail': '不传账号,传密码', 'data': {'username': 'test2', 'password': 'ipharmacare2'}, 'check': {'retcode': 0}}] 
    

      在一个文件中保存多个Yaml文档内容:用---隔开,使用yaml.load_all()方法

    test.yml

    --- #登录模块
    - #test1
      url: /api/login
      method: post
      detail: 正常登录
      data:
        username: admin
        password: ipharmacare
      check:
        retcode: 0
    
    --- #登录模块2
    - #test1
      url: /api/login
      method: post
      detail: 不传账号,传密码
      data:
        username: test2
        password: ipharmacare2
      check:
        retcode: 0
    

      读取使用yaml.load_all()方法

    import yaml
    
    def get_configres(filepath):
       '''
       获取yaml配置文件中的内容
       :param filepath:
       :return: 返回的是一个字典
       '''
       f1=open(filepath,"r",encoding='utf-8')
       res=yaml.load_all(f1,Loader=yaml.FullLoader)
       return res
    
    res=get_configres("../config/test.yml")
    print(res,type(res))
    for i in res:
        print(i)
    
    #读取后的结果:
    <generator object load_all at 0x0322C570> <class 'generator'>
    [{'url': '/api/login', 'method': 'post', 'detail': '正常登录', 'data': {'username': 'admin', 'password': 'ipharmacare'}, 'check': {'retcode': 0}}]
    [{'url': '/api/login', 'method': 'post', 'detail': '不传账号,传密码', 'data': {'username': 'test2', 'password': 'ipharmacare2'}, 'check': {'retcode': 0}}]
    

      

     

  • 相关阅读:
    angularJS 修改操作select回显选中的数据
    zkteco iface702 中控考勤机java开发步骤二---获取考勤机 的考勤数据
    zkteco iface702 中控考勤机java开发步骤一---连接考勤机
    JQuery的分页插件pagination.js
    Ajax跨域后台处理
    发送邮箱工具类--阿里企业邮箱群发
    kindeditor-4.1.10 ---文件上传
    导出excel表格
    算法
    Arrays类——Arrays.asList()方法使用
  • 原文地址:https://www.cnblogs.com/pipile/p/13391016.html
Copyright © 2020-2023  润新知