为 REST-ful API 编写单元测试 [关闭]

2023-12-29

我正计划为 RESTful API 编写单元测试,我想知道我应该采取的方法。

我最关心的方面与数据库状态有关。我的理解是,每次测试的测试目标的环境或初始状态应该相同,这意味着每次测试的数据库也应该相同。当我有一个庞大的数据库时,如何实现这一目标?另外,如何处理数据库架构中的任何更改?


问题是你想测试什么。您认为最顶层 api 层(即接收 HTTP 请求的层)会出现什么问题?

一般来说,编写单元测试 Restful-api 听起来有点矛盾;)根据定义,单元测试比使用入口点 HTTP 到数据库要小得多。听起来您的问题更多是基于如何编写大型测试(或验收、端到端测试)。

请注意,实施此类大型测试(端到端测试)需要付出很大的努力:

  • 测试往往要慢得多
  • 测试的维护成本,因为测试很难理解(因为所有这些依赖性+测试数据设置)
  • 它们更容易导致假阳性测试(测试显示“红色”,尽管它应该是“绿色”)。再次原因是测试中涉及更多依赖项,脆弱性更有可能。

根据我的经验,测试粒度的多样性是王道,因此我混合/组合方法:

  • api 内部的单元测试(例如,几个更复杂的映射要求、身份验证、棘手的验证规则、复杂的 if/else 逻辑,...)
  • doing 冒烟测试 http://en.wikipedia.org/wiki/Smoke_testing在更粗粒度的级别上,HTTP 客户端正在与 api 通信,即测试集成。这些测试将向我展示:服务器可以启动,主要 api 用例可以工作。作为我推荐的工具soap-ui http://www.soapui.org/.
  • 关于数据库状态:我经常从最基本的数据开始(例如现有的 api 用户或预定义的不可变测试数据)。每个测试的测试数据应该是隔离的。如果我的测试包含更复杂的流程(例如,整个用例分布在多个 HTTP 调用中),则允许测试数据依赖于测试步骤(即 call-2 可能依赖于通过 call- 更改的服务器状态) 1)

