暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

接口测试 | Day56 ddt+Yaml自动化实现

走向易富强之路 2021-08-17
715
 
背景说明:
1、为了防止三天打鱼两天晒网式学习
2、每日更新1-2个小知识点或者案例
3、只看和跟着做的理解程度是不一样的
4、建议一起打卡练习
5、互相督促打卡 + v:yifuqiang2021

Day56

目标:
  • ddt+Yaml自动化实现


一、Yaml
  • 安装:pip install PyYaml
  • 说明:
    • yaml文件是唯一一种可以和ddt模块完美搭配的文件格式
    • 通过file_data装饰器来处理
    • Yaml文件本身与txt没有太大的区别,都可以用于存放字符串。
    • 一般用于配置或者数据提供场景来进行使用
  • yaml数据类型的定义规范:
    • list定义:通过- 来定义
    • dict定义:通过: 来定义
    • 所有的数据如果有子元素存在,需要有缩进来规范格式

二、Yaml的数据读取
  • yaml读取文件与常规文件不同,通过open形成file格式的内容
  • 基于yaml库来实现内容的识别和读取

2.1)list数据类型的读取
准备yaml文件
实例:
    import yaml


    # 读取yaml文件
    file = open('./data/data.yaml','r',encoding='utf-8')


    # 读取yaml格式的数据内容并保存原有的格式
    data = yaml.load(stream=file)
    print(type(data))
    运行结果:
    • 可以看到读取的数据类型是list
    • 以及有个Warning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe
    • 解决办法:加上Loader=yaml.FullLoader
      import yaml
      # 读取yaml文件
      file = open('./data/data.yaml','r',encoding='utf-8')


      # 读取yaml格式的数据内容并保存原有的格式
      data = yaml.load(stream=file,Loader=yaml.FullLoader)
      print(type(data))


      # 使用list读取内容的方法
      print(data[4])
      行结果:

      2.2)dict字典数据类型的读取
      准备文件dict_data.yaml文件
      • 注意value前面有个空格
      实例:
        import yaml
        # 读取yaml文件
        file = open('./data/dict_data.yaml','r',encoding='utf-8')


        # 读取yaml格式的数据内容并保存原有的格式
        data = yaml.load(stream=file,Loader=yaml.FullLoader)
        print(type(data))


        # 使用dict读取内容的方法
        print(data['key'])
        运行结果:

        2.3)混合数据类型(list+dict)
        a、准备数据:list 包含dict类型
        • 将字典类型的数据包在list里
        • 子元素要注意缩进
        实例:
          import yaml
          # 读取yaml文件
          file = open('./data/dict_data.yaml','r',encoding='utf-8')


          # 读取yaml格式的数据内容并保存原有的格式
          data = yaml.load(stream=file,Loader=yaml.FullLoader)


          print(type(data))
          print(data)
          print(type(data[0]))
          print(data[0])
          运行结果:
          • 每一个字典都是单独的元素

          b、准备数据:dict 包含list类型

          实例:

            import yaml


            # 读取yaml文件
            file = open('./data/dict_data.yaml','r',encoding='utf-8')


            # 读取yaml格式的数据内容并保存原有的格式
            data = yaml.load(stream=file,Loader=yaml.FullLoader)
            print(type(data))
            print(data)
            运行结果:

            三、ddt+Yaml实现
            • 导入from ddt import file_data
            • 函数之前@file_data('路径/文件名.yaml')

            3.1)列表数据
            准备数据
            实例:
              import  unittest
              from ddt import ddt, data, unpack,file_data


              @ddt
              class UnitDdt(unittest.TestCase):
              @file_data('./data/data.yaml')
              def test_03(self,name):
              print(name)


              if __name__ == '__mian__':
              unittest.main()
              运行结果:

              3.2)字典数据
              导入之前准备的字典数据文件
              实例:
                import  unittest
                from ddt import ddt, data, unpack,file_data


                @ddt
                class UnitDdt(unittest.TestCase):

                @file_data('./data/dict_data.yaml')
                def test_03(self,name):
                print(name)
                if __name__ == '__mian__':
                unittest.main()
                运行结果:
                • 提示无法识别age
                • 原因是因为ddt返回来的数据类型是字典,所以函数形参也要对应改变
                • 解决方式:def test_03(self,**kwargs)

                修改yaml文件内容
                  import  unittest
                  from ddt import ddt, data, unpack,file_data


                  @ddt
                  class UnitDdt(unittest.TestCase):
                  @file_data('./data/dict_data.yaml')
                  def test_03(self,**kwargs):
                  print(kwargs)


                  if __name__ == '__mian__':
                  unittest.main()
                  行结果:

                  四、ddt+Yaml自动化实现
                  实例:unittest+ddt+yml+requests+jsonpath+断言来实现登录测试
                    import json
                    import unittest
                    import requests
                    import jsonpath
                    from ddt import ddt,file_data


                    @ddt
                    class Demo(unittest.TestCase):

                    @file_data('./data/user.yaml')
                    def test_1(self, user, msg):
                    url = 'http://39.98.138.157:5000/api/login'
                    data = {
                    'username': user['username'],
                    'password': user['password']
                    }
                    res = requests.post(url=url, json=data)
                    print(res.text)

                    # 基于jsonpath提取响应结果msg
                    res_json = json.loads(res.text)
                    msg_result = jsonpath.jsonpath(res_json,'$..msg')
                    print(msg_result[0])

                    # 通过获取的结果与yaml文件msg比对断言校验
                    self.assertEqual(msg_result[0],msg)
                    if __name__ == '__main__':
                    unittest.main()
                    运行结果:

                    五、总结
                    • yaml
                      • 安装:pip install PyYaml
                      • 数据类型的定义规范:
                        • list定义:通过- 来定义
                        • dict定义:通过: 来定义
                        • 所有的数据如果有子元素存在,需要有缩进来规范格式
                      • 数据的读取:
                        • 读取yaml格式的数据内容,会保存原有的格式
                        • file = open('路径/文件名.yaml','r',encoding='utf-8')
                        • data = yaml.load(stream=file,Loader=yaml.FullLoader)
                    • yaml+ddt
                      • 导入from ddt import file_data
                      • 函数之前@file_data('路径/文件名.yaml')
                    • 应用场景
                      • 准备配置文件的数据或者提供特定的测试数据准备

                    “你的鼓励,是我继续的动力”
                    文章转载自走向易富强之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论