《Web测试囧事》——1.3 测试Web Service能否正常提供JSON数据

简介:

本节书摘来自华章计算机《Web测试囧事》一书中的第1章,第1.3节,作者 黄勇 雷辉 徐潇 杨雪敏,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3 测试Web Service能否正常提供JSON数据

某一天,小蔡所在的项目组刚开发完成一个Web Service,服务的功能是,通过在客户端调用时指定的一个ID,可以从后台数据库中读取对应的房产信息,还有与这个房产关联的一到多个房东信息、一到多个图片信息,以及地址信息等。Web Service最终把这些信息组合成JSON格式的数据返回给调用方,调用方可以通过界面来展示相关信息,也可以通过其他方式去使用这些信息。但是,调用方具体如何使用这些信息与Web Service服务本身的测试关系不大,所以暂且不表了。小蔡需要做的是验证这个Web Service服务能否正常地提供JSON数据。

1. 寻找测试关键点

和开发人员讨论后,小蔡了解到,给Web Service服务发送ID后,后台系统会根据这个ID去查询数据库,数据库对应的对象模型如图1-4所示。

在这个对象关系图里可以看到,Building对象是图的核心,其他对象分别和Building对象是一对一或者一对多的关系。那么小蔡觉得,测试的关键点就是这些数据之间的关系能否正确反映在生成的JSON数据里。(特别是要确保生成的JSON数据的格式没有被破坏,否则解析器就无法解析JSON数据了。)

2.爬楼梯开始了

在确定好测试点之后,小蔡测试思路如下。

1)依据边界值进行测试。由于数据库的数据存在多种情况:0条记录、单条记录、多条记录,需要验证根据这些数据条数生成的JSON文件是否正确。

image

2)需要关注对象之间的关联关系限制。例如一个Building对应0到4个Callout,那么需要测试当多于4个Callout时,生成的JSON的情况。

3)Web Service允许用户输入参数,所以需要验证输入特殊数据后,系统是否出现异常或者崩溃的现象,以及是否会出现SQL注入的问题。

4)Web Service有可能会被多个客户端并发调用,因此需要验证其性能是否符合设计要求。

根据测试思路,小蔡设计了如下测试用例。

1)Building对象可以有多个Space,所以可以选取0个、1个、6个Space去看生成的JSON是否正确,这个可以通过修改数据库数据的方式生成假数据去完成相关测试。另外,如图1-4所示,小蔡还需要测试Building和其他对象的关系,包括Customer、MediaLink等。小蔡还特别注意了边界值测试,比如,一个Building对应0~4个Callout,那么可以用0、1、4、5个Callout去测试。当有5个Callout的时候,要去查看返回的JSON数据是返回了前4个Callout,还是返回了前5个,又或者抛出了异常,当然,具体哪种结果是程序设计所期望的,需要和开发人员去沟通。

2)调用Web Service时需要指定ID,所以可以测试在ID存在和不存在两种情况下JSON结果是否返回正常。

3)异常处理,调用Web Service时可以把ID换成错误的参数,例如null、非常长的字符串、空字符串、英文字符、其他文字(例如中文字符)等。接着小蔡就去验证服务对异常是否做出了正确的处理。

4)安全测试,这个Web Service会被外网使用,那就需要在安全性上投入更多的测试。例如,如果URL可以输入任何参数,这些参数是否包含危险数据导致SQL注入这类安全问题。还有,因为Web Service被外网使用,那在调用这个服务时是否需要提供用户名和密码。

JSON使用了一种特殊描述数据的方式,用“,”、“[”、“]”、“{”、“}”等分割数据,小蔡需要测试,如果数据库存储的数据恰好有这些符号,这些数据被读取并生成为JSON后是否会破坏JSON的格式。

5)性能测试,如何对Web Service进行性能测试呢,快速测试方式就是通过一些工具的多线程调用,或者手工编写简单多线程代码去调用,然后查看持续调用两小时之后服务是否正常,服务后台内存曲线是否出现异常,有没有出现内存泄露等问题。另外,查看Web Service是否能在符合性能期望的时间内返回数据。

