接口测试平台代码实现39:接口数据全部保存

简介: 接口测试平台代码实现39:接口数据全部保存

 我们之前的章节已经解决了各种接口的数据的提取问题,本节的任务就是把这些传给后端,然后保存成功。

   打开P_apis.html,找到我们上次没写完的ts_save()函数:

我们之前之所以没有直接写完这个函数,是因为突然发现我们没有获取到接口id,所以传递给后端的时候,完全不知道这些数据是哪个接口的。所以我们中途去写了ts_show()函数,这个函数在打开弹层之后会永久保留当前的接口id在一个small标签中。然后我们的ts_save()函数就可以从这个永久的small标签中拿到当前接口id了。

   所以现在获取到这个id吧:

微信图片_20220618211704.png然后就是写一个请求 给后端发送这些数据了哈:

ulr我给定义为了:/Api_save/

微信图片_20220618211721.png

那么到这里就可以继续了么,其实我们忽略了一个问题,就是其中的ts_api_body这个参数,他的类型目前看,因为用户选择的编码格式不同,这个请求体的类型也不同,分为两类:字符串和数组,这里我们只能按照字符串格式发出去,所以要把为数组的俩个情况在最后转变为字符串:

微信图片_20220618211728.png

分别加上这句把数组变成字符串的代码,改成如下:微信图片_20220618211735.png

然后写好urls.py:微信图片_20220618211741.png

再去写后台函数:微信图片_20220618211748.png

让我们来思考下这个后台函数要做哪些事吧:

  1. 获取到前端过来的所有数据
  2. 保存
  3. 返回保存成功文案

代码如下:

微信图片_20220618211754.png

# 保存接口
def Api_save(request):
    # 提取所有数据
    api_id = request.GET['api_id']
    ts_method = request.GET['ts_method']
    ts_url = request.GET['ts_url']
    ts_host = request.GET['ts_host']
    ts_header = request.GET['ts_header']
    ts_body_method = request.GET['ts_body_method']
    ts_api_body = request.GET['ts_api_body']
    # 保存数据
    DB_apis.objects.filter(id=api_id).update(
        api_method = ts_method,
        api_url = ts_url,
        api_header = ts_header,
        api_host = ts_host,
        body_method = ts_body_method,
        api_body = ts_api_body
    )
    # 返回
    return HttpResponse('success')

我们接下来就是 启动服务,刷新页面,然后测试下各个编码格式的保存情况,看看是否报错等等。之前我说过,咱测试开发做的工具,千万不要有bug,不然太打脸了,因为也没有专门的测试排期,所以我们每做完一步都要仔细全面的测试。当然因为内部工具的关系,不用太追求各种异常输入异常处理情况。

在充分测试之后,没发现报错情况。我们就继续往下做。

目前的情况下,用户在点击了保存按钮后,虽然后台成功保存了新数据,但是这个调试弹层还没有关闭。所以我们给ts_save() 的请求的返回值function (ret){} 里面加入一个隐藏弹层的代码微信图片_20220618211800.png

再刷新页面试试,发现可以点击保存后关闭了弹层,比较符合使用习惯了。


接下来我们要思考一个问题:

我们每次隐藏弹层,弹层的各个输入框保存的内容其实并没有清空,那么下次我们点击其他接口的调试按钮时候,打开的其实仍然是这个弹层,所以各个输入框的内容其实还是上个接口的内容。这个就相当于这个缓存我们没有清理的后果,在我们很多app上也出现过类似bug。

有的同学会说,在我们的ts_show()函数中,已经明确会该给这个弹层的各个输入框加载新接口的数据了。自然会覆盖掉上一个接口的数据。

当然,这说的没有错,理想情况下是这样的。

不过以下俩种情况就不好说了:

  1. 网速慢的时候,用户打开后会先看到旧的数据,然后过了2秒后,新的数据才加载进来替换。很容易让人怀疑自己的眼睛,或者调试出错。
  2. 当新数据加载失败的时候,没有替换成功,但是用户可能不知道失败了,因为他看到的还是上一个接口的数据,他会以为这个旧数据就是当前接口的数据。如果他此时不小心点击了保存按钮,然后保存按钮就会真实的把这个旧数据变成新接口的。那么真正的新接口的数据就永远的丢失了。

