使用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推薦的,假如要測試的接口足夠簡單,設計一個測試方法來處理簡單的接口也未嘗不可。當然,往往實際項目中的用例並不足夠簡單。回到代碼的方式編寫才能足夠個兼具靈活性和易用性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM