requests---通過yaml+ddt封裝測試數據


  前面安靜介紹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數據進行分離,可能寫的不是很完善,大佬們看到后勿噴,可以給安靜一些經驗。主要的是分享下測試數據分離的一種思想,在自動化中是非常重要的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM