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数据进行分离,可能写的不是很完善,大佬们看到后勿喷,可以给安静一些经验。主要的是分享下测试数据分离的一种思想,在自动化中是非常重要的。

原文地址:https://www.cnblogs.com/qican/p/12628398.html