yaml配置文件的读和写

yaml配置文件的读和写

1、安装PyYAML

2、建一个空的yaml文件

 

数据如下:

- a: 5
  b: 2
  c: 3
- a: 8
  b: 2
  c: 6

3、打开yaml文件,读取yaml文件数据

import  pytest
import allure
import yaml

from core.cal import Cal
from tests.contest import calc_init

def load_data(path='data.yaml'):
    with open(path) as f:
        data=yaml.safe_load(f)
        keys=','.join(data[0].keys())
        values=[d.values() for d in data]
        data={'keys':keys,'values':values}
        return data
@allure.feature('算法模块')
class Testcal():
    data=load_data()
    def setup_class(self):
        self.cal=Cal()
    # data = load_data()
    # @pytest.mark.parametrize('a,b,c',[(5,2,3),(8,2,6),(1,2,9)])

    @allure.story('加法测试用例')
    @pytest.mark.parametrize(data['keys'], data['values'])
    def test_sub(self,a,b,c):
        assert self.cal.sub(a,b)==c
        #正常值计算
    @allure.story('除法测试用例')
    @pytest.mark.parametrize('a,b,c',[(2,1,2),(0.2,0.1,2),(2,0.2,0.0)])
    def test_div(self,a,b,c):
        assert self.cal.div(a,b)==c
        #异常值计算
    @pytest.mark.parametrize('a,b',[(1,0),(0.2,0)])
    @allure.story('除法测试用例')
    def test_div(self,a,b):
        with allure.step('除数为0'):
            print("除数为0")
        with pytest.raises(ZeroDivisionError):
            assert self.cal.div(a,b)

    def test_add(self,calc_init):
        assert  calc_init.add(2,1)==3

方法引用:

data=load_data()

参数化引用

 

@pytest.mark.parametrize(data['keys'], data['values'])

将yaml文件的写入和读取进行封装,方便调用

安装:pip install ruamel.yaml

2、新建confing文件,创建conf.yaml文件

 

3、 yaml文件的写入方法和读取方法进行封装

import os
from ruamel import yaml


class WRYaml:
    """ yaml文件的读和写 """

    def __init__(self):
        """ 指定yaml文件的路径 """
        self.configpath = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'config')

    def read_yaml(self, yaml_file='conf.yaml'):
        """ 读取yaml里面里面的数据"""
        try:
            with open(os.path.join(self.configpath, yaml_file), "r", encoding='utf8') as f:
                return yaml.load(f, Loader=yaml.Loader)
        except Exception as error:
            print(f'读取yaml失败,错误如下:{error}')
            return False

    def write_yaml(self, data, yaml_file='conf.yaml', mode='w'):
        """ 往yaml里面写入数据
            yamlFile:yaml文件名
            data:要写入的数据
            mode:写入方式: w,覆盖写入, a,追加写入
            将原数据读取出来,如果没有要加入的key,则创建一个,如果有,则执行key下面的数据修改
        """
        try:
            old_data = self.read_yaml(yaml_file) or {}
            for data_key, data_value in data.items():
                if not old_data.get(data_key):
                    old_data.setdefault(data_key, {})
                for value_key, value_value in data_value.items():
                    old_data[data_key][value_key] = value_value
            with open(os.path.join(self.configpath, yaml_file), mode, encoding="utf-8") as f:
                yaml.dump(old_data, f, Dumper=yaml.RoundTripDumper)
            return True
        except Exception as error:
            print(f'yaml文件写入失败,错误如下:\n{error}')
            return False


if __name__ == "__main__":
    wryaml = WRYaml()
   # 写入数据文件
    data = {
        'test': {'AAA': 134511, 'BBB': 333,'CCC':999}
    }
    print(wryaml.write_yaml(yaml_file='conf.yaml', data=data))
    # 读取数据文件
    print(wryaml.read_yaml('conf.yaml'))
    # data1 = wryaml.read_yaml('conf.yaml')
    # # lis = [i['a'] for i in data1]
    # # print(lis)

 写入和读取数据

 


版权声明:本文为feifei_888888原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。