也许您可以针对要测试的特定用例提供更多输入,以便提供更多帮助?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 REST-ful API 编写单元测试 [关闭] 的相关文章

  • 如何在 PHP 中去除字符串中的所有空格? [复制]

    这个问题在这里已经有答案了 我怎么能够strip remove all spaces of a string in PHP 我有一个string like string this is my string 输出应该是 thisismystr
  • 无法使用 javascript 建立与安全 Websocket 服务器的连接

    我的开发环境是这样的 操作系统 微软Windows 10 PHP 框架 Laravel 8 0 PHP 版本 7 4 Websocket 服务器 cboden ratchet 0 4 3 WAMP 服务器 3 2 0 Apache 2 4
  • 如何在 jQuery.knob 中添加值后缀

    我有问题jQuery knob http anthonyterrien com knob 我需要添加一个Sufixx至旋钮中的值 例如 我需要一个后缀 数值后 我只是输入数值字段 它会显示 但此时旋钮不会显示状态 它不会显示旋钮状态 但后缀
  • 将视图加载到变量中

    有什么方法可以将 PHP 文件的内容放入变量中吗 我想做这个 msg this gt load gt view some view 但当我这样做时 msg is NULL 是否可以 有可能的 msg this gt load gt view
  • 如何通过传递国家代码或国家名称在php中获取时区

    我使用一些 api 有国家代码和国家名称 有什么方法可以在 php ini 中获取给定国家代码和国家名称的时区 我有这样的数据 address Object city continent Asia continent code AS cou
  • 类外函数

    我只是想告诉你 我是 OOP 的新手 这对我来说相当困难 但这是我的代码 class functions function safe query string string mysql escape string htmlspecialch
  • 在 PHP 中读取“分块”POST 数据

    我试图在发送时使用 Transfer Encoding chunked 从请求中读取 POST 数据 但在收到所有数据之前无法启动脚本 是否可以让 PHP能够在分块请求通过时对其做出反应吗 将 PHP 5 3 8 与 Apache 结合使用
  • Netbeans (PHP) 中的变量类型提示

    只是好奇 Netbeans 中是否有一种方法可以为常规变量提供类型提示 以便智能感知能够识别它 我知道你可以对类属性 函数参数 返回类型等执行此操作 但我不知道如何对常规变量执行此操作 当您有一个可以返回不同对象类型 如服务定位器 的方法时
  • 如何在不支持“PrivateObject”的.Net Core应用程序中对私有方法进行单元测试

    我的应用程序是一个 NET Core应用 我有一个public如下所示的方法 它有两个私有方法 public bool CallService JObject requestJsonObj out Status status bool pr
  • 如何对转换库进行单元测试?

    我刚刚开始使用 C 进行单元测试 我已经阅读有关单元测试的内容很长时间了 并且已经开始使用 NUnit 但这是我第一次真正尝试为真实代码编写真正的测试 但我的问题是 我很难想出可以实际测试的东西 我要测试的项目是一个转换库 将 POCO 列
  • Symfony - 自定义验证器和依赖注入

    我正在尝试对自定义验证器使用依赖项注入 以便能够使用实体管理器 我遵循 Symfony 示例 依赖注入 http symfony com doc current cookbook validation custom constraint h
  • PDO 多查询“SQLSTATE[HY000]:一般错误”

    我仍在学习 PDO 所以我可能会错过一些东西 但基本上我正在尝试将一行插入表中 然后选择生成的 id 我不确定它是否喜欢一个 pdo 语句中的两个查询 这是我用来执行 SQL 的代码 public function ExecuteQuery
  • 让 PHP 脚本永远循环执行队列系统中的计算作业

    目前 我有一个永远在我的服务器上运行的 perl 脚本 检查 SQS 是否有要计算的数据 该脚本已经运行了大约 6 个月 没有出现任何问题 所以 现在我想切换到 PHP 的 CLI 并让脚本永远循环在那里 主要是因为我对PHP比较熟悉 Ba
  • PHP fscanf 与 fgets

    我可以使用读取一行中的整个字符串fgets but fscanf 没有这样做 根据PHP手册 fscanf 根据格式解析文件的输入 功能fscanf 类似于sscanf 但它从与句柄关联的文件中获取输入 并根据指定的格式解释输入 这在文档中
  • 交响乐 2 |修改具有文件(图片)字段的对象时出现表单异常

    我正在使用 Symfony2 我有一个实体Post有标题和图片字段 我的问题 当我创建帖子时一切都很好 我有我的图片等 但是当我想修改它时 我遇到了 图片 字段的问题 它是一个上传的文件 Symfony 想要一个文件类型并且它有一个字符串
  • 更新 xampp 中的 ICU 扩展吗?

    我在跑xampp我需要升级ICU php intl 扩展 到最新版本 我下载了54从 ICU 页面 但不确定如何升级它 有一个bin include and lib文件夹 我应该把这些文件放在哪里 我还需要做其他事情吗 要升级 XAMP 安
  • Outlook Rest 调用表单 angularjs

    使用 Outlook 我正在尝试创建事件 当我使用 POSTMAN 发送请求时 它工作正常 但 Angularjs 中的相同代码却不起作用 代码有什么问题 请帮忙 scope createEvents function var url ht
  • Android RxJava 2 JUnit 测试 - android.os.Looper 中的 getMainLooper 未模拟 RuntimeException

    我在尝试为正在使用的演示者运行 JUnit 测试时遇到 RuntimeExceptionobserveOn AndroidSchedulers mainThread 由于它们是纯 JUnit 测试而不是 Android 仪器测试 因此它们无
  • Symfony2 / FOSUserBundle - 登录后根据角色重定向

    我想根据用户的角色自定义登录后的重定向 仅供参考 我用symfony 2 8 我创建这个类
  • 在 React 中使用 setTimeout() 并测试它

    我意识到我一直在使用setTimeout 在我的项目中 也许 比我应该做的更多 我进行了快速研究并浏览了 Github 上的一些开源 React 项目 并决定我应该询问一下 I use setTimeout主要是为了更改类名或添加样式以对

