Python+requests 之封装yaml配置文件的读写

本文介绍了如何使用Python的requests库结合yaml配置文件进行读写操作。内容包括YAML的基本语法规则,open函数的使用,以及环境配置中pyyaml库的安装。还展示了读取和追加写入yaml文件的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

YAML语言的设计目标,是方便人类读写。实质上是一种通用的数据串行化格式。它的基本语法规则如下:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • '#'表示注释, 会被解析器忽略

YAML 支持的数据结构有三种

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量(scalars):单个的、不可再分的值

 


open函数

open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写

函数语法:

open(name[, mode[, buffering]])

参数说明:

  • name : 一个包含了你要访问的文件名称的字符串值。

  • mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

  • buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。

<think>嗯,用户想了解如何使用CSV、Excel或YAML进行数据驱动的封装方法。首先,我需要回忆一下数据驱动测试的基本概念。数据驱动测试的核心是将测试数据与测试逻辑分离,这样修改数据时不需要改动代码。用户提到的三种格式:CSV、Excel、YAML,每种都有不同的处理方式。 先考虑CSV。CSV是纯文本,结构简单,用Python内置的csv模块就能处理。我需要给出一个读取CSV的示例,可能包括如何将每一行数据转换为字典,方便在测试中使用。然后封装成一个类或者函数,方便调用。 接下来是Excel。Excel处理稍微复杂,需要用到第三方库,比如openpyxl或者pandas。用户可能更熟悉openpyxl,因为之前的引用里提到过。需要展示如何读取Excel文件,并将每个工作表或行转换为测试数据。可能需要处理表头,将每一行数据映射到字典中。 然后是YAML,这在之前的引用中被多次提到,特别是动态字段和结构化数据。YAML适合复杂结构,使用PyYAML库来解析。需要展示如何读取YAML文件,并且可能如何处理嵌套的数据结构。此外,用户提到过在接口测试中使用YAML存储参数,比如method、url等,所以示例可能需要贴近这种场景。 用户可能希望看到具体的代码示例,所以每个部分都需要一个代码块。另外,需要比较不同格式的优缺点,比如CSV适合简单数据,Excel适合表格形式,YAML适合复杂结构。还要注意代码的可重用性,比如封装成工具类,这样在测试框架中可以方便调用。 还要注意用户提到的引用内容,比如引用[3]中提到数据驱动在接口测试中的应用,数据量小用参数化,数据量大用结构化文件。所以在示例中可能需要提到这点,说明不同格式适用的场景。 另外,用户可能关心如何处理不同格式的数据转换,比如从Excel读取后转换成YAML,这在引用[2]里有Python代码示例,可能需要提到相关的方法,但用户的问题主要是封装方法,所以可能不需要详细展开转换部分。 最后,生成相关问题,需要围绕数据驱动、不同格式的比较、优化方法、实际应用场景等,帮助用户进一步学习。</think>### CSV/Excel/YAML数据驱动封装方法示例 #### 一、CSV数据驱动封装 ```python import csv class CSVDataDriver: def __init__(self, file_path): self.data = [] with open(file_path, encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: self.data.append(dict(row)) # 转换为字典格式 def get_test_data(self): return [(item['case_id'], item) for item in self.data] # 使用示例 csv_driver = CSVDataDriver('test_data.csv') for case_id, data in csv_driver.get_test_data(): print(f"执行用例{case_id}: {data}") ``` #### 二、Excel数据驱动封装 ```python from openpyxl import load_workbook class ExcelDataDriver: def __init__(self, file_path, sheet_name): self.wb = load_workbook(file_path) self.sheet = self.wb[sheet_name] self.headers = [cell.value for cell in self.sheet[1]] def get_test_data(self): return [ dict(zip(self.headers, [cell.value for cell in row])) for row in self.sheet.iter_rows(min_row=2) ] # 使用示例 excel_driver = ExcelDataDriver('test_data.xlsx', 'LoginTest') for test_case in excel_driver.get_test_data(): print(f"请求参数: {test_case['params']}, 预期结果: {test_case['expect']}") ``` #### 三、YAML数据驱动封装 ```python import yaml import os class YamlDataDriver: def __init__(self, file_path): with open(os.getcwd() + file_path, 'r', encoding='utf-8') as f: self.data = yaml.safe_load(f) # 安全加载嵌套结构 def get_api_cases(self): return [ { "name": case['name'], "method": case['method'], "url": case['url'], "params": case.get('params'), "expect": case['expect'] } for case in self.data['test_cases'] ] # YAML文件示例(test_api.yaml) """ test_cases: - name: 用户登录成功 method: POST url: /api/login params: username: "test01" password: "123456" expect: code: 200 - name: 用户登录失败 method: POST url: /api/login params: username: "wrong" password: "error" expect: code: 401 """ ``` #### 四、格式对比与选择建议 1. **CSV**:适合简单表格数据(如$m \times n$二维数据),读写速度快[^3] 2. **Excel**:适合需要多工作表管理的场景(如$\sum_{i=1}^{n} sheets_i$),支持公式计算 3. **YAML**:适合复杂数据结构(如$\bigcup_{i=1}^{n} \{key:value\}$),支持嵌套和注释[^1] #### 五、最佳实践建议 1. 使用工厂模式统一数据源接口:$\text{DataDriverFactory}(format)\rightarrow \text{DataReader}$ 2. 对敏感数据进行加密处理:$encrypt(data) = \text{AES}(key, data)$ 3. 结合pytest参数化使用: ```python import pytest @pytest.mark.parametrize("case_data", yaml_driver.get_api_cases()) def test_api(case_data): response = requests.request( method=case_data['method'], url=case_data['url'], params=case_data['params'] ) assert response.status_code == case_data['expect']['code'] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SitVen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值