seldom
seldom copied to clipboard
http接口参数化感觉麻烦
参数化的装饰器,@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.) 我不确定这样搞是否正确,请指教
你可以这样用:
- 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"])
注意:通过 req 和 resp 来分别取请求参数和响应参数。
或者
干脆用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
如果,应然不满足你的需求,请给出你想要达到的例子。
感谢提供思路!!!