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

  • 相关阅读:
    音频、视频等文件格式(.ts、.meta)及其认识
    元素之和最接近 0 的区间(部分和)
    元素之和最接近 0 的区间(部分和)
    说话的智慧
    说话的智慧
    工业相机基本参数以及选型参考(二)
    常用编程软件站点、镜像站、科技类 PDF
    常用编程软件站点、镜像站、科技类 PDF
    经典书单 —— 语言/算法/机器学习/深度学习/AI/CV/PGM
    hdu1024 Max Sum Plus Plus
  • 原文地址:https://www.cnblogs.com/qican/p/12628398.html
Copyright © 2020-2023  润新知