2017年1月9號(hào)微信小程序正式上線,小程序無(wú)須安裝就能使用,依托微信強(qiáng)大的生態(tài)環(huán)境,能做到很多H5所不能做的事情。目前轉(zhuǎn)轉(zhuǎn)已有小程序11個(gè),但對(duì)于小程序如何做測(cè)試,依然沒(méi)有一個(gè)相應(yīng)完整的操作文檔。這里將從四個(gè)方面簡(jiǎn)單介紹如何對(duì)小程序進(jìn)行測(cè)試。
小程序發(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ù)。
服務(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ù)通知詳情戳一戳https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html
基礎(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è)面拿到。
更多
https://mp.weixin.qq.com/debug/wxadoc/dev/framework/client-lib.html
開(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ū)別如下:
(1)?權(quán)限層:前兩者需申請(qǐng)開(kāi)發(fā)者和體驗(yàn)者權(quán)限才可使用,后者則面向所有用戶。
(2)?性能層:開(kāi)發(fā)版和體驗(yàn)版自身帶有vConsole性能面板(回歸需關(guān)閉此功能),而線上版則木有。
(3) 代碼層:開(kāi)發(fā)人員可同時(shí)在多個(gè)開(kāi)發(fā)版上開(kāi)發(fā)互不影響;體驗(yàn)版當(dāng)前只能有一份代碼處于審核中,審核通過(guò)后可發(fā)布上線,也可直接重新提交審核,覆蓋原審核版本;線上版本則為所有用戶使用的代碼版本,該版本代碼在新版本代碼發(fā)布后被覆蓋更新。
(4)?包大?。洪_(kāi)發(fā)版本不限制包大?。惑w驗(yàn)者&正式版則限制包大小。
(5)?二維碼:體驗(yàn)版保持不變,開(kāi)發(fā)版30min后失效需重新生成。
緩存機(jī)制
為了保證小程序的快速訪問(wèn)和用戶體驗(yàn),微信會(huì)緩存小程序,包括小程序文件、授權(quán)數(shù)據(jù)、登錄數(shù)據(jù)等。
使用小程序常碰到緩存問(wèn)題,例如切換環(huán)境(線上線下互切)、cookie、發(fā)版、登陸等,簡(jiǎn)單粗暴的方法就是將小程序刪掉重新進(jìn)入即可。更多緩存可查看https://mp.weixin.qq.com/debug/wxadoc/dev/api/data.html
小程序啟動(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卻是一樣的。
前期準(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)注緩存情況:
(1)微信給每個(gè)小程序提供了10MB的本地緩存。
(2)頁(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)題;
(3)對(duì)于賬號(hào)切換、版本發(fā)布等帶來(lái)的緩存,目前解決方法是簡(jiǎn)單粗暴的將小程序刪掉,重新進(jìn)入生效;
(4)還可從代碼層面解決緩存問(wèn)題:清除當(dāng)前存儲(chǔ)到storage里的內(nèi)容,如cookie信息,主要調(diào)用wx.clearStorageSync();從基礎(chǔ)庫(kù)1.9.90開(kāi)始,小程序支持自動(dòng)更新上線代碼,接口為wx.getUpdateManager()。
分享功能測(cè)試
(1)分享到好友列表&生成海報(bào)頁(yè)分享到朋友圈;
(2)用線上/測(cè)試/開(kāi)發(fā)版分享給好友,落地頁(yè)就是相應(yīng)的線上/測(cè)試/開(kāi)發(fā)版
(3)朋友圈識(shí)別跳轉(zhuǎn)都是線上版;所以在測(cè)試過(guò)程中若涉及到掃碼跳轉(zhuǎn),就需借助【小程序碼測(cè)試工具】。
服務(wù)通知:
(1)以模板ID的形式推送服務(wù)通知;
(2)微信公眾號(hào):需關(guān)注公眾號(hào)&無(wú)須收集formId;小程序服務(wù)通知:收集formId;
(3)formId有效期7d,如果用戶沒(méi)有可用的formId,則無(wú)法給用戶推送相應(yīng)消息;
(4)通過(guò)點(diǎn)擊操作單個(gè)/批量收集formId,主要存儲(chǔ)在wtable,觸發(fā)行為如支付、提交表單等
https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html
(5)批量收集formId:如zzwxpush/addFormIds
(6)單個(gè)收集formId:如zzwxpush/addFormId?formId
(7)每個(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í):
(1)M頁(yè)、toast、彈窗等不受限于層級(jí)問(wèn)題;
(2)小程序原生頁(yè)面超過(guò)10層后不能再打開(kāi)新頁(yè)面,正常業(yè)務(wù)流程或閉環(huán)容易造成10層問(wèn)題,例如個(gè)人中心--》商品列表頁(yè)--》個(gè)人中心……
(3)解決方法【層級(jí)策略】:將頁(yè)面鏈接存儲(chǔ)到storage,返回時(shí)則刷新拉取存儲(chǔ)的頁(yè)面鏈接。目前只保存頁(yè)面路徑,不保存頁(yè)面數(shù)據(jù)。
兼容:
(1)微信版本:小程序的接口完全依賴于微信,因此部分基礎(chǔ)庫(kù)較高的接口可能在低版本的微信上不生效,需做兼容,如:頁(yè)面內(nèi)分享是基于1.2.0的基礎(chǔ)庫(kù)開(kāi)發(fā),因此要求對(duì)應(yīng)微信版本在6.5.8及以上;
(2)不同機(jī)型:如某頁(yè)面在華為機(jī)型展示沒(méi)問(wèn)題,但到小米機(jī)型卻展示有問(wèn)題;
(3)手機(jī)系統(tǒng):Android和ios兩個(gè)版本兼容性可能不同;如個(gè)人主頁(yè)中【安卓和ios】評(píng)價(jià)樣式有問(wèn)題。
埋點(diǎn):
(1)埋點(diǎn)測(cè)試大致和端內(nèi)測(cè)試流程一樣,關(guān)注actiontype&pagetype等參數(shù);
(2)小程序統(tǒng)計(jì)常需區(qū)分用戶來(lái)源渠道,因此還需關(guān)注【backup】中的channel,pagechannel,type等參數(shù)。
(3)appid:主要存儲(chǔ)小程序source參數(shù)值。
(4)scene:場(chǎng)景值
https://mp.weixin.qq.com/debug/wxadoc/dev/framework/app-
service/scene.html
(5)channel:只對(duì)小程序入口頁(yè)生效,會(huì)伴隨整個(gè)生命周期,直到退出小程序。如果沒(méi)有明確的參數(shù)值,則默認(rèn)為none。
(6)pagechannel:針對(duì)頁(yè)面url參數(shù),只帶到落地頁(yè),不會(huì)帶到后續(xù)頁(yè)面。如果沒(méi)有明確的參數(shù)值,則默認(rèn)為none。
(7)type:目前用在詳情頁(yè),主要用于區(qū)分此商品是個(gè)人mine/圈子group/他人normal。
(8)根據(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)
兼容性
緩存
測(cè)試微信側(cè)消息時(shí),由于線上訪問(wèn)和線下訪問(wèn)的賬號(hào)是不通的,所以需要把線上數(shù)據(jù)寫(xiě)到線下,比如線上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ù)制黏貼到線下用戶中,步驟如下。
(1)線上uid查詢線上user庫(kù)user_auth表獲取用戶source=26的unionid和openid;
(2)在線下uid的user庫(kù)user_auth表添加上述source=26的記錄。
(3)同時(shí)線下push庫(kù)wechat_user_map表添加相應(yīng)的unionid和openid,此時(shí)測(cè)試公眾號(hào)就能通了。
(4)若出現(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接口多次,嘗試給用戶下發(fā)通知;若達(dá)到嘗試次數(shù)上限依舊失敗,則下發(fā)不成功。
消息模板跳轉(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:xxxx
小程序碼測(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ù);