还有一个边缘的性能测试路径是:一个对象有成千上万个关联子对象,能否正常生成对应的JSON文件,以及性能是否能达到期望目标。庆幸小蔡这次测试任务不需要这么做,因为后台数据明确了不可能存在这种情况,但是在别的测试任务中可能需要测试。

image

6)查看生成的JSON数据中,一些特殊类型的数据是否和数据库完全一致。例如,对于float类型,有个Bug是该类型数据精度在数据库中是保存到小数点后8位,但生成的JSON中只保留小数点后2位;类似的特殊数据还包括非常长的字符串,需要查看是否被截断;如果在数据库中保存的是0,在JSON中是否会生成0.00,此外还可以查看空字符串是否正确生成在JSON中。

7)确定服务是否需要支持HTTPS加密,如果需要,就要去测试返回结果是否正常。

哈哈!终于爬完楼梯了,小蔡可以松口气了,走!喝杯啤酒,再来块炸鸡么?

相关文章
|
22天前
|
JSON JavaScript 数据格式
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
jwt-auth插件实现了基于JWT(JSON Web Tokens)进行认证鉴权的功能。
37 1
|
25天前
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
Mybatis+mysql动态分页查询数据案例——测试类HouseDaoMybatisImplTest)
20 1
|
25天前
|
Java 关系型数据库 数据库连接
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
Mybatis+MySQL动态分页查询数据经典案例(含代码以及测试)
24 1
|
1月前
|
存储 JSON Apache
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%
在最新发布的阿里云数据库 SelectDB 的内核 Apache Doris 2.1 新版本中,我们引入了全新的数据类型 Variant,对半结构化数据分析能力进行了全面增强。无需提前在表结构中定义具体的列,彻底改变了 Doris 过去基于 String、JSONB 等行存类型的存储和查询方式。
揭秘 Variant 数据类型:灵活应对半结构化数据,JSON查询提速超 8 倍,存储空间节省 65%
|
11天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
16 0
|
7天前
|
存储 JSON JavaScript
「Python系列」Python JSON数据解析
在Python中解析JSON数据通常使用`json`模块。`json`模块提供了将JSON格式的数据转换为Python对象(如列表、字典等)以及将Python对象转换为JSON格式的数据的方法。
24 0
|
11天前
|
存储 JSON 数据挖掘
python逐行读取txt文本中的json数据,并进行处理
Python代码示例演示了如何读取txt文件中的JSON数据并处理。首先,逐行打开文件,然后使用`json.loads()`解析每一行。接着,处理JSON数据,如打印特定字段`name`。异常处理包括捕获`JSONDecodeError`和`KeyError`,确保数据有效性和字段完整性。将`data.txt`替换为实际文件路径运行示例。
11 2
|
12天前
|
人工智能 分布式计算 Kubernetes
人工智能,应该如何测试?(三)数据构造与性能测试篇
本文探讨了人工智能场景中的性能测试,区别于传统互联网测试,其复杂性更高。主要关注点包括两类AI产品——业务类和平台类,后者涉及AI全生命周期,测试难度更大。测试重点是模型训练的性能,特别是数据模拟。需要构造大量结构化数据,如不同规模、分布、分片和特征规模的数据,以评估算法效率。此外,还涉及模拟设备规模(如视频流)和节点规模(边缘计算),以测试在大规模负载下的系统性能。文中提到了使用工具如Spark、ffmpeg、流媒体服务器和Kubernetes(K8S)的扩展项目,如Kubemark,来模拟大规模环境。最后,文章介绍了使用Golang进行异步IO操作以构建海量小文件,优化IO性能。
28 0
|
16天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
29天前
|
JSON 数据格式
糊涂工具类(hutool)post请求设置body参数为json数据
糊涂工具类(hutool)post请求设置body参数为json数据
19 1