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

接口测试 | Day58 接口关联与测试框架实现(二)

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

Day58

目标:
  • 接口关联与测试框架实现

一、框架设计思路
  • 接口测试的操作步骤
    • 准备数据
    • 发送请求
    • 判断响应
  • 根据测试步骤,将数据和请求相分离
    • 数据都放在/data目录下,一条测试用例一个yaml文件,方便维护与管理
    • 常用操作的封装
yaml数据文件准备:
实例:
    import unittest
    import requests
    from demo0815.conf import read_ini
    from ddt import ddt,file_data
    from demo0810.api_key import Apikey


    @ddt
    class CaseDemo(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
    cls.url = read_ini.read_ini('./conf/config.ini','TEST_SERVER','url')
    cls.ak = Apikey()
    cls.token = None
    cls.userid = None
    cls.openid = None
    cls.cartid = None

    # login接口的测试用例
    @file_data('./data/path.yaml')
    def test_01(self,path,data):
    url = self.url + path
    res = self.ak.do_post(url=url,json=data)
    print(res.text)
    # 赋值全部变量,类名.变量
    token = self.ak.get_text(res.text,'token')
    if token:
    CaseDemo.token = token
    print(CaseDemo.token)

    # userinfo接口的测试用例
    @file_data('./data/userinfo.yaml')
    def test_2(self,path,headers):
    url = self.url + path
    headers['token'] = CaseDemo.token
    res = self.ak.do_get(url=url,headers=headers)
    print(res.text)
    # 获取userid,userid
    userid = self.ak.get_text(res.text,'userid')
    openid = self.ak.get_text(res.text, 'openid')
    if userid:
    CaseDemo.userid = userid
    if openid:
    CaseDemo.openid = openid

    @file_data('./data/addcart.yaml')
    # addcart 添加商品到购物车,基于token,userid,openid
    def test_3(self,path,headers,data):
    url = self.url + path
    headers['token'] = CaseDemo.token
    data['userid'] = CaseDemo.userid
    data['openid'] = CaseDemo.openid
    res = self.ak.do_post(url=url, headers=headers,json=data)
    print(res.text)
    # 获取cartid
    cartid = self.ak.get_text(res.text, 'cartid')
    if cartid:
    CaseDemo.cartid = cartid
       
        @file_data('./data/createorder.yaml')
    # createorder 购物车下单
    def test_4(self,path,headers,data):
    url = self.url + path
    headers['token'] = CaseDemo.token
    data['userid'] = CaseDemo.userid
    data['openid'] = CaseDemo.openid
    data['cartid'] = CaseDemo.cartid
    res = self.ak.do_post(url=url, headers=headers, json=data)
    print(res.text)
    if __name__ == '__mian__':
    unittest.main()
    运行结果:
    • 在这个实例中,关于类的内部变量的使用,需要先定义以及初始化操作
    • 在操作的过程中,发现接口之间的关联的数据的保存操作重复,每次都需要手动大量赋值

    优化:基于已有的数据变量格式抽象出赋值函数
      def assignment(self,kwargs):
      for key,value in kwargs.items():
      # 基于数据内容的格式来进行判断改用哪种操作
      if type(value) is dict:
      self.assignment(value)
      else:
      if value:
      pass
      else:
      kwargs[key] = getattr(self,key)
      return kwargs
      简化后的代码调用如下:
        @file_data('./data/createorder.yaml')
        # createorder 购物车下单
        def test_4(self,path,**kwargs):
        url = self.url + path
        value = self.assignment(kwargs)
        res = self.ak.do_post(url=url, headers=value['headers'], json=value['data'])
        print(res.text)

        二、总结
        • 接口的框架无非是
          • 让unittest专注于接口逻辑层
          • 让数据的准备和维护更加方便
          • 剩下的就是复制粘贴改数据
        • 以及,在使用的过程中加深对python基础的概念的理解

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

        评论