• 使用seldom编写http接口用例


    在编写接口用例的过程中,针对一个接口,往往只是参数不同,那么参数化就非常有必要了。

    seldom 中参数化的用法非常灵活,这里仅介绍@file_data() 的N种玩法。

    二维列表

    当参数比较简单时可以试试下面的方式。

    • 参数化数据
    {
     "add_guest":  [
       ["参数错误", "", "", 10021, "parameter error"],
       ["查询为空", "tom", "13711001100", 10022, "event id null"],
     ]
    }
    
    • 测试用例
    import seldom
    from seldom import file_data
    
    
    class AddGuestTest(seldom.TestCase):
    
        @file_data("add_guest.json", key="add_guest")
        def test_case(self, _, real_name, phone, status, msg):
            payload = {"realname": real_name, "phone": phone}
            self.post("/api/add_guest/", data=payload)
            self.assertStatusCode(200)
            self.assertPath("status", status)
            self.assertPath("message", msg)
    
    
    if __name__ == "__main__":
        seldom.main(base_url="http://127.0.0.1:8000", debug=True)
    

    列表嵌套字典

    当参数很多时,不便于阅读,可以通过字典的方式定义。

    • 参数化数据
    {
      "add_guest": [
        {
          "name": "参数错误",
          "real_name": "",
          "phone": "",
          "status": 10021,
          "msg": "parameter error"
        },
        {
          "name": "查询为空",
          "real_name": "tom",
          "phone": "13711001100",
          "status": 10022,
          "msg": "event id null"
        },
      ]
    }
    
    • 测试用例
    import seldom
    from seldom import file_data
    
    
    class AddGuestTest(seldom.TestCase):
    
        @file_data("add_guest.json", key="add_guest")
        def test_case(self, _, real_name, phone, status, msg):
            payload = {"realname": real_name, "phone": phone}
            self.post("/api/add_guest/", data=payload)
            self.assertStatusCode(200)
            self.assertPath("status", status)
            self.assertPath("message", msg)
    
    
    if __name__ == "__main__":
        seldom.main(base_url="http://127.0.0.1:8000", debug=True)
    

    复杂的数据结构

    我们可以将接口的入参、出参进一步拆分。

    • 参数化数据
    {
      "add_guest": [
        {
          "name": "参数错误",
          "req": {
            "real_name": "",
            "phone": ""
          },
          "resp": {
             "status": 10021,
              "msg": "parameter error"
          }
        },
        {
          "name": "查询为空",
          "req": {
            "real_name": "tom",
            "phone": "13711001100"
          },
          "resp": {
            "status": 10022,
            "msg": "event id null"
          }
        }
      ]
    }
    
    • 测试用例
    import seldom
    from seldom import file_data
    
    
    class AddGuestTest(seldom.TestCase):
    
        @file_data("add_guest.json", key="add_guest")
        def test_case(self, _, req, resp):
            payload = {"realname": req["real_name"], "phone": req["phone"]}
            self.post("/api/add_guest/", data=payload)
            self.assertStatusCode(200)
            self.assertPath("status", resp["status"])
            self.assertPath("message", resp["msg"])
    
    
    if __name__ == "__main__":
        seldom.main(base_url="http://127.0.0.1:8000", debug=True)
    

    通过json编写用例

    虽然不推荐用文件写用例,你想写也是可以的。

    • 测试用例文件
    {
      "cases": [
        {
          "name": "参数错误",
          "method": "post",
          "url": "/api/add_guest/",
          "req": {
            "eid": "",
            "real_name": "",
            "phone": ""
          },
          "resp": {
             "status": 10021,
              "msg": "parameter error"
          }
        },
        {
          "name": "查询为空",
          "method": "post",
          "url": "/api/add_guest/",
          "req": {
            "eid": 901,
            "real_name": "tom",
            "phone": "13711001100"
          },
          "resp": {
            "status": 10022,
            "msg": "event id null"
          }
        }
      ]
    }
    
    • 解析测试用例
    
    import seldom
    from seldom import file_data
    
    
    class SampleCaseTest(seldom.TestCase):
    
        @file_data("test_case.json", key="cases")
        def test_case(self, _, method, url, req, resp):
            if method == "post":
                payload = {"eid": req["eid"], "realname": req["real_name"], "phone": req["phone"]}
                self.post(url, data=payload)
                self.assertStatusCode(200)
                self.assertPath("status", resp["status"])
                self.assertPath("message", resp["msg"])
            elif method == "get":
                pass
    
    
    if __name__ == "__main__":
        seldom.main(base_url="http://127.0.0.1:8000", debug=True)
    
    

    最后的这种写法不是seldom推荐的,假如要测试的接口足够简单,设计一个测试方法来处理简单的接口也未尝不可。当然,往往实际项目中的用例并不足够简单。回到代码的方式编写才能足够个兼具灵活性和易用性。

  • 相关阅读:
    git或gitee 提交代码到远程仓库
    gitee 创建代码仓库,并提交本地代码
    Logback 实现日志链路追踪
    navicat 查看,设计并导出数据库 ER图
    Jackson 使用 @JsonFormat 注解进行时间格式化
    Redis 缓存常见问题
    jedis 与 redission 实现分布式锁
    Redis 集群模式搭建
    Redis 哨兵模式高可用
    Notepad++ 正则表达式提取信息
  • 原文地址:https://www.cnblogs.com/fnng/p/15906956.html
Copyright © 2020-2023  润新知