使用seldom编写http接口用例

在编写接口用例的过程中,针对一个接口,往往只是参数不同,那么参数化就非常有必要了。

seldom 中参数化的用法非常灵活,这里仅介绍@file_data() 的N种玩法。

二维列表

当参数比较简单时可以试试下面的方式。

  • 参数化数据
{"add_guest":  [["参数错误", "", "", 10021, "parameter error"],["查询为空", "tom", "13711001100", 10022, "event id null"],]
}
  • 测试用例
import seldom
from seldom import file_dataclass 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_dataclass 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_dataclass 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_dataclass 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":passif __name__ == "__main__":seldom.main(base_url="http://127.0.0.1:8000", debug=True)

最后的这种写法不是seldom推荐的,假如要测试的接口足够简单,设计一个测试方法来处理简单的接口也未尝不可。当然,往往实际项目中的用例并不足够简单。回到代码的方式编写才能足够个兼具灵活性和易用性。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/131108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考高项-IT部分

信息化体系 信息化技术应用:龙头 信息资源:核心任务 信息网络:应用基础 信息技术和产业:建设基础 信息化人才:成功之本 信息化法规:保障 信息化趋势 产业信息化、产品信息化、社会生活信息化、国民经济信息化 新型基础设施建设 2018年召开的中央经济工作会议,首…

onnx 模型加载部署运行方式

1.通过文件路径的onnx模型加载方式: 在onnxruntime下面的主要函数:session Ort::Session(env, w_modelPath.c_str(), sessionOptions); 这里的文件路径是宽字节的,通过onnx文件路径直接加载模型。 在opencv下使用dnn加载onnx模型的主要函数: std::string model…

北京联通iptv组播配置

多年前折腾过iptv,近期搬家换了个大电视,打算把iptv配置好了,尽管不怎么看,但聊胜于无。 其实很简单,用到了一些工具,记录如下 1. openwrt配置 因为有软路由,所以就借助openwrt了,一…

【qemu逃逸】HITB2017-babyqemu 2019数字经济-qemu

前言 由于本地环境问题,babyqemu 环境都没有起起,这里仅仅做记录,exp 可能不正确。 HITB2017-babyqemu 设备逆向 设备定位啥的就不说了,先看下实例结构体: 其中 dma_state 结构体如下: 这里看字段猜测…

linux入门到地狱

linux—001入门 IT圈必备(前端工作者用的比较少) 老旧电脑跑linux不容易卡 我代码没保存windows闪退,僵停(vs2019卡掉线),重启更新,占用cpu内存服务报错pip各种bug 出来生态环境友好其他的全是bug(bug时间成本超过了windows快捷友好生态) 那就说明wind…

ICP学习记录

1. 流程图 ICP(一)原理详解_icp原理-CSDN博客 ICP算法详解——我见过最清晰的解释-CSDN博客 ICP算法理解-CSDN博客 ICP知识点梳理笔记_icp非凸_KalutSirocco的博客-CSDN博客 【精选】【图像配准】点云配准ICP算法介绍:基础流程、ICP算法…

MyBatis-Plus复习总结(一)

文章目录 一、环境搭键二、基本CRUD2.1 BaseMapper2.2 插入2.3 删除2.4 修改2.5 查询 三、通用Service四、常用注解4.1 雪花算法4.2 注解TableLogic 五、条件构造器和常用接口5.1 Wrapper介绍5.2 QueryWrapper5.3 UpdateWrapper5.4 condition5.5 LambdaQueryWrapper5.6 LambdaU…

live555交叉编译(ubuntu+arm平台)

1.下载源码 wget ​​​​​​http://live555.com/liveMedia/public/live555-latest.tar.gz 2.解压 tar -zxvf live555-latest.tar.gz 3.修改配置文件 1)进入live文件夹 2)复制一份配置文件 cp config.armlinux config.myarmlinux 3) vim config…

Android SpannableString 文字中设置多个片段颜色

