• 使用seldom编写http接口用例


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

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

    二维列表

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

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

    列表嵌套字典

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

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

    复杂的数据结构

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

    • 参数化数据
    1. {
    2. "add_guest": [
    3. {
    4. "name": "参数错误",
    5. "req": {
    6. "real_name": "",
    7. "phone": ""
    8. },
    9. "resp": {
    10. "status": 10021,
    11. "msg": "parameter error"
    12. }
    13. },
    14. {
    15. "name": "查询为空",
    16. "req": {
    17. "real_name": "tom",
    18. "phone": "13711001100"
    19. },
    20. "resp": {
    21. "status": 10022,
    22. "msg": "event id null"
    23. }
    24. }
    25. ]
    26. }
    • 测试用例
    1. import seldom
    2. from seldom import file_data
    3. class AddGuestTest(seldom.TestCase):
    4. @file_data("add_guest.json", key="add_guest")
    5. def test_case(self, _, req, resp):
    6. payload = {"realname": req["real_name"], "phone": req["phone"]}
    7. self.post("/api/add_guest/", data=payload)
    8. self.assertStatusCode(200)
    9. self.assertPath("status", resp["status"])
    10. self.assertPath("message", resp["msg"])
    11. if __name__ == "__main__":
    12. seldom.main(base_url="http://127.0.0.1:8000", debug=True)

    通过json编写用例

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

    • 测试用例文件
    1. {
    2. "cases": [
    3. {
    4. "name": "参数错误",
    5. "method": "post",
    6. "url": "/api/add_guest/",
    7. "req": {
    8. "eid": "",
    9. "real_name": "",
    10. "phone": ""
    11. },
    12. "resp": {
    13. "status": 10021,
    14. "msg": "parameter error"
    15. }
    16. },
    17. {
    18. "name": "查询为空",
    19. "method": "post",
    20. "url": "/api/add_guest/",
    21. "req": {
    22. "eid": 901,
    23. "real_name": "tom",
    24. "phone": "13711001100"
    25. },
    26. "resp": {
    27. "status": 10022,
    28. "msg": "event id null"
    29. }
    30. }
    31. ]
    32. }
    • 解析测试用例
    1. import seldom
    2. from seldom import file_data
    3. class SampleCaseTest(seldom.TestCase):
    4. @file_data("test_case.json", key="cases")
    5. def test_case(self, _, method, url, req, resp):
    6. if method == "post":
    7. payload = {"eid": req["eid"], "realname": req["real_name"], "phone": req["phone"]}
    8. self.post(url, data=payload)
    9. self.assertStatusCode(200)
    10. self.assertPath("status", resp["status"])
    11. self.assertPath("message", resp["msg"])
    12. elif method == "get":
    13. pass
    14. if __name__ == "__main__":
    15. seldom.main(base_url="http://127.0.0.1:8000", debug=True)

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

    最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

    这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

  • 相关阅读:
    JVMの内存泄漏&内存溢出案例分析
    Git的使用教程
    数控车床中滚珠螺母的维护保养方法
    嵌入式串口转CAN模块详细参数分析
    Java 多线程:并发编程的三大特性
    Vite-Wechat网页聊天室|vite5.x+vue3+pinia+element-plus仿微信客户端
    使用双动态令牌混合器学习全局和局部动态以进行视觉识别
    运维-技能大杂烩
    VB 语言介绍以及VBA、宏(Macro)的关系
    xss渗透(跨站脚本攻击)
  • 原文地址:https://blog.csdn.net/2301_78843735/article/details/134222757