Das Miniprogramm, mit dem Sie beginnen, ist die offizielle Testdemo von WeChat. Ähnlich wie die Android-API-Demos zeigt das offizielle Miniprogramm auch die Verwendung verschiedener Steuerelemente und die Erweiterungsmöglichkeiten gängiger Schnittstellen. Nachdem Sie das WeChat-Konto des Entwicklers hinzugefügt haben, können Sie das WeChat-Applet öffnen, indem Sie den QR-Code scannen.
1. Miniprogramm-Laufzeitanalyse
1. Starten Sie zunächst WeChat und prüfen Sie, welche Prozesse ausgeführt werden sind da.
shell@HWNXT:/ $ ps | grep u0_a539 u0_a539 6688 533 1751392 84976 SyS_epoll_ 0000000000 S com.tencent.mm:push u0_a539 7593 533 2228476 252492 SyS_epoll_ 0000000000 S com.tencent.mm u0_a539 8047 533 1984672 854121 SyS_epoll_ 0000000000 S com.tencent.mm:tools u0_a539 8117 533 1770972 86280 SyS_epoll_ 0000000000 S com.tencent.mm:sandbox shell@HWNXT:/ $
Es gibt insgesamt vier Prozesse, die derzeit den WeChat-Bildschirm anzeigen. Dem Namen nach sollte es com.tencent.mm sein.
shell@HWNXT:/ $ dumpsys activity top | grep ACTIVITY ACTIVITY com.tencent.mm/.ui.LauncherUI 44c445f pid=7593
Überprüfen Sie den Befehl. Der aktuelle Top-Prozess ist 7593, was tatsächlich com.tencent.mm ist.
2. Als Nächstes werfen wir einen Blick auf die Prozessänderungen nach dem Start der offiziellen Demo des WeChat-Miniprogramms.
u0_a539 6688 533 1750852 84420 SyS_epoll_ 0000000000 S com.tencent.mm:push u0_a539 7593 533 2223164 272116 SyS_epoll_ 0000000000 S com.tencent.mm u0_a539 9853 533 2092872 117492 SyS_epoll_ 0000000000 S com.tencent.mm:tools u0_a539 9896 533 2351160 212336 SyS_epoll_ 0000000000 S com.tencent.mm:appbrand0 shell@HWNXT:/ $
Es gibt einen weiteren Prozess, com.tencent.mm:appbrand0. In welchem Prozess läuft das WeChat-Applet?
Sehen Sie sich den Top-Prozess an:
shell@HWNXT:/ $ dumpsys activity top | grep ACTIVITY ACTIVITY com.tencent.mm/.plugin.appbrand.ui.AppBrandUI 15a772 pid=9896 shell@HWNXT:/ $
Der aktuelle Top-Prozess ist 9896, was tatsächlich com.tencent.mm:appbrand0 ist.
Es ist ersichtlich, dass WeChat einen separaten Prozess für das Miniprogramm eröffnet hat, um die Ressourcen und Unabhängigkeit des Miniprogramms sicherzustellen.
3. Werden das WeChat-Applet und das Öffnen einer Webseite in WeChat durch dasselbe Modul implementiert?
Öffnen Sie eine Webseite in WeChat und überprüfen Sie dann den Prozess:
shell@HWNXT:/ $ ps | grep u0_a539 u0_a539 6688 533 1751212 86184 SyS_epoll_ 0000000000 S com.tencent.mm:push u0_a539 7593 533 2187672 263352 SyS_epoll_ 0000000000 S com.tencent.mm u0_a539 8047 533 2336360 224436 SyS_epoll_ 0000000000 S com.tencent.mm:tools
Der Prozess hat sich nicht geändert. Schauen Sie sich den oberen Prozess an:
shell@HWNXT:/ $ dumpsys activity top | grep ACTIVITY ACTIVITY com.tencent.mm/.plugin.webview.ui.tools.WebViewUI 1502038 pid=14685
Der Die Webseite befindet sich tatsächlich auf com .tencent.mm: wird im Tools-Prozess geöffnet und die Aktivitäten der beiden sind unterschiedlich. Das Applet ist .plugin.appbrand.ui.AppBrandUI und die Webseite ist .plugin.webview.ui .tools.WebViewUI.
Es scheint einen Unterschied zwischen einem WeChat-Applet und einer einfachen Webseite zu geben.
2. Die Bildschirmzusammensetzung des Miniprogramms
Verwenden Sie UIAutomator, um die Komponenten zu analysieren, aus denen der WeChat besteht Mini-Programmbildschirm
Durch die Analyse des Bildschirms mit UIAutomator haben wir festgestellt, dass die WeChat-Applet-Demo aus drei Teilen besteht: Top ActionBar und in der Mitte Tencents eigenes WebView. Dies sollte Tencents selbstentwickelter X5-Kern sein. Unten befindet sich eine untere Aktionsleiste, die den Inhaltsteil des Applets in X5 WebView anzeigt.
Es ist ersichtlich, dass die Seitenanzeige des WeChat-Applets die H5-Hybridanzeigelösung aus nativen Android-Steuerelementen und WebView verwendet, was einer sehr verbreiteten entspricht H5-Hybridanwendung auf dem Markt.
3. So führen Sie automatisierte Tests von WeChat-Miniprogrammen durch
Derzeit ist das Android-Framework für automatisierte Tests verfügbar Hauptsächlich in 6 Kategorien unterteilt:
Robolectric wird häufig in Unit-Tests verwendet. Der spezifische Implementierungsplan besteht darin, einen Satz Android-Code zu implementieren, der von der JVM ausgeführt werden kann Fangen Sie dann den Android-bezogenen Code ab, wenn der Unit-Test ausgeführt wird, gehen Sie zu ihrem Implementierungscode, um den aufrufenden Prozess auszuführen, und bereichern Sie viele erweiterte Schnittstellen basierend auf den Android-Standardklassen. Dies erleichtert den Unit-Test-Prozess tatsächlich erheblich. Aber für unsere Teststudenten, die sich auf die Funktionsebene konzentrieren, gibt es tatsächlich einige taube Krallen und die praktische Bedeutung ist nicht sehr groß.
Monkey ist ein Stabilitätstest-Tool, das mit dem Android-System geliefert wird. Viele Hersteller verwenden es auch als Stabilitäts-Akzeptanz-Messtool für integrierte Produkte Der Name lässt vermuten, dass ein Affe den Testprozess zur Bestimmung funktionaler Anwendungsfälle nicht abschließen kann. Warten wir leider, bis sich der Affe zu einem Menschen entwickelt.
UIAutomator ist eines der wenigen automatisierten Test-Frameworks, die offiziell von Android unterstützt werden. Die früheste veröffentlichte Version ist API Level 17. Als steuerungsbasiertes Automatisierungsframework verfügt UIAutomator über eine klare Benutzeroberfläche und ist einfach zu verwenden. Basierend auf UIAutomator wurde auch das berühmte Open-Source-Automatisierungsframework Appium entwickelt, das in der Branche einen sehr hohen Stellenwert hat. Voraussetzung für die Verwendung von UIAutomator ist jedoch, dass Sie UIAutomatorViewer verwenden können, um die Attributinformationen unserer Voroperationssteuerelemente anzuzeigen. Aus der obigen Analyse haben wir gesehen, dass der übergeordnete Container einiger Steuerelemente im Miniprogramm ist keine Standardstruktur und sollte der von Tencent selbst entwickelte X5-Kernel sein. Die Idee, Appium UIAutomator zum Ausführen der Automatisierung zu verwenden, wurde inzwischen aufgegeben.
Es gibt auch eine Android-Genotyp-Testlösung wie Instrumentation, die Sie in Betracht ziehen können. Das berühmte automatisierte Test-Framework von Robotium wurde hier geboren. Nach einiger Zeit wurde mir jedoch klar, dass Sie eine Produktquelle benötigen Code. Das Testprojekt wird normalerweise im selben Projektverzeichnis wie der Produktquellcode abgelegt. Die Frage ist also, wer mir den Quellcode von WeChat geben kann ? Hey, hey, kann mich jemand hören? !@#@%&^
In den frühen Tagen gab es eine automatisierte Testfunktion, die durch Eskalation und Injektion von Systemprivilegien erreicht wurde, wie z. B. Baidus Café und Alibabas Arthrun. Die meisten von ihnen kopierten das xposed-Architekturmodell und hatten es auch leistungsstarke Systemsteuerungsfunktionen. Aber wo sind diese Frameworks heute? Es stellt sich heraus, dass die Version 6.0 bisher fast unmöglich geworden ist, da sie für Android-Root immer schwieriger wird. Daher wurde die Wartung dieser Art von Open-Source-Framework um 2014 eingestellt andere Wege finden.
基于图像识别也有一些自动化测试框架,例如sikuli还有testin的自动化工具,然而小生之所以直接就把这类框架pass掉是因为这种测试脚本基本不具备扩展性,系统ui风格变更,想要做断言验证,以及日后用例维护等等,想都不敢想。
铁鞋踏破仍无路,靓女帅哥也踌躇啊,忽然间灵感一现,腾讯自家会不会有什么奇葩产品可用啊,知行合一谷歌百度,搜索腾讯自动化立马看到腾讯优测的介绍,到官网里翻了一下找到一款叫XTest的自动化测试工具,看到简介目前只支持Android平台,想想前面历程这般痛苦,还要啥自行车啊。于是乎赶忙下载了一套热气腾腾的XTest,安装完毕,一切准备就绪,关门,放XTest。在经过一番折腾后基本领悟了XTest的使用心法,下面我就从大家平时经常开展的性能测试走起。
一、录制脚本,加入循环等操作
使用XTest录制从体验上确实简单便捷,简单到不用插线不用PC,可以躺着录走着录,即使撩妹都不耽误测试,跟平时操作App无异。对比早期录制脚本又抓控件又摸路径受的罪,幸福感大增。录制很容易上手,就是在录制模式下,按照case跑一遍就OK了,脚本自动生成,这里不做赘述,为了让测试更加充分,我又徒手一口气在复杂路径加了50个循环。真的是徒手,因为就是用手机端的脚本编辑功能就实现了。
二、开始回放查看结果
搞定脚本后可进行本地回放或多机联测,由于是基于控件的录制技术,所以回放过程比较顺利。测试结束后在手机/sdcard/kat/result路径下会生成kat_Performance.csv文件,这就是测试过程的性能数据了,具体信息如下:
性能数据比较中规中矩,内存,cpu,电池温度,流量,帧率数据都有,页面切换滑动点击均无丢帧现象(不过这也可能跟XTest脚本回放速度比较慢有关,这点是这款工具目前看来一个比较让人吐槽的点)。
仅此结果就能满足小生的欲望么?那是绝对不可能的,没有设备耗电信息怎么能算是一个完整的性能测试呢。
三、导出脚本,追加耗电信息输出
通过前期学习,了解到XTest可以导出脚本进行二次编辑并且支持130多个API作为复杂测试任务的扩展,长话短说我将录制的脚本导出到sublime编辑器,加入电量测试代码(自定义的代码,写的不完美不欢迎吐槽)(o^^o)
1.脚本开头加入电池数据清空代码
-- 电池数据清空
shell('dumpsys batterystats --reset && echo True')
2.脚本结束将电量信息输出到logcat
--输出耗电结果 shell("dumpsys batterystats > /sdcard/kat/Result/batterystats.txt && echo True") --读取txt文件的代码 local f = io.open('/sdcard/kat/Result/batterystats.txt', 'r') for line in f:lines() do print(line) shell('log -p i -t getbatterystats "' .. line .. '" && echo True') end f:close()
3.重新启动测试,测试完成后到logcat日志中收割电量测试结果,目标文件就在/sdcard/kat/result目录下(logcat.txt)如下:
好吧,看起来也都正常,我只是想说嗯这个也可以测,因为这个xtest可以摆脱usb线束缚无线回放脚本,这样才能获取到较为精准的电量信息。当然,希望今后类似的专项测试也能有个好的报表展现方式。
PS:注意这是耗电测试,所以充电压脉带,也正是XTest这种可无线测试的自动化引擎,才能方便搞定之前需要频繁插拔usb线才能完成的测试任务。
一、小程序分析
弄完了性能测试,我们切回主题,搞一下小程序,着手开展小程序UI自动化前,我们需要关注一下XTest是否可以轻松撸到小程序的控件
1、小程序的Hybrid控件
小程序对当前已支持的组件给出了演示程序,首先看下这些控件的真面目
使用XTest辅助工具对控件抓取可知,在X5 WebView内,控件也是如Android原生控件一样具有属性字段的。
E/Kat: setString=={name:SPAN,type:notFound,X:99,Y:777,X2:171,Y2:831🎜>E/Kat: name = SPAN;type=notFound; label=text;x=99 y=777 x2=171 y2 = 831
E/Kat: top-result:168,1016,[99,990,72,54],-2,top=[SPAN,text], valid=[SPAN,text],30000000,0,0,weight=0
Nach dem oben genannten Testprozess von flach zu tief und von tief zu Ekstase ist das scheinbar seltsame und mysteriöse kleine Programm in den Augen unserer Testingenieure so vertraut und intim geworden. Von der Leistungsdatenerfassung, dem speziellen Testlayout über gemeinsame Tests auf mehreren Maschinen und die Verteilung auf mehrere Konten bis hin zur endgültigen Anzeige umfangreicher Berichtsergebnisse scheint XTest für Miniprogramme bereit zu sein. Ist das alles Gottes Wille oder ein Zufall? Oder einfach gesagt, Tencent hat uns bereits eine vollständige Situation dargelegt. Diese hirnverbrennende Spannung hat die Menge an Berechnungen, die die Single-Core-CPU des Editors bewältigen kann, bei weitem übertroffen. Ich weiß nur, dass ich für den Miniprogramm-Test bestens vorbereitet bin, sodass der Sturm des Miniprogramms noch heftiger kommen wird.
Weitere Artikel zum automatisierten Intimkontakt von WeChat-Miniprogrammen finden Sie auf der chinesischen PHP-Website!