随机推荐

  • 我们可以在Python中使用C代码吗?

    我知道Python提供了一个API 所以你可以在C代码中调用Python解释器 但我想要的是相反的 我的程序需要使用一些C API 所以代码必须用C编写 但我也想用Python打包程序 这意味着我想在 Python 中调用那些 C 函数或可
  • NuGet“无法为我的项目生成绑定重定向”,并出现错误“对象引用未设置到对象的实例”。

    在 SquishIt 和 DotNetOpenAuth 等几个不同的软件包上 我收到一条错误消息 无法为 MyProject 生成绑定重定向 你调用的对象是空的 我看过很多关于其他人遇到 绑定重定向 问题的帖子 但没有找到对此问题的单个引用
  • 不是选择器,on()点击事件

    我在执行以下代码时遇到一些问题 var i 1 hello not selected on click function this addClass selected console log i 问题是这段代码应该在添加所选类后只触发一次
  • jquery的问题?

    我有这个 jquery 问题已经好几天了 我对此很陌生 所以请原谅我在这个问题上的愚蠢 谢谢 html代码 ul class statuses li class message this is meant to increase every
  • onmouseover 在单击和鼠标移出事件之前触发?

    onmouseover 无法使用的链接 https stackoverflow com q 9930818 1048572当我尝试回答时 遇到了一个有趣的问题 经过一些记录实验后 我已经设置了http jsfiddle net RnGxP
  • boost::serialization:是否可以避免模板函数?

    我有一个来自外部库的结构 我为其编写了一些非侵入式序列化方法 还有这个结构的包装器 我试图保留从外部结构到这个包装器的所有依赖关系 问题是 所有序列化方法都是模板 因此它们是在头文件中定义的 并将依赖关系从外部库传播到每个序列化包装器的人
  • 如何调整Emacs的compile-goto-error从编译缓冲区获取的路径?

    我使用 Emacs 23 并遇到以下问题 我从 Emacs 中运行我们项目的构建系统 例如 M xcompile gt cd foo bar build 构建系统现在做了一些魔法 cd 到构建过程的某个子目录中 然后 gcc 抛出一个错误
  • Sass 编译器无法在 Sublime Text 3 中工作

    我在 Windows 7 机器上安装了 Sass 并且正在尝试编译一些 scss 每次 我都会得到以下输出 sass is not recognized as an internal or external command operable
  • 在 Parcel 构建期间在 HTML 文件中调用时,JavaScript 函数不会触发

    我有一个链接到 JavaScript 文件的基本 HTML 表单页面 这两个文件都存在于 Node 项目中 我使用 Parcel 作为捆绑器 因为我最终想将其转换为 TypeScript 当我在浏览器中运行html文件时 JavaScrip
  • 使用类从 ASP.NET 中的数据库填充下拉列表的方法是什么?

    我正在尝试使用如下所示的类从 sql server 填充下拉列表 当将数据绑定到下拉列表时 代码会崩溃 它在向下拉列表提供 dataValueField 和 datatTextField 时出错 HTML a aspx
  • 何时使用记录结构而不是结构,反之亦然?

    我最近发现关于recordC 中的关键字 发现它可以用作record struct如果我理解正确的话 以某种方式使其成为值类型而不是引用类型 但是 我很难理解何时确切使用record struct而不仅仅是struct 据我所见 recor
  • 如何给一个按钮设置多个标签?

    我有 16 个按钮 我对它们进行标记以将一些术语集与按钮配对并从 sqlite 数据库导入 所以 我这样标记它们 labelForButton and tagForButton class MyStruct public MyStruct
  • CodeIgniter 连接两个表

    我正在尝试使用 CodeIgniter 将两个表连接在一起 我使用 CodeIgniter 用户指南寻求帮助 我遇到了一些问题 仅显示一个表的数据 但我不知道为什么 有人可以帮我吗 这是我的代码 控制器 function getall th
  • Flutter:如何永久注册传感器(并且永远不会取消注册?)

    TL DR 如何让 Android 传感器永久运行 活动 注册我的应用程序 即使我关闭它 客观的 我正在制作一个 Flutter 应用程序 使用以下方法来计算您的步数计步器 https pub dev packages pedometer包
  • AWS EC2 Autoscaling:定义一个永不终止的主实例

    我使用具有自动缩放和负载平衡功能的 EC2 来托管我的 Web 应用程序 为了保证EC2实例之间的一致性 我只想允许从一个实例访问管理界面 因此所有写操作都在该实例上执行 然后其他实例定期下载已更改文件的副本 所以这是我的问题 我可以在我的
  • 如果参数等于这个字符串,定义一个像这个字符串的变量

    我正在做一些 bash 脚本 现在我得到了一个变量调用source和一个名为samples 像这样 source country samples US Canada Mexico 因为我想扩大源的数量 并且每个源都有自己的样本 所以我尝试添
  • 在 PHP 中使用 google image API 获取图像搜索结果的第一个 URL

    你知道一个 php 脚本 一个类就很好 可以获取 google api 图像搜索的第一个图像结果的 url 吗 谢谢 Example 正如 Sarfraz 所说 我找到了一种使用简单 HTML DOM 从 Google Image 结果中获
  • X11:通过命令行移动现有窗口?

    给定一个 X 客户端窗口 ID 有没有办法从命令行移动该窗口或更改其几何形状 xlsclients a Window 0x3000001 Machine ohm Name Terminal Icon Name foo Command foo
  • 将 DataGridView 值复制到 TextBox

    我试图得到这个问题的答案 但到目前为止没有任何帮助能够做到我想要的 我有这段代码 它的目的是查看所选行并将其列输出到相应的文本框中 private void DataGridView01 SelectionChanged object se
  • 为 REST-ful API 编写单元测试 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正计划为 RESTful API 编写单元测试 我想知道我应该采取的方法 我最关心的方面与数据库状态有关 我的理解是 每次测试的测试目标的