前面安靜介紹yaml的時候都提到過可以用來存儲測試數據,幫助我們完成數據分離的測試思想,從而幫助我們以后更換測試數據更加方便
整體思路
我們主要思想就是進行測試數據的分離:
1、一個寫數據的地方
2、一個讀數據的文件
3、編寫測試用例
封裝讀取Yaml
簡單的進行對讀取yaml進行封裝,方便我們后面調用
import yaml import os class GetYaml(): def __init__(self,file_path): # 判斷文件是否存在 if os.path.exists(file_path): self.file_path = file_path else: print('沒有找到%s文件路徑'%file_path) self.data = self.read_yaml() def read_yaml(self): with open(self.file_path,'r',encoding='utf-8')as f: p = f.read() return p def get_data(self,key=None): result = yaml.load(self.data,Loader=yaml.FullLoader) # 判斷key是否存在 if key == None: return result else: return result.get(key) if __name__ == '__main__': read_yaml = GetYaml('data.yaml') xx = read_yaml.get_data('test_case') print(xx)
寫入測試數據
我們將測試的數據寫入到yaml中
test_case: 查詢 url: http://apis.juhe.cn/simpleWeather/query test01: - test_name: 正確的key和正確的city key: 331eab8f3481f37868378fcdc76cb7cd city: 上海 cake: 查詢成功 - test_name: 正確的key和錯誤的city key: 331eab8f3481f37868378fcdc76cb7cd city: 未知地 cake: 暫不支持該城市 test02: - test_name: 錯誤的key值和正確的city key: 331eab8f3481f37868378fcdc76cb7c city: 上海 cake: 錯誤的請求KEY - test_name: 錯誤的key值和錯誤的city key: 331eab8f3481f37868378fcdc76cb7c city: 未知地 cake: 錯誤的請求KEY
完成數據讀取
讀取yaml已經全部封裝好了,然后數據也填寫完成了,接下來就需要我們編寫測試用例了。這里安靜用到了ddt的格式進行讀取yaml的數據,當然我們也可以使用ddt.file_data()的方法進行讀取
這個安靜分別寫了兩種獲取yaml的數據內容
import os,requests import ddt import unittest from Interface.A3 import GetYaml # 獲取到文件路徑 file = os.path.join(os.path.dirname(__file__), 'data.yaml') yaml_data = GetYaml(file) result = yaml_data.get_data() url = result['url'] test_01 = result['test01'] @ddt.ddt class Test(unittest.TestCase): # 封裝一個查詢天氣 def select(self,key,city): data = { "key":key, "city":city } r = requests.post(url,data=data) return r @ddt.data(*test_01) def test01(self,yaml_data): print('當前測試用例名稱:%s'%yaml_data['test_name']) print('city:%s;key:%s'%(yaml_data['city'],yaml_data['key'])) result = self.select(city=yaml_data['city'],key=yaml_data['key']) self.assertIn(yaml_data['cake'],result.text) @ddt.data(*result['test02']) def test02(self,data): print('當前測試用例名稱:%s'%data['test_name']) print('city:%s;key:%s'%(data['city'],data['key'])) result = self.select(city=data['city'],key=data['key']) self.assertIn(data['cake'],result.text) if __name__ == '__main__': unittest.main()
運行代碼會發現用例已經執行完成了。
這里安靜簡單的對yaml數據進行分離,可能寫的不是很完善,大佬們看到后勿噴,可以給安靜一些經驗。主要的是分享下測試數據分離的一種思想,在自動化中是非常重要的。