全部 ApiPost使用 后端 前端 接口测试 IOS Android 数据库 2022 测试技术 工具
问答 / 问答详情

[已处理] 予执行器内建立的请求返回值无法给当前接口调用

接口测试 156次浏览

缘由:我不确定是否是BUG还是设计如此;但我在调试中无法顺利调试加密算法。

步骤:1某签到接口,传参body中含有全局变量{{token}}和全局变量时间戳{{timestamp}};

2在予执行器中新增一个登录接口请求,并将该登录接口返回的token设置为全局变量{{token}};

3重复发送请求出现登录失败,查看控制台发现接口信息中的token并非调用当次请求中【登录请求返回的值{{token}}】

4而是上一次请求中返回的【{{token}}】;

5也就是说我连续点击签到3次,第一次的body调用的全局变量{{token}}取值是空的(因为这次token没有被调用),并且发现这次请求生成的全局变量{{token}}值"aaa"有出现在全局变量查看器中。

6但是第二次的body中调用的全局变量{{token}}居然是第一次签到留下的值"aaa",当然第二次请求生成的token值"bbb"也没有被调用;

7第三次请求中调用的token是上次的“bbb”。

麻烦官方人员处理一下。我们公司十几个人工位的工程师等着我把加密算法放上去。

如果是我操作有问题麻烦通知我一下谢谢。邮箱hcie2520@163.com。

| 1 收藏

19 个回答

简单的理解就是,予执行器生成的 全局变量如果不能被当前接口调用,那予执行器还有意义吗。

予执行器内建立的请求返回值无法给当前接口调用

确认过了。在postman中都是可以在前置处理器中用新建请求的回参token替换当前接口body中的token。但是最新版本的apipost-v5.3.5确实是有问题的。

在预执行脚本通过以下方法发送请求获取token

$.ajax({
    url:"https://example.apipost.cn/api/?c=Module&a=token",
    method:"POST",
    async:false, // 记住此项设置为 false,必须同步请求
    success:function(result){
		console.log(result);
	}
});

予执行器内建立的请求返回值无法给当前接口调用

记住使用$.ajax代替apt.sendRequest

因为目前apt.sendRequest异步方法,会出现一些异常情况。

予执行器内建立的请求返回值无法给当前接口调用

这个$.ajax放上去跑不了噢。。是版本不同还是我哪里参数不对?

@悬崖之上 ,兄弟麻烦看看是哪里出了问题?

提示什么?

予执行器内建立的请求返回值无法给当前接口调用

另外这几个都引起报错了。用得是最新版本。v5.3.5

就是预执行内的登录请求没有发出去。所以没有获得回参。。获取不到新的token

1、是 $.ajax 不是apt.ajax 

2、formData改成 data 

其实就是jquery的ajax 语法。方便的话可以贴一下您的脚本代码,我这边帮您改好。私密部分可以用xxx代替。

//3在前置脚本中建立登录请求参数

//将登录请求发送并获取到token,并赋值为全局变量token_front

$.ajax({

    url:"http://test.xxxk.com/api/v1/user/method/login.user.password",

    method:"POST",

    headers:{

    "content-type":"application/json"

    },

    timeout:"10000",

    async:false, // 记住此项设置为 false,必须同步请求

    data:{"method":"login.user.password","username":"13xxx4021","password":"rdxxx687","platform":"pc","captcha":"","appkey":"72378499","token":"","format":"json","sign":"777xxxx6c09e639b337"}

}, success:function (response) {

    apt.globals.set("token_front",response.json.data.token.token);

});

予执行器内建立的请求返回值无法给当前接口调用

$.ajax({

    url:"http://test.xxxk.com/api/v1/user/method/login.user.password",

    method:"POST",

    headers:{

    "content-type":"application/json"

    },

    timeout:"10000",

    async:false, // 记住此项设置为 false,必须同步请求

    data:{"method":"login.user.password","username":"13xxx4021","password":"rdxxx687","platform":"pc","captcha":"","appkey":"72378499","token":"","format":"json","sign":"777xxxx6c09e639b337"}, 
    success:function (response) {
        console.log(response)
        apt.globals.set("token_front",response.json.data.token.token);
    }
}
);

还是不行诶,这个预执行器内的登录请求应该没发出去吧。获取不到token。等明天官方看看吧

予执行器内建立的请求返回值无法给当前接口调用

用这个(response.json.data.token.token换成response.data.token.token

预执行脚本里面的返回个正常的接口返回格式好像不一样,这个没有嵌套json这一层。

$.ajax({

    url:"http://test.xxxk.com/api/v1/user/method/login.user.password",

    method:"POST",

    headers:{

    "content-type":"application/json"

    },

    timeout:"10000",

    async:false, // 记住此项设置为 false,必须同步请求

    data:{"method":"login.user.password","username":"13xxx4021","password":"rdxxx687","platform":"pc","captcha":"","appkey":"72378499","token":"","format":"json","sign":"777xxxx6c09e639b337"}, 
    success:function (response) {
        console.log(response)
        apt.globals.set("token_front",response.data.token.token); // 此处有更改,经测试ok
    }
}
);

予执行器内建立的请求返回值无法给当前接口调用

予执行器内建立的请求返回值无法给当前接口调用

@悬崖之上,请问你用的是这种函数对吗。但是这种函数好像在这里不生效噢。

1没有返回任何数据,也没有获取到新的token

2软件中间有个圈圈一直在转,无法对软件界面进行操作。不知道算不算bug  O(∩_∩)O哈哈~

你按照我给你发的代码粘贴,URL改一下,我这边是正常的。

你可以看下console.log(response) 这里,到底获取的结果响应是什么(控制台里)

另外如果你的请求方式是 "content-type":"application/json",那么data好像需要JSON.stringify 一下。

$.ajax({

    url:"http://test.xxxk.com/api/v1/user/method/login.user.password",

    method:"POST",

    headers:{

    "content-type":"application/json"

    },

    timeout:"10000",

    async:false, // 记住此项设置为 false,必须同步请求

    data:JSON.stringify({"method":"login.user.password","username":"13xxx4021","password":"rdxxx687","platform":"pc","captcha":"","appkey":"72378499","token":"","format":"json","sign":"777xxxx6c09e639b337"}), 
    success:function (response) {
        console.log(response)
        apt.globals.set("token_front",response.data.token.token); // 此处有更改,经测试ok
    }
}
);

予执行器内建立的请求返回值无法给当前接口调用

@悬崖之上     nice!!非常感谢!!搞定这个问题了,预执行器中登录接口返回参数的token成功写入到当前接口{{token_front}}中了。

等我后面的加密算法跑通了我写篇文章。给以后找资料的朋友一些经验。

Apipost 私有化火热进行中

撰写答案

只服务于

前后端、移动端、测试人员

提问题 发布您遇到的Bug和问题,上万名大牛和开发者来帮您解决!