自动化测试微信小程序
- 2019 年 10 月 7 日
- 笔记
小程序已经成为一个大的入口了,在测试中如何自动化测试小程序呢?
微信小程序是webview的,跟其它的hybrid的程序测试起来没什么区别。
Mac 环境下搭建 appium 1 安装homebrew 首先命令行检查是否安装:
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果mac没有安装homebrew的话,需要先安装homebrew:
curl -LsSf http://github.com/mxcl/homebrew/tarball/master | tar xvz -C/usr/local --strip 1
查看homebrew版本:brew -v
2 安装node(安装nodejs后,npm会自动安装好) 使用homebrew安装node,命令行:brew install node
查看node版本: node -v
3 安装 appium server
npm --registry [http://registry.npm.taobao.org](http://registry.npm.taobao.org/) install -g appium
4 查看版本号:
appium -v
如果长期没有更新,可以用如下命令更新一下:
npm --registry http://registry.npm.taobao.org update -g appium
注意: 使用sudo安装appium时能够安装,但是运行不起来,解决方案如下:
sudo npm uninstall appium -g //卸载appium sudo chmod -R 777 /usr/local //权限就放开 npm install -g appium //重新安装
5 安装 appium client
命令行中输入:npm install wd
因为被墙,wd下载不下来
尝试使用:npm --registry [http://registry.npm.taobao.org](http://registry.npm.taobao.org/) install -g wd
Install python_client(如果用python,推荐)
pip install --index-url=http://pypi.python.org/simple/ --trusted-host pypi.python.org Appium-Python-Client
6 检查appium:
npm --registry http://registry.npm.taobao.org install appium-doctor -g appium-doctor
注意,可能node镜像下载很慢,可以换不同的镜像源来尝试
7 安装android sdk(如果有Android环境,此步骤可省略)
去android的官方网站下载ADT工具
http://developer.android.com/sdk/index.html
下载程序后,解压到Mac电脑的任意一个目录即可。无需任何安装操作。
进入到android-sdk-macoxs下的Tools文件夹,双击Android文件。即可启动Android SDK Manager。
因为,Android SDK Manager需要有Java的支持,如果没有安装java,则第一次在双击Andriod文件的时候,会提示下载安装java。
可以在Android SDK Manager中下载和更新 Android SDK Tools 和 Android SDK Platform-tools 。
adb调试工具一般位于Platform-tools下。
8 配置adb使用
在Mac系统中,很多时候第一次在Android SDK中使用adb的时候。无法使用。会提示-bash: abd: command not found。
造成此类现象的原因是:未配置Android的环境变量。因此,您需为Mac中的Android SDK配置环境变量。
启动Mac自带的终端Terminal,进入当前用户的home目录。
命令行中输入:echo $HOME
创建.bash_profile文件:
命令行中输入:touch .bash_profile
打开.bash_profile文件:
命令行中输入:open -e .bash_profile 此命令行输入完毕后,会自动弹出 .bash_profile 文件的编辑窗口
在.bash_profile文件中输入 export PATH=/Users/您的用户名/文件路径/platform-tools/:$PATH
注意:如果需要添加多个路径到PATH下时,需要用“:”(英文的冒号)隔开。 例如:
export PATH=${PATH}:/Users/csl/android-sdk-macosx/platform-tools:/Users/csl/android-sdk-macosx/tools
保存文件。直接关闭.bash_profile文件,即可自动保存您输入的内容。
更新刚配置的环境变量
命令行中输入:source .bash_profile
9 验证配置是否成功
输入adb,如果没有出现-bash: adb: command not found;而出现adb的命令参数解释。则表明环境变量配置成功
进行ANDROID_HOME参数的设置 启动Mac自带的终端Terminal,进入当前用户的home目录。 命令行中输入:open -e .bash_profile 在.bash_profile文件中输入 :
export ANDROID_HOME=/android sdk所在目录/ export JAVA_HOME=/java_home的地址/
例如:
export ANDROID_HOME=/Users/csl/android-sdk-macosx/ export JAVA_HOME=/Library/Java/JavaVirtrtualMachines/jdk1.8.0_73.jdk/Contents/Home/
注: 定位mac中 地址,可以使用工具命令“/usr/libexec/java_home”来定位JAVA_HOME
更新刚配置的环境变量 命令行中输入:source .bash_profile
再次执行环境监测命令,执行成功。
整体环境初步搭建完成,开始折腾小程序了。
由于腾讯系QQ、微信等都是基于腾讯自研X5内核,不是google原生webview(其实就是进行了二次定制)。实质上也是混合应用的一种,现在很多app产品也开始流行采用X5内核作为其内嵌web浏览服务,所以掌握X5内核混合应用自动化也是app自动化测试工程师必备技能。
genymotion、夜神等模拟器是intel的X86架构,很多app安装不了,比如微信、qq等(虽然说可以通过安装arm解释器来解决该问题,但是进行X5内核调试的话也会出现问题),建议最好是一台真实的手机来做。
X5内核应用自动化方式和普通混合应用有非常多的差异,接下来以微信小程序举例介绍怎么来开展X5内核的自动化。 打开微信,在任意好友窗口输入,然后点击它:debugx5.qq.com

然后:在打开的界面中选择信息->勾选是否打开TBS内核Inspector调试功能

手机通过usb连接到电脑,打开USB调试模式,通过adb devices命令检测到设备 然后微信中打开一个要测的小程序 在电脑的在chrome浏览器里面输入chrome://inspect#devices 然而,检测不到WebView,没有Inspect链接,打开本地缓存的页面,也是空白的。 网上搜搜,很多这样的问题, 对于国内的程序猿来说,由于无法访问 https://chrome-devtools-frontend.appspot.com,只能出现空白页面,某宝上竟然有人卖Android webview的调试工具解决方案。
好吧,直接去 /users/用户/Library/Android/sdk/tools/ 下去找 uiautomatorviewer, 启动起来结果报错。
用appium desktop吧,结果发现官网都打不开,哎!
那就用macaca来定位元素吧。
npm i macaca-android -g --registry http://registry.npm.taobao.org npm install macaca-cli -g --registry http://registry.npm.taobao.org npm install app-inspector -g --registry http://registry.npm.taobao.org app-inspector -u YOUR-DEVICE-ID
装完以后,发现有问题,没有时间纠结这个问题。 微信有很多的进程,每一个小程序都运行在不同的进程中。 进入X东后,看下当前运行在哪个进程中。
adb shell dumpsys activity top | grep ACTIVITY adb shell ps XXX
最后就是蒙了一个,全用xpath写个demo 测试:
import time from appium import webdriver desired_caps = { 'platformName': 'Android', 'fastReset': False, 'deviceName': 'COL-AL10', 'appPackage': 'com.tencent.mm', 'appActivity': '.ui.LauncherUI', 'fullReset': False, 'noReset': True, 'unicodeKeyboard': True, 'resetKeyboard': True, 'chromeOptions': { 'androidProcess': 'com.tencent.mm:appbrand0' } } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) time.sleep(10) driver.find_element_by_xpath("//*[@text='发现']").click() driver.find_element_by_xpath("//*[@text='小程序']").click() driver.find_element_by_xpath("//*[contains(@text, '京东购物')]").click() driver.switch_to.context('WEBVIEW_com.tencent.mm:appbrand0') time.sleep(5) print(driver.page_source)
结果还正常,没有做gif.
我们知道,常规的webview与native的切换比较简单:
webview界面: print(driver.contexts) driver.switch_to.context(输入待测试webview名字)) native界面: driver.switch_to.content(输入待测试native界面‘NATIVE_APP’)
微信小程序就是加了一个选项而已,把小程序进程放入了chrome options里面了。
个人觉得小程序的UI自动化测试,没有必要大张旗鼓。当然,为了领导开心,你可以扩大规模。