在測試工作中,可以使用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}}]