接口自动化测试工具seldom分享
在编写接口用例的过程中,针对一个接口,往往只是参数不同,那么参数化就非常有必要了。
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推荐的,假如要测试的接口足够简单,设计一个测试方法来处理简单的接口也未尝不可。当然,往往实际项目中的用例并不足够简单。回到代码的方式编写才能足够兼具灵活性和易用性。
入门即高级第七代伊兰特技术解析1万起步,3年免息。超惠的预售政策,让第七代伊兰特赚足了眼球。现在,只差一个购买的理由。入门即高级。10月10日,第七代伊兰特举行线上技术发布会,对新车进行了全方位的技术解密。超越
环比增长34。4,汉10月热销7545辆,强劲实力势不可挡最新产销快报显示,10月份,比亚迪汉热销7545辆,较9月环比增长34。4,其中汉EV10月销量5055辆,较9月环比增长39。5汉DM10月销量2490辆,较9月环比增长25。3
思域Hatchback,名副其实的Dreamcar01hr上场即控场,思域Hatchback的上市在国内掀起一阵燃血激情的挑战旋风。思域Hatchback,即两厢思域。因其创造了纽北最速前驱车的战绩,扬名车坛,更被奉为一代神车,更
网络流行语背后的故事在拼多多买iPhone的人,收到货要说这一句人生总有很多的十字路口,每一个路口都要你去做决定。比如朋友小王,最近就因为一个决定,而经过了一番激烈的思想斗争。这个决定说起来也没那么大双十一买手机,要不要去拼多多?原本她买衣服去
咕咚F4智能手表,可以24小时实时监测体温,只要299元有健身习惯的朋友,手机里肯定有咕咚APP。作为一款老牌生活实用类手机运动软件,它可以随时随地记录我们的运动数据并且有专业的数据分析,通过游戏化社交化和碎片化的方式,来鼓励人们形成良
爱立信打破华为5G毫米波速率纪录来自最新外媒消息,位于斯德哥尔摩Kista的爱立信工程团队实现了5G毫米波(mmWave)下4。3Gbps的下载速度,比华为2019年10月达到的3。67Gbps的速度更快,并且接
中国各阶层收入及人数占比数据国家统计局发布中国统计年鉴2019披露中国各阶层收入及人数占比数据详细阶层人均收入如下极低收入层月收入在1000元以下,有5。6亿人低收入层月收入在10002000之间,有3。1亿
第七代伊兰特上市终身免费保养再现锋芒买车容易养车难,北京现代伊兰特将打破这一魔咒。10月25日,第七代伊兰特正式上市,新车提供240TGDi和1。5L两种动力,共计六款车型,售价9。98万14。18万元。与此同时,北
泡一泡,简单又省心,健康每一天不知道什么时候开始的,现在大家都流行在朋友圈晒自己一天的步数,为了不落后他人,只要时间允许每天晚饭过后都会带着手机跑步。基本上每天都是1万起步,这可累坏了我的双脚了,虽说鄙人的脚型
ColorOS7全新设计引一众好评,新设计亮点你需要知道昨天,OPPO在北京正式发布ColorOS7,众人期待已久的轻快无边界来袭。在新版本中,其上新的闪回键和图标自定义功能引来众多路人好评。各大媒体号也纷纷在发布会后给出多角度功能实测
全电集结东风Honda跑出电动化加速度传统车企如何电动化转型?东风Honda提供了新的市场样本。今年上海车展期间,东风Honda以全领域电动化车型全电集结,彰显出品牌拥抱电动化的态度与定力。由纯电MNV插混车型CRV锐