Python接口測試—讀取Yaml文件內(nèi)容

來自接口測試初學(xué)者的筆記,寫的不對的地方大家多多指教哦

一、Yaml的基本操作

以下關(guān)于yaml文件的內(nèi)容都存儲(chǔ)在t.yaml文件中,路徑為:./t.yaml

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

  • 字典的鍵值對使用“:”分隔
  • 字典直接寫key和value,每個(gè)鍵值對占一行
  • ”:“后面要加空格
name: "test_yaml"
result: "success"

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

  • 一組按序排列的值(簡稱”序列或列表“)
  • 數(shù)組前加有”-“符號,符號與值之間需用空格分隔
- "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.讀取單個(gè)文件

使用yaml.safe_load()讀取單個(gè)文件

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.讀取多個(gè)文件

Yaml文件中使用”- - -“來標(biāo)識文件,即表示測試用例

Yaml文件中多個(gè)文件的配置

# 讀取多個(gè)文檔
---
"用戶名稱1": "test123"
"密碼": "123123"
---
"用戶名稱2": "test456"
"密碼": "123123"

使用yaml.safe_load_all()讀取多個(gè)文件

import yaml
# 讀取多個(gè)文件
# 打開Yaml文件
with open("./t.yaml", 'r', encoding='utf-8') as f:
    # 讀取Yaml文件
    r = yaml.safe_load_all(f)
    # 循環(huán)打印
    for i in r:
        print(i)

三、Yaml封裝

思路

  • 創(chuàng)建類
  • 初始化文件,判斷文件是否存在
  • 讀取單個(gè)/多個(gè)文件

完整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("文件不存在")
        # 是否讀取過單個(gè)文檔
        self._data = None
        # 是否讀取過多個(gè)文檔
        self._data_all = None

    # yaml單個(gè)文檔讀取
    def data(self):
        # 第一次調(diào)用data,讀取yaml單個(gè)文檔,如果不是,直接返回之前保存的數(shù)據(jù)
        if not self._data:
            with open(self.yaml_file, "rb") as f:
                self._data = yaml.safe_load(f)
        return self._data

    # yaml多個(gè)文檔讀取
    def data_all(self):
        # 第一次調(diào)用data,讀取yaml多個(gè)文檔,如果不是,直接返回之前保存的數(shù)據(jù)
        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文件測試
# 單個(gè)文件
res = YamlReader("./t.yml").data()
print(res)
# 多個(gè)文件
res_all = YamlReader("./t.yml").data_all()
print(res_all)

知識點(diǎn):

使用raise拋出異常,基本語法為:raise [exceptionName [(reason)]],raise具有三種常用語法,如下:

  • raise:單獨(dú)一個(gè) raise。該語句引發(fā)當(dāng)前上下文中捕獲的異常(比如在 except 塊中),或默認(rèn)引發(fā) RuntimeError 異常。
  • raise 異常類名稱:raise 后帶一個(gè)異常類名稱,表示引發(fā)執(zhí)行類型的異常。
  • raise 異常類名稱(描述信息):在引發(fā)指定類型的異常的同時(shí),附帶異常的描述信息。

其它詳細(xì)知識點(diǎn)參考:http://c.biancheng.net/view/2360.html

四、讀取Yaml配置文件

在第三部分,初始化判斷文件是否存在時(shí)需要傳入Yaml文件地址,這邊我們可以通過代碼來獲取配置文件的地址,以此來讀取配置文件的內(nèi)容。

具體的代碼如下

# 獲取配置文件地址,讀取配置文件內(nèi)容
import os
from utils.yaml_util import YamlReader

# 1.獲取項(xiàng)目的基本目錄
# 獲取當(dāng)前文件的絕對路徑:E:\\study\\Fork\\InterAutoTest_W\\AutoTest\\config\\read_conf.py
current = os.path.abspath(__file__)
# 獲取當(dāng)前項(xiàng)目的絕對路徑:在當(dāng)前文件路徑的上兩級目錄,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.讀取配置文件
# 創(chuàng)建類
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"]

    # 獲取測試數(shù)據(jù)
    def get_conf_data(self):
        return self.config["DATA"]["test_login"]

Yaml文件內(nèi)容

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()
    # 使用重構(gòu)后的post
    r = request.post(url, json=data)
    print(r)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容