2017年1月9號(hào)微信小程序正式上線焰望,小程序無(wú)須安裝就能使用陨帆,依托微信強(qiáng)大的生態(tài)環(huán)境曲秉,能做到很多H5所不能做的事情。
但對(duì)于小程序如何做測(cè)試疲牵,依然沒(méi)有一個(gè)相應(yīng)完整的操作文檔承二。這里將從四個(gè)方面簡(jiǎn)單介紹如何對(duì)小程序進(jìn)行測(cè)試。
小程序相關(guān)介紹
在測(cè)試前纲爸,先簡(jiǎn)單理解下小程序特性亥鸠。
- 小程序發(fā)布審核
- 發(fā)布前需申請(qǐng)外網(wǎng)域名,并在微信web開(kāi)發(fā)者工具里找到項(xiàng)目,設(shè)置好服務(wù)器的域名负蚊。
- 開(kāi)發(fā)完上傳代碼后神妹,在微信公眾平臺(tái)—》登錄小程序管理后臺(tái)—》點(diǎn)擊開(kāi)發(fā)管理—》點(diǎn)擊提交版本審核即可。
- 審核通過(guò)后會(huì)有相應(yīng)提示家妆,接著把審核通過(guò)的小程序發(fā)布線上鸵荠;若未審核通過(guò)可做相應(yīng)修改繼續(xù)提審。
- 第一次提交小程序?qū)徍藭r(shí)伤极,需先上線后端蛹找,一般第一次審核時(shí)間比較久(3d左右)。
- 小程序的限制
- 頁(yè)面層級(jí)跳轉(zhuǎn)不能超過(guò)10層哨坪。
- 用戶本地緩存不能超過(guò)10MB庸疾。
- 小程序代碼包不能超過(guò)3M,所以部分圖片資源需上傳CDN当编。
- 小程序發(fā)布需提交微信審核通過(guò)才可發(fā)版彼硫。
- 提交審核前,外網(wǎng)域名需申請(qǐng)(除微信域名之外)凌箕。
- 層級(jí)問(wèn)題
- 小程序原生頁(yè)面存在10層限制問(wèn)題,即超過(guò)10層時(shí)便無(wú)法打開(kāi)新頁(yè)面词渤,而業(yè)務(wù)流程或者訪問(wèn)形成閉環(huán)時(shí)牵舱,很容易陷入10層問(wèn)題。
- 為避免層級(jí)限制導(dǎo)致的無(wú)法打開(kāi)頁(yè)面和層級(jí)限制帶來(lái)的交互路徑限制缺虐,內(nèi)部提出了【層級(jí)策略】以解決層級(jí)限制問(wèn)題芜壁。
- 【層級(jí)策略】將頁(yè)面路徑存儲(chǔ)到storage,返回時(shí)則刷新拉取存儲(chǔ)的頁(yè)面路徑高氮,目前只保存頁(yè)面路徑慧妄,不保存表單等數(shù)據(jù)。具體解決方案見(jiàn)文檔“層級(jí)策略.txt”剪芍。
- 服務(wù)通知
- 基于微信的通知渠道塞淹,為開(kāi)發(fā)者提供了可以高效觸達(dá)用戶的模板消息能力,以便實(shí)現(xiàn)服務(wù)的閉環(huán)并提供更佳的體驗(yàn)罪裹。
- 模板推送位置:服務(wù)通知饱普。模板下發(fā)條件:用戶本人在微信體系內(nèi)與頁(yè)面有交互行為后觸發(fā)。模板跳轉(zhuǎn)能力:點(diǎn)擊查看詳情僅能跳轉(zhuǎn)下發(fā)模板的該帳號(hào)的各個(gè)頁(yè)面状共。
- 小程序給用戶推送服務(wù)通知套耕,依賴用戶的formId。
- 更多服務(wù)通知詳情戳一戳小程序官方文檔
- 基礎(chǔ)庫(kù)版本
- 小程序的能力需要微信客戶端來(lái)支撐峡继,每一個(gè)基礎(chǔ)庫(kù)都只能在對(duì)應(yīng)的客戶端版本上運(yùn)行冯袍,高版本的基礎(chǔ)庫(kù)對(duì)應(yīng)的api不支持低版本,所以在使用這些新能力的時(shí)候需要做兼容。
- 由于微信版本和基礎(chǔ)庫(kù)版本不是一一對(duì)應(yīng)關(guān)系康愤,且小程序api是基于各個(gè)基礎(chǔ)庫(kù)版本進(jìn)行發(fā)布的儡循,所以在測(cè)試過(guò)程中需要提前獲悉當(dāng)前基礎(chǔ)庫(kù)版本號(hào)。
- 目前可在zeye后臺(tái)查看基于轉(zhuǎn)轉(zhuǎn)用戶使用的基礎(chǔ)庫(kù)翘瓮、微信版本贮折、手機(jī)型號(hào)覆蓋率等數(shù)據(jù)。
- 目前我們主要通過(guò)日志的方式自動(dòng)獲取到版本號(hào)资盅,可通過(guò)兩種途徑拿到:1.體驗(yàn)版進(jìn)入首頁(yè)時(shí)通過(guò)console查到调榄;2.通過(guò)我的功能頁(yè)面拿到。
- 更多可查看此小程序官方文檔
- 開(kāi)發(fā)版呵扛、體驗(yàn)版每庆、線上版
小程序并不像服務(wù)端那樣區(qū)別線上和線下版本,而是有開(kāi)發(fā)版今穿、體驗(yàn)版缤灵、線上版。
如果只是開(kāi)發(fā)后端邏輯功能蓝晒,可在三個(gè)版本中任意一個(gè)進(jìn)行測(cè)試腮出;如果是開(kāi)發(fā)前端功能則需在相應(yīng)的開(kāi)發(fā)版/測(cè)試版進(jìn)行測(cè)試。
-
三者具體區(qū)別如下:
- 權(quán)限層:前兩者需申請(qǐng)開(kāi)發(fā)者和體驗(yàn)者權(quán)限才可使用芝薇,后者則面向所有用戶胚嘲。
性能層:開(kāi)發(fā)版和體驗(yàn)版自身帶有vConsole性能面板(回歸需關(guān)閉此功能),而線上版則木有洛二。 - 代碼層:開(kāi)發(fā)人員可同時(shí)在多個(gè)開(kāi)發(fā)版上開(kāi)發(fā)互不影響馋劈;體驗(yàn)版當(dāng)前只能有一份代碼處于審核中,審核通過(guò)后可發(fā)布上線晾嘶,也可直接重新提交審核妓雾,覆蓋原審核版本;線上版本則為所有用戶使用的代碼版本垒迂,該版本代碼在新版本代碼發(fā)布后被覆蓋更新械姻。
包大小:開(kāi)發(fā)版本不限制包大谢稀策添;體驗(yàn)者&正式版則限制包大小。 - 二維碼:體驗(yàn)版保持不變毫缆,開(kāi)發(fā)版30min后失效需重新生成唯竹。
- 權(quán)限層:前兩者需申請(qǐng)開(kāi)發(fā)者和體驗(yàn)者權(quán)限才可使用芝薇,后者則面向所有用戶胚嘲。
- 緩存機(jī)制
為了保證小程序的快速訪問(wèn)和用戶體驗(yàn),微信會(huì)緩存小程序苦丁,包括小程序文件浸颓、授權(quán)數(shù)據(jù)、登錄數(shù)據(jù)等。
使用小程序常碰到緩存問(wèn)題产上,例如切換環(huán)境(線上線下互切)棵磷、cookie、發(fā)版晋涣、登陸等仪媒,簡(jiǎn)單粗暴的方法就是將小程序刪掉重新進(jìn)入即可。
-
小程序啟動(dòng)機(jī)制主要為“冷啟動(dòng)”&“熱啟動(dòng)”.
- 同一手機(jī)谢鹊,不同小程序應(yīng)用算吩,至少在邏輯存儲(chǔ)上肯定不是共享緩存,滿足應(yīng)用級(jí)別隔離佃扼。
- 同一手機(jī)偎巢,同一個(gè)小程序,不同微信用戶掃碼使用兼耀,經(jīng)測(cè)試压昼,也不共享緩存,目前測(cè)試條件下瘤运,是用戶級(jí)別隔離窍霞。
- 同一手機(jī),同一個(gè)小程序拯坟,同一微信用戶兩次掃碼使用官撼,經(jīng)測(cè)試,是共享緩存似谁。
- 同一手機(jī),同一個(gè)小程序掠哥,不同微信用戶切換使用(分別掃碼兩次)巩踏,經(jīng)測(cè)試,同一個(gè)用戶共享緩存续搀,不同用戶間不共享緩存塞琼。
-
海報(bào)頁(yè)
- 可生成定制的海報(bào)頁(yè),用于分享朋友圈禁舷。
- 任何版本生成的海報(bào)頁(yè)彪杉,掃碼都跳轉(zhuǎn)到正式版落地頁(yè),可借助【小程序碼測(cè)試工具】跳轉(zhuǎn)相應(yīng)頁(yè)面牵咙。
- 二維碼數(shù)據(jù)和圖片為動(dòng)態(tài)生成過(guò)程派近,不像那種固定圖片的可以預(yù)加載。
- 微信openId和UnionID區(qū)別
- 同一公司下多個(gè)公眾號(hào)之間需要用戶帳號(hào)互通洁桌,微信開(kāi)放平臺(tái)提供了UnionID機(jī)制渴丸。
- 通過(guò)獲取用戶基本信息接口,開(kāi)發(fā)者可通過(guò)OpenID來(lái)獲取用戶基本信息,而如果開(kāi)發(fā)者擁有多個(gè)公眾號(hào)谱轨,可通過(guò)UnionID在多公眾號(hào)之間進(jìn)行用戶帳號(hào)互通戒幔。
- 在不同的公眾賬號(hào)下OpenID是不一樣的,而他們的UnionID卻是一樣的土童。
- UnionId和uid是對(duì)應(yīng)關(guān)系诗茎;OpenId和sourceId是對(duì)應(yīng)關(guān)系。
小程序測(cè)試工作
- 前期準(zhǔn)備
- 微信版本號(hào)需在6.3.27及以上献汗,低于提示升級(jí)敢订。
- QA需申請(qǐng)對(duì)應(yīng)小程序體驗(yàn)者權(quán)限&開(kāi)發(fā)者權(quán)限。
- 小程序開(kāi)發(fā)版雀瓢、體驗(yàn)版枢析、正式版。
- 小程序AppID刃麸,項(xiàng)目地址&名字醒叁。
- 明確小程序本次測(cè)試入口&版本。
- 微信公眾號(hào)平臺(tái)發(fā)布的【小程序開(kāi)發(fā)助手】泊业, 可方便快捷的預(yù)覽和體驗(yàn)線上版本把沼,體驗(yàn)版本以及開(kāi)發(fā)版本。
- 測(cè)試點(diǎn)
- 授權(quán):目前已實(shí)現(xiàn)靜默授權(quán)吁伺,即用戶首次訪問(wèn)小程序饮睬,主動(dòng)獲取微信授權(quán),通過(guò)獲取openid篮奄,生成轉(zhuǎn)轉(zhuǎn)uid捆愁,并存儲(chǔ)昵稱、頭像等信息窟却。后續(xù)用戶若殺掉小程序重新進(jìn)入昼丑,無(wú)需重新授權(quán)。
- 功能:與端內(nèi)正常測(cè)試功能無(wú)異夸赫;
- 緩存:功能需求后菩帝,此時(shí)就需要關(guān)注緩存情況:
- 微信給每個(gè)小程序提供了10MB的本地緩存。
- 頁(yè)面切換時(shí)茬腿,可能會(huì)將上一個(gè)頁(yè)面的數(shù)據(jù)帶到下一個(gè)頁(yè)面展示呼奢,例如【主程序-紅包需求】點(diǎn)擊“未使用”先顯示正確文案—》點(diǎn)擊“已使用”或“已過(guò)期”—》點(diǎn)擊“未使用”,文案卻展示“已使用”和“未使用”的文案切平。此時(shí)可以給開(kāi)發(fā)人員提bug握础,通過(guò)代碼解決頁(yè)面緩存問(wèn)題;
- 對(duì)于賬號(hào)切換悴品、版本發(fā)布等帶來(lái)的緩存弓候,目前解決方法是簡(jiǎn)單粗暴的將小程序刪掉郎哭,重新進(jìn)入生效。
- 還可從代碼層面解決緩存問(wèn)題:1.清除當(dāng)前存儲(chǔ)到storage里的內(nèi)容菇存,如cookie信息夸研,主要調(diào)用wx.clearStorageSync();2.從基礎(chǔ)庫(kù)1.9.90開(kāi)始依鸥,小程序支持自動(dòng)更新上線代碼亥至,接口為wx.getUpdateManager()。
性能
- 分享功能測(cè)試
- 分享到好友列表&生成海報(bào)頁(yè)分享到朋友圈贱迟;
- 用線上/測(cè)試/開(kāi)發(fā)版分享給好友姐扮,落地頁(yè)就是相應(yīng)的線上/測(cè)試/開(kāi)發(fā)版;
- 朋友圈識(shí)別跳轉(zhuǎn)都是線上版衣吠;所以在測(cè)試過(guò)程中若涉及到掃碼跳轉(zhuǎn)茶敏,就需借助【小程序碼測(cè)試工具】。
- 服務(wù)通知:
以模板ID的形式推送服務(wù)通知缚俏;
微信公眾號(hào):需關(guān)注公眾號(hào)&無(wú)須收集formId惊搏;小程序服務(wù)通知:收集formId;
formId有效期7d忧换,如果用戶沒(méi)有可用的formId恬惯,則無(wú)法給用戶推送相應(yīng)消息;
通過(guò)點(diǎn)擊操作單個(gè)/批量收集formId亚茬,主要存儲(chǔ)在wtable酪耳,觸發(fā)行為如支付、提交表單等刹缝;詳情戳一戳它https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html
批量收集formId:POST請(qǐng)求碗暗,如zzwxpush/addFormIds
單個(gè)收集formId:GET請(qǐng)求,如zzwxpush/addFormId?formId
-
每個(gè)小程序收集的formId梢夯,只能用于對(duì)應(yīng)的小程序言疗,也只能用于對(duì)應(yīng)的uid。例如閑置社108批量收集formId厨疙,卻存儲(chǔ)在小程序103,結(jié)果導(dǎo)致閑置社批量formId失敗疑务,而且小程序存儲(chǔ)很多無(wú)效可用的formId沾凄,主要原因是由于前端傳入?yún)?shù)source=103導(dǎo)致。
- 常出現(xiàn)問(wèn)題:formId無(wú)效(命中小程序自身策略)知允、無(wú)可用formId(需收集)撒蟀。
- 層級(jí):
- M頁(yè)、toast温鸽、彈窗等不受限于層級(jí)問(wèn)題保屯;
- 小程序原生頁(yè)面超過(guò)10層后不能再打開(kāi)新頁(yè)面手负,正常業(yè)務(wù)流程或閉環(huán)容易造成10層問(wèn)題,例如個(gè)人中心--》商品列表頁(yè)--》個(gè)人中心……
- 解決方法【層級(jí)策略】:將頁(yè)面鏈接存儲(chǔ)到storage姑尺,返回時(shí)則刷新拉取存儲(chǔ)的頁(yè)面鏈接竟终。目前只保存頁(yè)面路徑,不保存頁(yè)面數(shù)據(jù)切蟋。
- 兼容:
- 微信版本:小程序的接口完全依賴于微信统捶,因此部分基礎(chǔ)庫(kù)較高的接口可能在低版本的微信上不生效,需做兼容柄粹,如:頁(yè)面內(nèi)分享是基于1.2.0的基礎(chǔ)庫(kù)開(kāi)發(fā)喘鸟,因此要求對(duì)應(yīng)微信版本在6.5.8及以上;
- 不同機(jī)型:如某頁(yè)面在華為機(jī)型展示沒(méi)問(wèn)題驻右,但到小米機(jī)型卻展示有問(wèn)題什黑;
- 手機(jī)系統(tǒng):Android和ios兩個(gè)版本兼容性可能不同;如個(gè)人主頁(yè)中【安卓和ios】評(píng)價(jià)樣式有問(wèn)題堪夭。
- 埋點(diǎn):
- 埋點(diǎn)測(cè)試大致和端內(nèi)測(cè)試流程一樣愕把,關(guān)注actiontype&pagetype等參數(shù);
- 小程序統(tǒng)計(jì)常需區(qū)分用戶來(lái)源渠道茵瘾,因此還需關(guān)注【backup】中的channel礼华,+ pagechannel,type等參數(shù)拗秘。
- appid:主要存儲(chǔ)小程序source參數(shù)值圣絮。
- scene:場(chǎng)景值
- channel:只對(duì)小程序入口頁(yè)生效,會(huì)伴隨整個(gè)生命周期雕旨,直到退出小程序扮匠。如果沒(méi)有明確的參數(shù)值,則默認(rèn)為none凡涩。
- pagechannel:針對(duì)頁(yè)面url參數(shù)棒搜,只帶到落地頁(yè),不會(huì)帶到后續(xù)頁(yè)面活箕。如果沒(méi)有明確的參數(shù)值力麸,則默認(rèn)為none。
- type:目前用在詳情頁(yè)育韩,主要用于區(qū)分此商品是個(gè)人mine/圈子group/他人normal克蚂。
- 根據(jù)PM需求還可以增加相應(yīng)渠道參數(shù)。
- 內(nèi)嵌M頁(yè):
1.6.4版本開(kāi)始陸續(xù)支持小程序內(nèi)嵌M頁(yè)筋讨。
M頁(yè)不受限于小程序的層級(jí)頁(yè)面埃叭,如【游戲M頁(yè)】點(diǎn)擊首頁(yè)—》游戲頻道為1層頁(yè)面,而不是2層頁(yè)面悉罕。
測(cè)試M頁(yè)需做相應(yīng)的適配赤屋,以在小程序能夠正常使用立镶,如登陸等。若M頁(yè)嵌入native頁(yè)面类早,則還需要額外做native頁(yè)面交互的適配媚媒。如【游戲—我的拼團(tuán)】沒(méi)做適配,則提示此錯(cuò)誤莺奔。
M測(cè)重點(diǎn)關(guān)注頁(yè)面跳轉(zhuǎn)功能欣范,展示等問(wèn)題。
- 測(cè)試坑點(diǎn) 小程序測(cè)試過(guò)程中經(jīng)常碰到的坑令哟,重點(diǎn)需關(guān)注:
層級(jí)頁(yè)面跳轉(zhuǎn)
兼容性
緩存
常見(jiàn)問(wèn)題定位&解決
測(cè)試微信側(cè)消息時(shí)恼琼,由于線上訪問(wèn)和線下訪問(wèn)的賬號(hào)是不通的,所以需要把線上數(shù)據(jù)寫到線下屏富,比如線上uid=1 線下uid=2晴竞,需要把線上uid=1 的信息,同步到線下uid=2的記錄中狠半,才能訪問(wèn)成功噩死。
- 線下測(cè)公眾號(hào)消息報(bào)“未關(guān)注公眾號(hào)”
原因:由于微信公眾號(hào)對(duì)于我們而言只有線上,并無(wú)所謂線下一套的說(shuō)法神年,從而導(dǎo)致在線下測(cè)公眾號(hào)消息的時(shí)候會(huì)打出“未關(guān)注公眾號(hào)”日志已维,從而測(cè)不通。
解決:將線上相應(yīng)用戶的unionid和openid復(fù)制黏貼到線下用戶中已日,步驟如下垛耳。
線上uid查詢線上user庫(kù)user_auth表獲取用戶source=26的unionid和openid;在線下uid的user庫(kù)user_auth表添加上述source=26的記錄飘千。
同時(shí)線下push庫(kù)wechat_user_map表添加相應(yīng)的unionid和openid堂鲜,此時(shí)測(cè)試公眾號(hào)就能通了。
若出現(xiàn)openid hint/unionid hint等錯(cuò)誤护奈,則說(shuō)明同步的openid/unionid有問(wèn)題缔莲,需要重新線上確認(rèn)同步到線下。
- 報(bào)錯(cuò)“用戶未授權(quán)”
- 原因:在線下測(cè)試時(shí)霉旗,由于操作不規(guī)范痴奏,經(jīng)常會(huì)出現(xiàn)“用戶未授權(quán)”的情況。如下錯(cuò)誤展示厌秒,查詢dbwww58com_user庫(kù) user_auth表读拆,發(fā)現(xiàn)不存在對(duì)應(yīng)小程序端的uid,即日志source=103简僧,但庫(kù)source=108 建椰,兩個(gè)source對(duì)不上雕欺。
- 解決:將user_auth同步線上source=103即可岛马。
- formid錯(cuò)誤匯總
- 測(cè)微信服務(wù)通知時(shí)棉姐,經(jīng)常出現(xiàn)formid以下錯(cuò)誤提示。
formid過(guò)期(有效期7d)&收集格式錯(cuò)誤導(dǎo)致(格式為時(shí)間戳/字母+數(shù)字組成的32位)啦逆。
當(dāng)前用戶沒(méi)有formid導(dǎo)致伞矩。
formid已使用導(dǎo)致,主要是同一時(shí)間可能多個(gè)用戶收集formid夏志,從而形成的formid可能一樣乃坤。
-
相應(yīng)form錯(cuò)誤碼說(shuō)明如下:
明確每個(gè)小程序收集的formId,只能用于對(duì)應(yīng)的小程序沟蔑,也只能用于對(duì)應(yīng)的uid湿诊。
目前發(fā)服務(wù)通知時(shí),為防止用戶下發(fā)失敗瘦材,會(huì)重復(fù)調(diào)用formId接口3次厅须,若3次下發(fā)都失敗,則以公眾號(hào)的形式下發(fā)服務(wù)通知(目前下發(fā)成功率達(dá)到98%)食棕。
- 消息模板跳轉(zhuǎn)鏈接錯(cuò)誤
出現(xiàn)這種錯(cuò)誤朗和,首先需要確認(rèn)url是否解析成小程序可跳轉(zhuǎn)的鏈接;若已解析簿晓,則是小程序這個(gè)頁(yè)面還沒(méi)上線導(dǎo)致微信檢索不到此鏈接導(dǎo)致眶拉。
page路徑配置錯(cuò)誤,重配即可憔儿。
工具篇
為了方便小程序測(cè)試忆植,已開(kāi)發(fā)了入口構(gòu)造工具&小程序碼測(cè)試工具。
入口構(gòu)造工具
用于m頁(yè)皿曲,以及小程序url頁(yè)面入口跳轉(zhuǎn)唱逢,若測(cè)渠道埋點(diǎn),可額外添加參數(shù)值channel屋休;
填入url參數(shù)格式:pages/webview/webview?url=https:xxxxx
小程序碼測(cè)試工具
開(kāi)發(fā)過(guò)程中坞古,涉及到掃描小程序碼會(huì)跳轉(zhuǎn)到線上版小程序,導(dǎo)致測(cè)試過(guò)程無(wú)法檢測(cè)掃碼跳轉(zhuǎn)是否正確劫樟。如【首頁(yè)改版V2-商品詳情頁(yè)小浮層】若直接識(shí)別小程序痪枫,則落地頁(yè)為線上版小程序而不是相應(yīng)的開(kāi)發(fā)/測(cè)試版本,導(dǎo)致沒(méi)調(diào)用到“商品詳情頁(yè)浮層”接口productDetailLayer
此工具主要是方便通過(guò)掃碼跳轉(zhuǎn)相應(yīng)的版本叠艳,檢查未上線時(shí)參數(shù)是否正確奶陈。 -【查看二維碼】掃碼查看相應(yīng)的鏈接參數(shù);
【打開(kāi)二維碼】掃碼跳轉(zhuǎn)相應(yīng)的版本頁(yè)面附较;
【測(cè)渠道埋點(diǎn)】掃碼分享獲取到相應(yīng)的渠道參數(shù)吃粒;