1. 程式人生 > >模擬微信接口時,提示“請在微信客戶端打開鏈接”(轉)

模擬微信接口時,提示“請在微信客戶端打開鏈接”(轉)

我們 ima tex 點贊 nav 一次 mbo 請求 現在

背景描述

技術分享圖片


相信有模擬微信頁面請求的測試都有看到過這個頁面,簡單點說就是爬蟲爬微信頁面,進行回放的時候會出現這個頁面。大概在1年前,專門安排了一個人去解決這個技術問題,遺憾的是當時沒有找到解決方案,接下來所有微信端的接口測試和性能測試都無法進行,今天和大家分享下我們的解決方案,希望大家可以繞過微信的坑。

業務場景

我這裏以JMeter來舉例,我們可以通過在JMeter上開啟代理,手機上設置代理來錄制微信端的請求,以下為在微信端的業務對應生成的腳本:

技術分享圖片

錄制完成後,我們進行回放,你會發現在查看結果樹中,會重定向到微信授權,接著就開始提示:請在微信客戶端打開鏈接。

技術分享圖片

這裏補充幾個錄制的小技巧

技術分享圖片


1、每個組放入一個新的控制器:在手機端上做的一次操作所產生的請求會被放在一個控制器中,非常方便;
2、選中記錄HTTP信息頭、添加斷言、Regex matching :自動添加信息頭和斷言;

問題分析

這裏我們看一下請在微信客戶端打開鏈接頁面對應的代碼:

<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:

技術分享圖片

錄制的時候自動添加了錄制HTTP請求頭的,那麽為什麽在JMeter打開會仍然會提示呢?這裏懷疑是微信故意留的坑或者是微信開發這個頁面的人英語四級沒過。

解決方案

經過和我們程序猿哥哥陳丹明陳建清一番討論,一開始沒有解決方案;此時丹明

懷疑MicroMessenger這個單詞寫錯了,應該是:micromessage!一試,果然!
好吧,程序猿你贏了,看來懂英語是多麽的重要。

最終解決

在HTTP請求頭裏面將MicroMessenger修改成 micromessage

技術分享圖片

小結

1、請在微信客戶端打開鏈接 這個問題困擾了我們很久,今天總算解決,完美解決;
2、感謝程序猿的大膽懷疑,給他們點贊;
3、自動化測試過程中如果碰見了技術瓶頸,不妨多和研發溝通,他們總能給你一些指導。

模擬微信接口時,提示“請在微信客戶端打開鏈接”(轉)