Python接口测试—读取Yaml文件内容

来自接口测试初学者的笔记,写的不对的地方大家多多指教哦

一、Yaml的基本操作

以下关于yaml文件的内容都存储在t.yaml文件中,路径为:./t.yaml

1.使用字典:{'name': 'test_yaml', 'result': 'success'}

  • 字典的键值对使用“:”分隔
  • 字典直接写key和value,每个键值对占一行
  • ”:“后面要加空格
name: "test_yaml"
result: "success"

2.使用列表:['a', 'b', 'c']

  • 一组按序排列的值(简称”序列或列表“)
  • 数组前加有”-“符号,符号与值之间需用空格分隔
- "a"
- "b"
- "c"

3.字典嵌套字典:

{'person1': {'name': 'xiaoming', 'age': '18'},

'person2': {'name': 'xiaohua', 'age': '20'}}

person1:
  name: "xiaoming"
  age: "18"
person2:
  name: "xiaohua"
  age: "20"

4.字典嵌套列表:{person:["a","b","c"]}

person:
  - "a"
  - "b"
  - "c"

5.列表嵌套列表:[['a', 'b', 'c'], ['a', 'b', 'c']]

-
  - "a"
  - "b"
  - "c"
-
  - "a"
  - "b"
  - "c"

6.列表嵌套字典:[{'username1': 'test1'}, {'password1': 111}, {'username2': 'test2'}]

- username1: test1
- password1: 111
- username2: test2

二、读取Yaml文件

1.读取单个文件

使用yaml.safe_load()读取单个文件

import yaml
# 打开Yaml文件
with open("./t.yaml", 'r', encoding='utf-8') as f:
    # 读取Yaml文件
    r = yaml.safe_load(f)
    print(r)

注意:

encoding='utf-8':如果Yaml文件中存在中文字符,则需要添加该属性

2.读取多个文件

Yaml文件中使用”- - -“来标识文件,即表示测试用例

Yaml文件中多个文件的配置

# 读取多个文档
---
"用户名称1": "test123"
"密码": "123123"
---
"用户名称2": "test456"
"密码": "123123"

使用yaml.safe_load_all()读取多个文件

import yaml
# 读取多个文件
# 打开Yaml文件
with open("./t.yaml", 'r', encoding='utf-8') as f:
    # 读取Yaml文件
    r = yaml.safe_load_all(f)
    # 循环打印
    for i in r:
        print(i)

三、Yaml封装

思路

  • 创建类
  • 初始化文件,判断文件是否存在
  • 读取单个/多个文件

完整Yaml封装代码如下

# 封装Yaml文件
import os
import yaml

class YamlReader:
    # 初始化,判断文件是否存在
    def __init__(self, yaml_file):
        if os.path.exists(yaml_file):
            self.yaml_file = yaml_file
        else:
            # 文件不存在,raise抛出异常
            raise FileNotFoundError("文件不存在")
        # 是否读取过单个文档
        self._data = None
        # 是否读取过多个文档
        self._data_all = None

    # yaml单个文档读取
    def data(self):
        # 第一次调用data,读取yaml单个文档,如果不是,直接返回之前保存的数据
        if not self._data:
            with open(self.yaml_file, "rb") as f:
                self._data = yaml.safe_load(f)
        return self._data

    # yaml多个文档读取
    def data_all(self):
        # 第一次调用data,读取yaml多个文档,如果不是,直接返回之前保存的数据
        if not self._data_all:
            with open(self.yaml_file, "rb") as f:
                self._data_all = list(yaml.safe_load_all(f))
        return self._data_all

测试

from utils.yaml_util import YamlReader

# 封装yaml文件测试
# 单个文件
res = YamlReader("./t.yml").data()
print(res)
# 多个文件
res_all = YamlReader("./t.yml").data_all()
print(res_all)

知识点:

使用raise抛出异常,基本语法为:raise [exceptionName [(reason)]],raise具有三种常用语法,如下:

  • raise:单独一个 raise。该语句引发当前上下文中捕获的异常(比如在 except 块中),或默认引发 RuntimeError 异常。
  • raise 异常类名称:raise 后带一个异常类名称,表示引发执行类型的异常。
  • raise 异常类名称(描述信息):在引发指定类型的异常的同时,附带异常的描述信息。

其它详细知识点参考:http://c.biancheng.net/view/2360.html

四、读取Yaml配置文件

在第三部分,初始化判断文件是否存在时需要传入Yaml文件地址,这边我们可以通过代码来获取配置文件的地址,以此来读取配置文件的内容。

具体的代码如下

# 获取配置文件地址,读取配置文件内容
import os
from utils.yaml_util import YamlReader

# 1.获取项目的基本目录
# 获取当前文件的绝对路径:E:\\study\\Fork\\InterAutoTest_W\\AutoTest\\config\\read_conf.py
current = os.path.abspath(__file__)
# 获取当前项目的绝对路径:在当前文件路径的上两级目录,E:\\study\\Fork\\InterAutoTest_W\\AutoTest
BASE_DIR = os.path.dirname(os.path.dirname(current))
# 定义config目录的路径,os.sep表示路径拼接(config为配置文件所属的包名)
_config_path = BASE_DIR + os.sep + "config"
# 定义conf_url.yml文件的路径(conf_url.yml为具体的配置文件名)
_config_url_file = _config_path + os.sep + "conf_url.yml"

# 由于定义的变量是私有的,所以这边定义方法去访问
def get_config_path():
    return _config_path

def get_config_file():
    return _config_url_file

# 2.读取配置文件
# 创建类
class ConfigYaml:
    # 初始化Yaml读取配置文件
    def __init__(self):
        self.config = YamlReader(get_config_file()).data()

    # 获取url
    def get_conf_url(self):
        return self.config["BASE"]["test"]["url"]

    # 获取测试数据
    def get_conf_data(self):
        return self.config["DATA"]["test_login"]

Yaml文件内容

BASE:
  test:
    url: "<http://1.1.1.1>:1111"

DATA:
  test_login:
    username: "python"
    password: "12345678"

测试

import requests
from utils.request_util import request_get, request_post
from utils.request_util import Request
from config.read_conf import ConfigYaml

request = Request()
conf_y = ConfigYaml()

def login_yaml_data():
    url_path = conf_y.get_conf_url()
    url = url_path + "/authorizations/"
    data = conf_y.get_conf_data()
    # 使用重构后的post
    r = request.post(url, json=data)
    print(r)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容