微信小程序接口测试时,通过抓包看出需要先获取微信code,才能发请求获取token,继续操作其他接口。此时需要根据实际情况选择通过鉴权的方案

方案一:token有效期较长,可以考虑直接抓包获取token,用于之后的接口请求鉴权
方案二:调用微信开发者工具,获取微信code
此处通过JS的miniprogram-automator(python则通过minium)
前置条件:前端相关环境正常(Node.js、相关小程序代码、微信开发者工具、小程序开发者账户登录...),能用微信开发者工具打开小程序并正常使用即说明环境正常
操作:
1、安装miniprogram-automator包
DOS窗口中执行 npi i miniprogram-automator
2、编写获取调用微信开发者工具,获取微信code的JS代码
const automator = require('miniprogram-automator');
automator.launch({
cliPath:'D:/xxxx/cli.bat', // 微信开发者工具cli位置,如果没有更改过默认安装位置,可以忽略此项
projectPath:'E:/code/xxxxx' // 小程序项目路径(微信开发者工具右上角“详情”--基本信息--本地目录)
}).then(async miniProgram => {
try {
const page = await miniProgram.reLaunch('xxxxx'); //复制登录页面的页面路径,如果报错再行查看
await page.waitFor(500);
const promise = await miniProgram.callWxMethod('login');
console.log(promise.code);
} catch (error) {
console.error('调用login方法获取code出错:', error);
} finally {
await miniProgram.close();
}
}).catch(error => {
console.error('启动微信开发者工具出错:', error);
});
3、编写Java代码调用上述的JS代码获取code,之后就可以正常操作了
public class Login extends BaseTest { @Test public void login_test(){ MerChantApi merChantApi = new MerChantApi(); String foreLoginData = "{\"appId\":\"xxxxxxx\",\"code\":\"" + getWechatCode() + "\"}"; Response foreLogin = merChantApi.foreLogin(foreLoginData); saveToEnvironment("token",foreLogin.jsonPath().get("data.token")); String loginData = "{\"mobile\":\"xxxxxx\",\"smsCode\":\"xxxxx\"}"; Response login = merChantApi.login((String) getEnvironment("token"),loginData); } }
缺点:
1、资源消耗较大,对电脑有要求
2、需要保持开发者登录,得隔段时间就确认
3、不能用于性能测试
4、微信开发者工具不能安装在Linux上,导致接口自动化的服务如果搭在Linux服务器上,还得远程调用
方案三:需要开发帮助修改,用openId、userId换token
请求头中传openId、userId即可,但环境不能正常通过页面进入使用,需要切回后方可使用。如果接口自动化是独立环境则不用担心