所以为了以上的各种风险情况成真,我们有必要做一个清理缓存的函数,clear_ts_api()。这个函数每次运行都会把调试弹层的各个输入框清理干净。

那么何时运行呢,就在每次用户打开的时候,也就是放在ts_show()函数内的最开始位置调用。

   先新建这个函数:微信图片_20220618211805.png

然后内部开始写清空的代码:微信图片_20220618211810.png

这个函数呢其实也不是很简单的,我们在清理了简单部分后,就要继续处理复杂的请求体编码格式部分了。

在这之前,我们需要对html部分代码 当中的一些标签 加上id,以便更好的控制:

微信图片_20220618211817.png

给none加上id,这样让新接口打开时默认先切换到none,而不是保存上一个接口的子页面切换状态,然后写好对应的初始化代码,注意是点击.click()微信图片_20220618211824.png

然后删除掉我们之前方便调试写的俩个表格类的请求体tr:微信图片_20220618211831.png

但是要注意,我们必须要留一个空行,不然会触发这个第三方表格插件的bug

改成如下即可:微信图片_20220618211839.png

然后就是我们要进行初始化的代码了,为了方便初始化调用,我们这里仍然要对俩个tbody都加上id:微信图片_20220618211846.png

然后我们去写代码:微信图片_20220618211851.png

这里我们运用的是强制把其的子内容改成空空的一个tr行内带着两个td列。

然后就是紧接着的,五个多行文本框的清空了:微信图片_20220618211857.png微信图片_20220618211902.png

最后还有一个 返回体文本框,我们顺便也给它清空了吧,以免上一个接口的返回值被误认成当前接口的返回值:

所以先给它加上id:微信图片_20220618211908.png

代码:微信图片_20220618211918.png

最后我们在ts_show()函数中调用这个clear_ts_api即可:微信图片_20220618211926.png

然后刷新页面进行测试:

我们发现了一个bug:

就是这个第三方表格插件,虽然我们已经成功让其保留了一个空行,但是貌似这个空行显示的并不对:微信图片_20220618211932.png

连修改,删除按钮都没有显示出来。此时就算我们点击添加新参数的按钮,它的原理也只是复制第一行,就会出现多个不正确的行:微信图片_20220618211938.png

引起这个的问题是,这个第三方插件想要正确显示,不仅仅是html正确即可,它最后还是要运行一下它的js函数,才能对其进行正确显示化。

这个函数就是我们前面引入的这部分:微信图片_20220618211945.png

这俩部分之所以没有生效,是因我们在运行clear_ts_api()时,没有加入,而他们本来的运行时机是在整个接口库页面刚进入的时候就运行过了,之后我们若想强行更改tbody的内容tr td等,就必须重新运行这俩个函数,所以我们还要在clear_ts_api()函数的最后再运行一下这俩个函数即可:微信图片_20220618211951.png

现在让我们刷新页面再看看:发现效果已经正常显示了。微信图片_20220618211958.png

这里其实还有个坑,就是千万不要删除仅有的一行,否则就无法再添加新的正常的参数了,当然这种情况我们可以有很多办法避免,当然正常来用户真的需要切换到form-data和x-www...的时候,也确实是要传入参数了,那么就不会手欠的删掉第一行,而会直接编辑第一行或者先添加很多行。当然万一操作失误导致第一行被删除,那么只需要保存/取消,然后重新打开即可。

相关文章
|
5天前
|
人工智能 供应链 安全
AI辅助安全测试案例某电商-供应链平台平台安全漏洞
【11月更文挑战第13天】该案例介绍了一家电商供应链平台如何利用AI技术进行全面的安全测试,包括网络、应用和数据安全层面,发现了多个潜在漏洞,并采取了有效的修复措施,提升了平台的整体安全性。
|
11天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
42 3
|
14天前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
65 1
|
1月前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
49 2
|
1月前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
14天前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
40 0
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
63 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
243 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
253 3
快速上手|HTTP 接口功能自动化测试
|
2月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
49 5
下一篇
无影云桌面