seldom icon indicating copy to clipboard operation
seldom copied to clipboard

http接口参数化感觉麻烦

Open FanOfCat opened this issue 3 years ago • 2 comments

参数化的装饰器,@file_data,感觉目前获取参数太麻烦了,因为还要获取后组装,而且接口测试中 参数传空,不传的情况就不能测试了,能不能再搞个装饰器获取到2个字段 ,一个 预期结果,一个dict(我看requests源代码中那个post等方法 都能接受: param data: (optional) Dictionary, list of tuples, bytes, or file-like object to send in the body of the :class:Request.) 我不确定这样搞是否正确,请指教

FanOfCat avatar Feb 16 '22 07:02 FanOfCat

你可以这样用:

  • data.json
{
  "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"
      }
    }
  ]
}
  • seldom
import seldom
from seldom import file_data


class AddGuestTest(seldom.TestCase):

    @file_data("data.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"])

注意:通过 reqresp 来分别取请求参数和响应参数。

或者

干脆用json 写用例

  • case.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"
      }
    }
  ]
}
  • seldom
import seldom
from seldom import file_data


class SampleCaseTest(seldom.TestCase):

    @file_data("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

如果,应然不满足你的需求,请给出你想要达到的例子。

defnngj avatar Feb 17 '22 15:02 defnngj

感谢提供思路!!!

FanOfCat avatar Feb 18 '22 05:02 FanOfCat