接口测试平台代码实现50: 自动异常测试-3

简介: 本节开始之前,先解决下关于调试层遗漏的一个设计缺陷。就是当已经打开了一个接口的调试层后,如果直接点击其他接口的调试层便会出现显示错误。这类的问题非常多,我们最好是直接根本上绕过去。

   解决办法一般来说有俩种

1: 添加蒙版,就是在打开这个调试层的时候,其他位置都变成暗色的蒙版遮住,不让用户能点击到其他区域。

2: 当用户点击其他接口的调试按钮时,自动隐藏并清空当前调试层,再打开新接口的调试层。

   这里我们选择第一种方案:

我们在html的body内的最底部,添加一个div作为我们的蒙层微信图片_20220621185610.png

<div id="mengceng" style="display: none;opacity:0.5;position: absolute;left: 0;top: 100px;
                          background-color: gray;width: 100%">
</div>
<script>
    document.getElementById('mengceng').style.height=window.screen.availHeight.toString()+'px';
</script>

当然这蒙层的默认是隐藏的。我们需要在调试层打开的函数中加上显示这个蒙层的代码。微信图片_20220621185618.png

看看效果:微信图片_20220621185623.png

蒙层的颜色和透明度,位置大小大家可自行修改。


当然异常测试层我们也可以加上对应的代码来生成蒙层:

微信图片_20220621185629.png

微信图片_20220621185636.png

这样便可以防止用户进行异常操作了。

   为了防止关闭异常测试层后引发其他bug,我们把关闭函数的代码从隐藏这个div改成刷新整个页面:

微信图片_20220621185648.png

  好言归正传,让我们继续开始异常值测试。

貌似该开始实际进行测试了,按照我们之前章节的设计。当用户点击开始测试后,前端js会开始根据预置的待替换参数,依次交叉排列组合替换接口本来的请求体。然后把新的请求体传递给后台(这个过程会持续很多次),每次之后 ,后台进行请求把返回值返回,前端js函数再生成一个多行文本框展示这个返回体并添加到这个异常测试层上。

   但是,这里我们出现了设计缺陷,什么缺陷呢?就是我们最开始设计的这个打开异常值层的函数:

error_test

它确实可以接收到接口的请求体。

然后我们打算再新声明一个js函数:error_play() ,当用户点击开始测试时来调用这个函数来进行测试,这里很显然,俩个函数是分开的。我们无法让error_test的请求体参数 传送到 error_play里。

这里是我们一开始设计时候没有考虑完全造成的,在我们测试开发频繁快速的落实工具中,缺少完整专业的产品设计和开发分解,很容易出现这样的设计逻辑出现问题的情况,遇到这种时候一般难免都会产生挫败感,因为这意味着:

要么我们要增加额外的没有预想到的工作量,比如持久化这个请求体参数;

要么我们要推翻之前的设计来返工。

   不过在我们经历多了之后,这种问题就没那么让人沮丧了。

在这里我们用户点击异常值测试的时候,就是因为多了一步预置替换参数,才导致整个流程中断,参数数据流被中断。如果我们可以去掉这一步,那么显而易见的就简单了。可以一个error_test函数就全搞完了。但是这个预置替换参数要在哪设置呢?难道不让用户修改了么?显然我们从用户使用的角度来说,不应该去掉可编辑预置替换参数 这一过程。

   所以我们可以想办法持久化这个请求体,来让我们的error_play函数可以获取到

   一个简单的并且好理解的办法可以忠诚的保存整个字符串的方法是,建立一个隐藏的input,然后在error_test运行时,把请求体写进去。在error_play运行时再提取出来即可。

   那么代码如下:

微信图片_20220621185656.png


 然后我们声明error_play函数再提取出来。微信图片_20220621185705.png

然后别忘了分别在我们的html和初始化函数中,给这个开始测试按钮的onclick属性指向error_play微信图片_20220621185803.png

提取出来后,我们打印一下,看看是否获取成功?

先看一下我们接口本来的请求体

微信图片_20220621185822.png

再看看开始测试后的输出:这只是form-data和x-www....的

微信图片_20220621185832.png

看来没啥问题,我们再看看其他格式的请求体:

none时为空:

微信图片_20220621185840.png

raw-json时:

微信图片_20220621185849.png微信图片_20220621185857.png

raw-text等:

微信图片_20220621185903.png

微信图片_20220621185857.png

如上图我们看到,当为none或者为raw-text/html/xml/js等的时候,我们这个异常值测试时没办法替换的,因为我们不知道要替换什么,其实也就是说,这个设计并不适用于这种请求体。

我们只能很好的使用在form-data/x-www...或json串的情况下。好在我们日常要测试的绝大多数接口,都是这几种请求体。

但是因为他们的格式不同,我们还要分为两种分支来进行判断替换。所以在js中肯定会有判断请求体类型,但是我们忽略了一个问题,就是我们并没有传输或者持久化保存这个接口的请求体类型,所以我们目前只能通过请求体本身来反向推算出请求体类型再根据类型进行选择不同的算法进行替换。虽然听起来比较麻烦,但是其实也没多难。微信图片_20220621185919.png

function error_play() {
    api_body = document.getElementById('error_api_body').value;
    ready_error_data = document.getElementById('ready_error_data').value;
    console.log(api_body);
    //判断是不是form-data/x-www...的二维数组格式
    try {
        var s = eval(api_body);
        console.log(s)
    }catch (e) {
        //若不是就继续判断是不是raw-json的json串格式
        try {
            var s = JSON.parse(api_body);
            console.log(s)
        }catch (e) {
            //若也不是,那就不需要做异常值测试了
            alert('当前接口的请求体类型不支持异常值测试!')
        }
    }
}

代码中运用了 俩次try来判断。如果能命中两次中任何一次try则说明 可以解析并测试,否则就是不支持。

   之后我们会在下一节中讲解,如何进行替换,可能在python中这种替换很简单,但是在js中其实也很简单。下节会给大家继续讲

相关文章
|
1月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
2天前
|
人工智能 自然语言处理 测试技术
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
Potpie.ai 是一个基于 AI 技术的开源平台,能够为代码库创建定制化的工程代理,自动化代码分析、测试和开发任务。
65 19
Potpie.ai:比Copilot更狠!这个AI直接接管项目代码,自动Debug+测试+开发全搞定
|
5天前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
43 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
3天前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
25 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
24天前
|
前端开发 JavaScript 测试技术
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
75 35
|
24天前
|
JavaScript 前端开发 Java
使用ChatGPT生成关于登录产品代码的单元测试代码
使用ChatGPT生成关于登录产品代码的单元测试代码
41 16
|
1月前
|
存储 测试技术 数据库
接口测试工具攻略:轻松掌握测试技巧
在互联网快速发展的今天,软件系统的复杂性不断增加,接口测试工具成为确保系统稳定性的关键。它如同“翻译官”,模拟请求、解析响应、验证结果、测试性能并支持自动化测试,确保不同系统间信息传递的准确性和完整性。通过Apifox等工具,设计和执行测试用例更加便捷高效。接口测试是保障系统稳定运行的第一道防线。
|
1月前
|
Web App开发 JSON 测试技术
API测试工具集合:让接口测试更简单高效
在当今软件开发领域,接口测试工具如Postman、Apifox、Swagger等成为确保API正确性、性能和可靠性的关键。Postman全球闻名但高级功能需付费,Apifox则集成了API文档、调试、Mock与自动化测试,简化工作流并提高团队协作效率,特别适合国内用户。Swagger自动生成文档,YApi开源但功能逐渐落后,Insomnia界面简洁却缺乏团队协作支持,Paw仅限Mac系统。综合来看,Apifox是国内用户的理想选择,提供中文界面和免费高效的功能。
|
2月前
|
监控 JavaScript 测试技术
postman接口测试工具详解
Postman是一个功能强大且易于使用的API测试工具。通过详细的介绍和实际示例,本文展示了Postman在API测试中的各种应用。无论是简单的请求发送,还是复杂的自动化测试和持续集成,Postman都提供了丰富的功能来满足用户的需求。希望本文能帮助您更好地理解和使用Postman,提高API测试的效率和质量。
135 11
|
3月前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
92 3