文字 恭喜y******x成功解冻红包,200元微信到账成功 恭喜x******9成功解冻红包,200元微信到账成功 恭喜j******4成功解冻红包,200元微信到账成功 恭喜5******n成功解冻红包,200元微信到账成功 恭喜9******s成功解…

Gradle中的依赖Dependencies说明与使用总结

【1】依赖的方式 Gradle 中的依赖分别为直接依赖,项目依赖,本地jar 依赖。 dependencies {//①.依赖当前项目下的某个模块[子工程]implementation project(:subject01)//②.直接依赖本地的某个jar文件implementation files(libs/foo.jar, libs/bar.jar…

spring-session-core排除某些接口不设置session

这里写自定义目录标题 需求实现 需求 今天先写一下如何实现,之后再更新一篇如何发现这个问题的。 我们的项目使用了spring-session-core来存储共享session,存在redis中,然后在cookie中是设置了key为SESSION的session。但是我们有一些开放接口…

Windows PowerShell 和 Linux BashShell 极简对比

声明:本文不会涉及原理,详细的介绍,也不是入门文章。仅仅从使用上进行简单比较 命令 在 bash 中,一个命令是一个单独的进程;而在 PowerShell 中,命令被称为 cmdlets,他们不是独立的可执行程序&…

行业安卓主板-基于RK3568/3288/3588的电子班牌/人脸识别门禁/室内对讲门禁方案解决方案(二)

电子班牌 智能电子班牌可在主页实时显示班级全面的基本信息,包括天气、班名、课程表、值日表等,并发布学校通知、班级通知。学生可刷卡自动登陆系统进行课堂反馈,教师和家长可及时了解教学反馈,打通学校、教师、学生之间的互动通…

Hive 解析 JSON 字符串数据的实现方式

文章目录 通过方法解析现实示例 通过序列化实现示例 通过方法解析现实 在 Hive 中提供了直接解析 JSON 字符串数据的方法 get_json_object(json_txt, path),该方法参数解析如下: json_txt:顾名思义,就是 JSON 字符串;…

elasticsearch索引按日期拆分

1.索引拆分原因 如果单个索引数据量过大会导致搜索变慢,而且不方便清理历史数据。 例如日志数据每天量很大,而且需要定期清理以往日志数据。例如原索引为sc_all_system_log,现按天拆分索引sc_all_system_log20220902,sc_all_syste…

B-DS二叉树_输出所有目标路径

Description 给定二叉树和一个整数目标targetSum,输出所有从根结点到叶子结点的路径总和等于targetSun的路径。 Input 第一行输入t,表示有t个测试样例。 第二行起,每一行首先输入一个整数targetSum,接着输入n,接着输…

AMD老电脑超频及性能提升方案及实施

收拾电子元件的时候找到了若干古董的CPU 其中有一个X3 440 是原来同学主板烧了之后给我的,我从网上配了AM2 昂达主板,然后又买了AMD兼容内存,组成了win7 64位电脑,用起来非常不错,我把硬件配置和升级过程说明下&#x…

ELK极简上手

目录 引言 首先,下载相关的包 其次,安装启动elasticsearch 下一步,安装并启动logstash 最后,安装并启动kibana 进一步的,测试数据的流动 引言 最近整理电脑发现之前的一篇ELK极简入门笔记,现整理发出…

开发小程序需要多少钱?

随着移动互联网的快速发展,小程序已经成为了企业、个人创业者获取用户、提升品牌影响力的重要工具。然而,对于许多初次接触小程序的人来说,开发小程序需要多少钱,是他们最关心的问题。 首先我们需要明确的是,开发小程…

【漏洞复现】Drupal_小于7.32版本 _“Drupalgeddon” SQL注入漏洞(CVE-2014-3704)

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 说明内容漏洞编号CVE-2014-3704漏洞名称Drupal “Drupalgeddon” SQL注入漏洞漏洞…