• 0
  • 0
分享
  • 使用seldom编写http接口用例——软件测试圈
  • 恬恬圈 2022-07-15 16:44:05 字数 3798 阅读 1728 收藏 0

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

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


作者:虫师

原文链接:https://www.cnblogs.com/fnng/p/15906956.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   没有任何征兆,华为Mate 60 Pro突然横空出世。虽然麒麟9000S、5G依然没有得到完全证实,但来自供应链的说法称,Mate 60 Pro是迄今为止国产化率最高的手机,超过了90%。  所以,Mate 60 Pro性能有多好是次要的,关键是我们完全有能力掌握一款高端智能手机的全链路。  据财联社统计,Mate 60 Pro的供应链企业已知有至少46家来自中国。可以说,Mate 60 Pro已经不只是华为的Mate 60 Pro。  结构件:  东睦股份、福蓉科技、捷荣技术、兆威机电、金龙机电、长盈精密、电连技术、安利股份、苏大维格、蓝思科技  显示模组:  联创光电、合力泰、长信科技...
            0 0 1320
            分享
          •   最近看到一个特有意思的话题,叫《世界第一个精神变态人工智能诞生》,我一下子就被吸引住了。但是,随着读文章的深入,我却陷入了对过往一幕幕的沉思中,感叹、唏嘘不已。趁着这个机会,我来给大家说说这十几年测试生涯中记忆犹新的一件事情。  先来大致讲下《世界第一个精神变态人工智能诞生》说的什么事吧。事情的起因是尼采的一句名言"当你凝视深渊的时候,深渊也在凝视着你",意思就是当你在足够近的距离审视着罪恶的时候,这股罪恶往往会形成反噬之力,把你拽入到深渊之中,你也会变得罪恶起来。然后在今年四月份,麻省理工学院媒体实验室有一个三人团队鼓捣出了一个被罪恶反噬的人工智能--诺曼(Norma...
            3 2 3432
            分享
          •   当你学会了如何设计测试用例之后,接下来便是开始用例的编写。  在设计阶段,更准确的说应该是识别测试点的过程,而编写阶段则是将测试点细化成一条条测试用例的过程,有了比较全的用例场景后,如何让别人更舒服、更方便、更清晰地去使用你的测试用例,如何更优雅地展示你的测试用例,如何让领导对你的测试用例满意呢?(“降本增效”,这里的“效”有时也指的是“效果”)  测试用例的编写是每一个测试工程师安身立命的家伙,也是测试的基础,更是软件测试的核心内容,正所谓“基础不牢,地动山摇”,所以一定要掌握好,有些转行的小伙伴一上来就开始自动化、性能的学习,却忽略了最基础的东西,这是不对的。  正好最近有小伙伴问到关...
            1 1 615
            分享
          •   亚利桑那州立大学(ASU)和 OpenAI 宣布建立合作伙伴关系,将 ChatGPT 带入亚利桑那州立大学的课堂。亚利桑那州立大学在一份新闻稿中表示,该校希望将 ChatGPT Enterprise 的使用集中在"三个关键领域",如"提高学生的成功率、开辟创新研究的新途径以及简化组织流程"。  ASU 副首席信息官凯尔-鲍文(Kyle Bowen)表示:"我们的教职员工已经在使用 ChatGPT,在 ChatGPT Enterprise 推出后,我们解决了很多安全问题,我们认为与 OpenAI 建立联系是有意义的。"他补充说,AS...
            0 0 670
            分享
          • 前言:本文主要针对http接口进行测试,使用Jmeter工具实现。Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对Http接口的测试。一、开发接口测试案例的整体方案:第一步:我们要分析出测试需求,并拿到开发提供的接口说明文档;第二步:从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点。第三步:和开发一起对接口测试案例进行评审。第四步:结合开发库,准备接口测试案例中的入参数据和出参数据,并整理成csv格式的文件。第五步:结合接口测试案例文档和csv格式的数据文档,做接口测试案例...
            14 15 2175
            分享
      • 51testing软件测试圈微信