首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何断言API响应具有特定的结构?

如何断言API响应具有特定的结构?
EN

Stack Overflow用户
提问于 2021-01-19 11:06:38
回答 2查看 671关注 0票数 0

我已经设置了一个SpecFlow测试定义,在这里我要断言响应中有一个特定的字段集合。例如,我有一个来自API的特定预期响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    isActive: false,
    lastProcessed: "2020-11-03T19:03:16.537"

}

我要验证的是,响应包含这两个字段,而不一定包含这些字段的值。我尝试了以下方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Assert.NotNull(response.Model.isActive);
Assert.NotNull(response.Model.lastProcessed);

但我使用以下方法时出错了:Do not use Assert.NotNull() on value type 'bool'

否则,除了使用"NotNull()“之外,如何确保响应结构与预期的一样?

:在接受的答案之后,我将从API调用返回的模型序列化为JSON,并将其解析为JObject。然后,我使用ContainsKey()方法来断言它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JObject jObject = JObject.Parse(JsonConvert.SerializeObject(response.Model));
Assert.True(jObject.ContainsKey("isActive"));
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-19 11:36:12

我不知道用于发送请求和反序列化的包是什么,但是如果可以将响应内容作为原始的json字符串,那么可以使用Newtonsoft.JSON将响应解析为带有JObject.Parse(responseContent)JObjectJObject有一个名为ContainsKey(propertyName)的方法,它确定对象中是否存在指定名称的字段。如果对所需的属性名返回true,则可以断言。

编辑

关于格雷格下面的答案。实际上,最初的错误是由bool不是可空类型引起的,使其在模型中为空将修复错误。然而,这一解决方案并不理想。在某些情况下,null可以是API返回的有效值,这将生成假否定。如果我们收到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    isActive: null,
    lastProcessed: "2020-11-03T19:03:16.537"
}

然后,即使json中存在字段,Assert.NotNull(response.Model.isActive)也会产生一个负测试结果,这正是我们想要检查的。

因此,从理论上讲,如果我们100%肯定API本身永远不会返回null,那么我们可以这样做,但它不是一个通用的方法。对我们正在努力实现的目标也没有很好的描述;)

票数 2
EN

Stack Overflow用户

发布于 2021-01-19 12:13:56

因为isActive属性是一个bool,所以您需要断言它是false。如果您想要一个真或假值,然后表示它缺少的东西,那么在DTO中使用一个可空的布尔值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class YourDTO
{
    public bool? isActive { get; set; }
    ...
}

然后您可以断言isActive为空、真或假。

Alternative:如果您不能更新原始数据传输对象,那么这可能是编写您自己的代码以调用web服务并将JSON响应映射到仅用于测试的JSON响应的一个很好的用例。

然而,这可能是一项大量的工作。其优点是您的测试代码能够真正地与它测试的代码分离。我也在使用数据库的应用程序中这样做过。这是额外的工作,但它允许您的测试使用对测试有意义的任何数据结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65797890

复制
相关文章
28:jmeter断言之响应断言
一个请求发送出去,如何判断该请求执行的任务是否成功呢?通过检查请求的响应数据,是否返回预期想要的数据,如果是,判断请求成功;反之请求失败。断言就是用来判断请求成功与否的。
BUG弄潮儿
2020/06/15
2K0
28:jmeter断言之响应断言
Jmeter系列(60)- 详解响应断言
一般默认勾选 main sample only 就足够了,因为我们一个请求,实质上只有一个请求
小菠萝测试笔记
2020/08/26
1.5K0
Jmeter系列(60)- 详解响应断言
grep正则获取特定内容之零宽断言
(匹配宽度为零,满足一定的条件/断言) 零宽断言用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像 \b ^ $ < > 这样的锚定作用,用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。 断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。
王先森sec
2023/04/24
1.6K0
[Jmeter]---JsonPath表达式提取响应&断言
测试过程中会遇到一些复杂的json响应。比如多层list嵌套时的取值的问题。本篇主要讲述如何运用JsonPath表达式来解决多层嵌套取值的问题。
muntainyang
2020/10/23
1.3K0
[Jmeter]---JsonPath表达式提取响应&断言
技术分享 | 接口自动化测试如何搞定 json 响应断言?
在之前的的章节已经简单介绍了如何断言接口的响应值,在实际工作过程中,json 的响应内容往往十分复杂,面对复杂的 json 响应体,主要通过 JSONPath 解决。JSONPath 提供了强大的 JSON 解析功能,使用它自带的类似 XPath 的语法,可以更便捷灵活的用来获取对应的 JSON 内容。
霍格沃兹测试开发Muller老师
2022/08/03
1.1K0
JMeter 检查点之响应断言(Response Assertion)
JMeter断言用于对sampler(采样器)进行额外检查,且在相同作用域中,每执行完一个sample就会进行一次断言处理,为了确保断言仅作用于某个sample,把该sample添加为子sample。
授客
2019/09/10
4.4K0
JMeter 检查点之响应断言(Response Assertion)
apipost如何设置断言
apipost断言是JavaScript语言编写的,在apipost客户端后执行脚本处即可。断言会在请求返回之后,运行,并根据断言的pass\fail情况体现在最终测试结果中。
sik1
2022/06/04
1K0
思考: 如何设计 输出结果 具有对称性 的 网络结构
实验室师兄参与了一个强化学习竞赛,让仿生人体学会站立行走乃至跑起来。在比赛的过程中他自己用tensorflow设计出了一个 对称性神经网络 ,能保证输出的 最终结果 具有 对称性(具体表现为 输出结果的数值分布 呈现 左右对齐)。
JNingWei
2018/09/27
8750
HTTP -- 请求/响应 结构
  2.Content- Type:表示属于什么类型文档。一般默认是 text/plain.通常指定为 text/html
