在编写接口用例的过程中,针对一个接口,往往只是参数不同,那么参数化就非常有必要了。 seldom中参数化的用法非常灵活,这里仅介绍filedata()的N种玩法。二维列表 当参数比较简单时可以试试下面的方式。参数化数据{addguest:〔〔参数错误,,,10021,parametererror〕,〔查询为空,tom,13711001100,10022,eventidnull〕,〕}测试用例importseldomfromseldomimportfiledataclassAddGuestTest(seldom。TestCase):filedata(addguest。json,keyaddguest)deftestcase(self,,realname,phone,status,msg):payload{realname:realname,phone:phone}self。post(apiaddguest,datapayload)self。assertStatusCode(200)self。assertPath(status,status)self。assertPath(message,msg)ifnamemain:seldom。main(baseurlhttp:127。0。0。1:8000,debugTrue)列表嵌套字典 当参数很多时,不便于阅读,可以通过字典的方式定义。参数化数据{addguest:〔{name:参数错误,realname:,phone:,status:10021,msg:parametererror},{name:查询为空,realname:tom,phone:13711001100,status:10022,msg:eventidnull},〕}测试用例importseldomfromseldomimportfiledataclassAddGuestTest(seldom。TestCase):filedata(addguest。json,keyaddguest)deftestcase(self,,realname,phone,status,msg):payload{realname:realname,phone:phone}self。post(apiaddguest,datapayload)self。assertStatusCode(200)self。assertPath(status,status)self。assertPath(message,msg)ifnamemain:seldom。main(baseurlhttp:127。0。0。1:8000,debugTrue)复杂的数据结构 我们可以将接口的入参、出参进一步拆分。参数化数据{addguest:〔{name:参数错误,req:{realname:,phone:},resp:{status:10021,msg:parametererror}},{name:查询为空,req:{realname:tom,phone:13711001100},resp:{status:10022,msg:eventidnull}}〕}测试用例importseldomfromseldomimportfiledataclassAddGuestTest(seldom。TestCase):filedata(addguest。json,keyaddguest)deftestcase(self,,req,resp):payload{realname:req〔realname〕,phone:req〔phone〕}self。post(apiaddguest,datapayload)self。assertStatusCode(200)self。assertPath(status,resp〔status〕)self。assertPath(message,resp〔msg〕)ifnamemain:seldom。main(baseurlhttp:127。0。0。1:8000,debugTrue)通过json编写用例 虽然不推荐用文件写用例,你想写也是可以的。测试用例文件{cases:〔{name:参数错误,method:post,url:apiaddguest,req:{eid:,realname:,phone:},resp:{status:10021,msg:parametererror}},{name:查询为空,method:post,url:apiaddguest,req:{eid:901,realname:tom,phone:13711001100},resp:{status:10022,msg:eventidnull}}〕}解析测试用例importseldomfromseldomimportfiledataclassSampleCaseTest(seldom。TestCase):filedata(testcase。json,keycases)deftestcase(self,,method,url,req,resp):ifmethodpost:payload{eid:req〔eid〕,realname:req〔realname〕,phone:req〔phone〕}self。post(url,datapayload)self。assertStatusCode(200)self。assertPath(status,resp〔status〕)self。assertPath(message,resp〔msg〕)elifmethodget:passifnamemain:seldom。main(baseurlhttp:127。0。0。1:8000,debugTrue) 最后的这种写法不是seldom推荐的,假如要测试的接口足够简单,设计一个测试方法来处理简单的接口也未尝不可。当然,往往实际项目中的用例并不足够简单。回到代码的方式编写才能足够兼具灵活性和易用性。