模拟微信接口时,提示“请在微信客户端打开连接”(转)

背景描述

 


相信有模拟微信页面请求的测试都有看到过这个页面,简单点说就是爬虫爬微信页面,进行回放的时候会出现这个页面。大概在1年前,专门安排了一我的去解决这个技术问题,遗憾的是当时没有找到解决方案,接下来全部微信端的接口测试和性能测试都没法进行,今天和你们分享下咱们的解决方案,但愿你们能够绕过微信的坑。javascript

 

业务场景

我这里以JMeter来举例,咱们能够经过在JMeter上开启代理,手机上设置代理来录制微信端的请求,如下为在微信端的业务对应生成的脚本:css

 

 

录制完成后,咱们进行回放,你会发如今查看结果树中,会重定向到微信受权,接着就开始提示:请在微信客户端打开连接。java

 

 

这里补充几个录制的小技巧

 


一、每一个组放入一个新的控制器:在手机端上作的一次操做所产生的请求会被放在一个控制器中,很是方便;
二、选中记录HTTP信息头、添加断言、Regex matching :自动添加信息头和断言;android

 

问题分析

这里咱们看一下请在微信客户端打开连接页面对应的代码:微信

<script type="text/javascript"> var ua = navigator.userAgent.toLowerCase(); var isWeixin = ua.indexOf('micromessenger') != -1; var isAndroid = ua.indexOf('android') != -1; var isIos = (ua.indexOf('iphone') != -1) || (ua.indexOf('ipad') != -1); if (!isWeixin) { document.head.innerHTML = '<title>抱歉,出错了</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0"><link rel="stylesheet" type="text/css" href="https://res.wx.qq.com/open/libs/weui/0.4.1/weui.css">'; document.body.innerHTML = '<div class="weui_msg"><div class="weui_icon_area"><i class="weui_icon_info weui_icon_msg"></i></div><div class="weui_text_area"><h4 class="weui_msg_title">请在微信客户端打开连接</h4></div></div>'; } </script> 

重点看:微信开发

var ua = navigator.userAgent.toLowerCase(); var isWeixin = ua.indexOf('micromessenger') != -1; 

说明微信的这个提示是经过判断userAgent中是否包含micromessenger确认是否从微信中打开。
好了,咱们查看如下HTTP头中的userAgent:iphone

 

 

录制的时候自动添加了录制HTTP请求头的,那么为何在JMeter打开会仍然会提示呢?这里怀疑是微信故意留的坑或者是微信开发这个页面的人英语四级没过。性能

解决方案

通过和咱们程序猿哥哥陈丹明陈建清一番讨论,一开始没有解决方案;此时丹明怀疑MicroMessenger这个单词写错了,应该是:micromessage!一试,果真!
好吧,程序猿你赢了,看来懂英语是多么的重要。测试

最终解决

在HTTP请求头里面将MicroMessenger修改为 micromessageui

 

 

小结

一、请在微信客户端打开连接 这个问题困扰了咱们好久,今天总算解决,完美解决;二、感谢程序猿的大胆怀疑,给他们点赞;三、自动化测试过程当中若是遇见了技术瓶颈,不妨多和研发沟通,他们总能给你一些指导。

相关文章
相关标签/搜索