接口测试平台-50:自动异常测试-4

接口测试平台-50:自动异常测试-4

上文,在catch中已经对不可替换的请求体类型做了处理。现在要开始进行try中符合规则的请求体类型了。

这里第一层try中可以运行完的只是说不会报错,共两种: 1. none,2. 二维数组

接口测试平台-50:自动异常测试-4

function error_play() {
    api_body = document.getElementById('error_api_body').value;
    ready_error_data = document.getElementById('ready_error_data').value;

    // 判断是不是form-data/x-www...的二维数组格式
    try {
        var s = eval(api_body);
        if (s instanceof Array) {
            console.log('这是数组');
        } else {
            console.log('这是none');
            alert('当前请求体不含任何内容!')
        }
    } catch (e) {
        // 若不是就继续判断是不是raw-json的json串格式
        try {
            var s = JSON.parse(api_body);
            console.log(s)
            console.log('这是字典json')
        } catch (e) {
            //若也不是,那就不需要做异常值测试了
            alert('当前接口的请求体类型不支持异常值测试!')
        }
    }
}

 

只需要在二维数组和字典json位置,进行替换规则即可。数组是二维数组:长这样 [["aa","11"],["bb":"22]]

接口测试平台-50:自动异常测试-4

接口测试平台-50:自动异常测试-4

如果要替换,那循环应该起码是俩层;第一层遍历请求体有几个参数,第二层遍历预置的替换参数

但需要先加上把这个替换数据的数组声明出来的代码:

接口测试平台-50:自动异常测试-4

 

接下来就是这个复杂的双层循环替换了。

要保证每次替换只让目标参数的值依次变成预置替换参数,其他的保持原始正确的值。那么就不要在原始的s上做替换,否则会丢失原来的正确的值。

接口测试平台-50:自动异常测试-4

代码中的深拷贝是jquery的方法:$.extend(true,新,旧);看看效果

接口测试平台-50:自动异常测试-4

数组的也就是这个form-data和x-www....的完成之后。接下来就是raw-json格式的了。看看现在的代码:

遍历这个字典的key,然后依次进行替换,仍然是俩层大循环:

接口测试平台-50:自动异常测试-4

接口测试平台-50:自动异常测试-4

以下是源码:

function error_play() {
    api_body = document.getElementById('error_api_body').value;
    ready_error_data = document.getElementById('ready_error_data').value;

    // 把预替换数据从一个大字符串,按英文逗号解析成数组
    var r = ready_error_data.split(',');

    // 判断是不是form-data/x-www...的二维数组格式
    try {
        var s = eval(api_body);
        if (s instanceof Array) {
            console.log('这是数组');
            // 第一层 判断一共有几个参数就进行几次循环
            for (var i=0; i<s.length;i++) {
                // 第二层 判断有几个要替换的错误值,挨个替换执行,每次都重新初始化
                for (var j=0; j<r.length;j++) {
                    var new_body = [];
                    $.extend(true, new_body, s);
                    new_body[i][1] = r[j];
                    console.log(new_body)
                }
            }
        } else {
            console.log('这是none');
            alert('当前请求体不含任何内容!')
        }
    } catch (e) {
        // 若不是就继续判断是不是raw-json的json串格式
        try {
            var s = JSON.parse(api_body);
            console.log('这是字典json')
            // 第一层 判断一共有几个参数就进行几次循环
            for (var i in s) {
                // 第二层 判断有几个要替换的错误值,挨个替换执行,每次都重新初始化
                for (var j=0; j<r.length;j++) {
                    var new_body = {};
                    $.extend(true, new_body, s);
                    new_body[i] = r[j];
                    console.log(new_body)
                }
            }
        } catch (e) {
            //若也不是,那就不需要做异常值测试了
            alert('当前接口的请求体类型不支持异常值测试!')
        }
    }
}

 

最后:bug

就是当把请求体变成如下这种带回车的情况时,那么点击异常值测试就会报错,甚至打不开弹层:

接口测试平台-50:自动异常测试-4

接口测试平台-50:自动异常测试-4

这种原因是因为在调用这个函数的时候,这个按钮的传参数位置因为有了回车,就变成下面这个样子:

接口测试平台-50:自动异常测试-4

这种直接换行的写法在html中属于引起了语法错误。

 

在一开始的时候没考虑到这种情况,只是简单的想当然的需要这个接口请求体,就传进来的思维。

下节课会讲:把这些替换好的请求体发给后台,让后台去生成请求,并返回返回值,然后前端动态生成各个显示文本框。