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

接口测试 | Day57 接口关联与配置文件的封装与调用

走向易富强之路 2021-08-17
375


背景说明:

1、为了防止三天打鱼两天晒网式学习

2、每日更新1-2个小知识点或者案例

3、只看和跟着做的理解程度是不一样的

4、建议一起打卡练习

5、互相督促打卡 + v:yifuqiang2021


Day57


目标:

  • 接口关联

  • 配置文件封装与调用


一、接口关联

  • 接口的关联,就是特定数据的传递

  • token与Session是在接口端常用的鉴权机制

    • 基于token是通过变量的保存和传递来实现数据的关联性

    • 基于Session是通过requests.session()对象来实现数据的关联性


1.1)基于token来实现接口关联

    import requests
    # 接口关联案例
    url = 'http://39.98.138.157:5000/api/login'
    data = {
    'username': 'admin',
    'password': '123456'
    }


    res = requests.post(url=url,json=data)
    url = 'http://39.98.138.157:5000/api/getuserinfo'
    headers = {
    'token':res.json()['token']
    }
    res = requests.get(url=url,headers=headers)
    print(res.text)
    复制

    运行结果:

     


    1.2)基于session来实现接口关联

    • 创建session对象后,基于这个session所产生的相关session信息,都会被保存

    • 使用:

      • session = requests.session()

      • session.get()

      • session.post()


    二、实现接口关联的测试用例

    实例流程:用户登录→拿到token→获取用户信息→加入商品到购物车→下单

      import requests
      # 接口关联案例


      # 用户登录
      url = 'http://39.98.138.157:5000/api/login'
      data = {
      'username': 'admin',
      'password': '123456'
      }
      res = requests.post(url=url,json=data)


      # 根据登录接口的token,获取用户信息
      url = 'http://39.98.138.157:5000/api/getuserinfo'
      headers = {
      'token':res.json()['token']
      }
      res1 = requests.get(url=url,headers=headers)
      print(res1.text)


      # 添加商品到购物车,基于token,userid,openid
      url = 'http://39.98.138.157:5000/api/addcart'
      data = {
      'userid': res1.json()['data'][0]['userid'],
      'openid': res1.json()['data'][0]['openid'],
      'productid': 8888
      }
      res2 = requests.post(url=url,headers=headers,json=data)
      print(res2.text)


      # 购物车下单
      url = 'http://39.98.138.157:5000/api/createorder'
      data = {
      'userid': res2.json()['data'][0]['userid'],
      'openid': res2.json()['data'][0]['openid'],
      'cartid': res2.json()['data'][0]['cartid'],
      'productid': 8888
      }
      res3 = requests.post(url=url,headers=headers,json=data)
      print(res3.text)
      复制

      运行结果:


      三、配置的文件的封装与调用

      • ini文件的读取

        • 准备ini文件

        • 导包:import configparser

        • 实例化对象:conf = configparser.ConfigParser()

        • 通过实例化对象读取配置文件:conf.read('./路径/config.ini')

        • 获取指定配置:url = conf.get('TEST_SERVER','url')

      • yaml文件的读取

        • 导包:from ddt import ddt,file_data

        • class前@ddt

        • def前@file_data('路径/文件名')

        • def 函数名(self,yaml文件里的字段名)


      3.1)封装数据至ini配置文件,并读取

      新建一个config.ini的文件,并准备内容

        # 读取ini配置文件的模块
        import configparser


        # 读取配置文件中的内容
        conf = configparser.ConfigParser()
        conf.read('./conf/config.ini')
        url = conf.get('TEST_SERVER','url')
        print(url)
        复制

        运行结果:


        将配置文件进行封装后调用

        read_ini.py封装的配置文件函数

          # 读取ini配置文件的模块
          import configparser
          # 读取配置文件中的内容
          def read_ini(path,selection,option):
          conf = configparser.ConfigParser()
          conf.read(path)
          value = conf.get(selection,option)
          return value


          # 在unittest框架下的简单调用
          import unittest
          import requests
          from demo0815.conf import read_ini


          class CaseDemo(unittest.TestCase):
          @classmethod
          def setUpClass(cls) -> None:
          cls.url = read_ini.read_ini('./conf/config.ini','TEST_SERVER','url')
          # 测试用例的定义
          def test_01(self):
          url = self.url + 'api/login'
          print(url)
          复制

          行结果:


          3.2)封装接口路径至yaml,以及读取

            import unittest
            from demo0815.conf import read_ini
            from ddt import ddt,file_data


            @ddt
            class CaseDemo(unittest.TestCase):

            @classmethod
            def setUpClass(cls) -> None:
            cls.url = read_ini.read_ini('./conf/config.ini','TEST_SERVER','url')

            # 测试用例的定义
            @file_data('./data/path.yaml')
            def test_01(self,path):
            url = self.url + path
            print(url)


            if __name__ == '__mian__':
            unittest.main()
            复制

            运行结果:


            四、总结

            • 框架指的是

              • 一个个单独的功能模块组合而成,让每一个模块专注于自己的实现。

              • 比如数据模块提供数据,专注于业务逻辑处理模块,前端展示模块等等等等

            • 接口关联

              • 接口的关联,就是特定数据的传递

              • token与Session是在接口端常用的鉴权机制

                • 基于token是通过变量的保存和传递来实现数据的关联性

                • 基于Session是通过requests.session()对象来实现数据的关联性

            • 配置文件封装与调用

              • ini文件的读取

                • 准备ini文件

                • 导包:import configparser

                • 实例化对象:conf = configparser.ConfigParser()

                • 通过实例化对象读取配置文件:conf.read('./路径/config.ini')

                • 获取指定配置:url = conf.get('TEST_SERVER','url')

              • yaml文件的读取

                • 导包:from ddt import ddt,file_data

                • class前@ddt

                • def前@file_data('路径/文件名')

                • def 函数名(self,yaml文件里的字段名)


            “你的鼓励,是我继续的动力”

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

            评论