小蔚
2019/09/11
3.4K0
Spring Boot 中如何统一 API 接口响应格式?
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
江南一点雨
2021/04/01
1.3K0
postman如何使用集合断言?
在postman中,大家都使用过断言,但是我们使用的断言都是针对每一个接口或者是每一个用例添加的,那么是否有可以同时对多个用例或接口添加断言呢 ?答案是肯定有的。
用户7353950
2022/06/23
3960
postman如何使用集合断言?
详解Postman校验响应数据之设置断言编写Test脚本
首先,大家在做selenium自动化的时候,通常都是调用官网提供的元素定位方法,直接调用,可能初期做自动化的时候,不会有什么问题,但是随着我们项目功能越来越多,业务也越来越复杂,有些定位功能,需要单独定制,如果是直接调用的话,我们需要修改所有调用元素定位方法的代码,这样我们维护代码需要耗费很多时间,下面我们通过将元素定位单独封装,来解决这个问题,话不多说,直接贴代码。
全栈程序员站长
2021/07/16
5900
webflux提供响应式API
        响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式,直白的说就是:将变化的值通过数据流进行传播。
kinbug [进阶者]
2019/06/13
2.9K0
adb shell 如何选择特定的设备?
其实这个一查,stackoverflow或者百度谷歌一大把,比如这个“http://stackoverflow.com/questions/14654718/how-to-use-adb-shell-when-multiple-devices-are-connected-fails-with-error-mor”,不过呢,当然要配图才能更加清晰明了了。下面就看下配图版解答。
望天
2018/08/02
4.8K0
adb shell 如何选择特定的设备?
如何使特定的数据高亮显示?
当表格里数据比较多时,很多时候我们为了便于观察数据,会特意把符合某些特征的数据行高亮显示出来。这不,公司的HR小姐姐就有这个需求,说她手头上有一份招聘数据,她想把“薪水”超过20000的行突出显示出来,应该怎么操作呢?
猴子聊数据分析
2020/02/26
5.6K0
[探索]怎样让 JS - API 具有更好的实用性
在上家公司开发后台管理系统的时候,频繁要处理各种数据显示的问题,一开始是实现就好。后来写多了,自己看得也难受了。就想着怎么优化代码和复用了。下面就通过一个简单的例子,怎么让 API 更加的实用,更好的复用。
守候i
2019/07/02
7220
[探索]怎样让 JS - API 具有更好的实用性
Postman API测试工具 - 断言 基本使用(二)
PostMan工具断言 断言:诊断语言,检查点。检查返回的结果是否是正确。 怎么用利用Postman工具添加断言 常见的验证: 验证返回码必须是200 pm.test("Status code is 200", function () { pm.response.to.have.status(200); }); 响应时间验证: pm.test("Response time is less than 200ms", function () { pm.expect(pm.respo
EXI-小洲
2022/12/19
4900
Postman API测试工具 - 断言 基本使用(二)
SoapUI中是如何断言的呢(二)
将请求发送到Web服务器后,就会收到响应。我们需要验证响应是否包含我们期望的数据。为了验证响应,我们需要使用断言。
用户7466307
2020/06/17
1.5K0
SoapUI中是如何断言的呢(一)
将请求发送到Web服务器后,就会收到响应。我们需要验证响应是否包含我们期望的数据。为了验证响应,我们需要使用断言。
用户7466307
2020/06/17
6470
点击加载更多

相似问题

断言JSON JArray Api响应

10

具有可配置列定义的Api响应结构

10

Groovy API响应JSON对象断言

124

带有Rails断言响应位置的CodeSchool API与特定的URL相同

10

具有特殊字符的with响应消息断言

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文