自动化测试微信小程序

小程序已经成为一个大的入口了,在测试中如何自动化测试小程序呢?

微信小程序是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自动化测试,没有必要大张旗鼓。当然,为了领导开心,你可以扩大规模。

本文分享自微信公众号 - python爱好部落(lovesweet2018)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券