wdmchaft / wxapp-appium

基于Appium的微信小程序自动化测试方案

Home Page:https://xingzx.org/blog/wxapp-appium-test

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

微信小程序自动化测试——基于 Appium & Python3

微信小程序自动化测试方案,基于 Appium 移动端测试框架及多种测试用例管理框架,使得UI测试更易于实施。

技术方案选型:

  1. Appium + Python3 + Behave (BDD风格,推荐)
  2. Appium + Python3 + Pytest

一、背景

在敏捷开发、快速迭代的发布节奏下,需要快速地对小程序、APP 等进行回归测试,为了使这一流程标准化、自动化、规范化的执行,本技术方案应运而生。

本项目的开源内容仅限于自动化驱动微信小程序部分(小程序界面元素的定位及驱动),包含了两种技术方案的用例 demo,demo 基于有车以后小程序,其他业务可自行扩展。

经过有车以后大半年的工程实践检验,该方案比较稳定。通过每天的持续回归测试,累计发现问题10+,效果显著。

二、使用教程

2.1 开启小程序 Web 调试

小程序本质上是一种 Web 应用,可以通过 PC 浏览器进行页面元素的 Inspect。为了进行页面元素的 Xpath 定位,必须先搞定这一步,参考官方文档: 【第六季】使用Timeline获取小程序的启动性能数据

注意这一步有较多人遇到手机无法开启调试的问题,关键点是要打开腾讯 X5 的调试开关。可反复尝试下面三个指令(特别是第三个指令),打开相应的开关, 一般情况下前两个指令就可以达到目的了。

http://debugmm.qq.com/?forcex5=true
http://debugx5.qq.com
http://debugtbs.qq.com

如果通过指令 chrome://inspect/devices#devices 可以正常看到小程序页面,但是打开后白屏,可稍等几十秒时间, 如果还是不行或者出现 HTTP/1.1 404 NOT FOUND提示,则需要浏览器设置代理翻墙。直到出现如下界面

2.2 ChromeDriver 下载

Appium 需要通过 chromedriver 驱动微信小程序的 webview,遗憾的是微信里面的 webview 版本号和 chromedriver 的版本号有一个对应的关系,两者必须要匹配。 微信扫码打开 http://httpbin.org/user-agent,即可看到自己的webview版本号(本示例为66):

{
  "user-agent": "Mozilla/5.0 (Linux; Android 7.0; SM-G928V Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) 
  Version/4.0 Chrome/66.0.3359.126 MQQBrowser/6.2 TBS/044506 Mobile Safari/537.36 MMWEBID/9796 
  MicroMessenger/7.0.3.1400(0x2700033B) Process/tools NetType/WIFI Language/zh_CN"
}

ChromeDriver - WebDriver for Chrome 找到和自己匹配的 chromedriver 然后下载 下来,历史版本下载地址,例如,示例中的66和 ChromeDriver 2.40 可以兼容。

ChromeDriver 2.40
Supports Chrome v66-68

如果已经下载了正确的 chromedriver,但是 Appium 出现 No Chromedriver found that can automate Chrome '62.0.3202', 报错信息是一个不相干的版本号

这种情况是因为 Appium 读取了系统版本的 webview 导致,没有正确读取微信使用的 webview 版本号。解决办法是在手机上安装一个同样版本的 Chrome(例如版本66)。

2.3 安装Appium并启动服务

用于驱动手机自动化操作,建议在服务器端运行此服务,运行服务平台推荐 Mac 或 Linux。(Windows下坑多,慎入)

需要安装 Android SDK、Java 等环境,推荐安装最新稳定版

2.4 安装 Python3 及依赖

此方案仅在 Python3 上测试通过,具体依赖列表参考 requirements.txt

推荐安装最新稳定版

2.5 修改configs/environment.py配置

符合自己实际情况即可

2.6 运行用例

  • 通过 pytest 命令运行(如果报No module named 'configs' 则需要设置一下 PYTHONPATH):
pytest -v -s tests
  • 通过 behave 命令运行:
behave --junit features

建议放到 jenkins 上触发执行

2.7 示例用例代码

以 behave 框架为例,通过 Native 以及 Web Xpath 两种方式定位和操作页面元素(详见demo):

Scenario: 资讯-详情-操作
  Given 进入有车以后
  When 点击评测
    """
    sleep.3
    """
  When 点击评测详情
    """
    sleep.8
    """
  Then 翻2页
  When 点击资讯收藏
    """
    sleep.2
    """

2.8 运行结果截图

三、注意事项

3.1 微信安全性限制问题

注意尽量不要使用模拟器,应按照正常用户的使用流程,微信的很多功能是有操作频率限制的,一旦使用不当可能面临封号、或者限制使用的风险,所以尽量用小号测试

常见的封号原因:

  • 平时微信会封禁的账户类型(诈骗,色情营销,吸粉账号等)
  • 手机上安装了 Xposed 框架并激活了修改微信相关模块的用户
  • 在手机上安装了 Magisk 框架并且激活了 Systemless Xposed 的用户
  • 只在手机上安装了 Xposed 或 Magisk 框架但没有激活的用户
  • 一部分只 ROOT 手机的用户(存疑)和使用越狱后 iOS 的用户
  • 使用手机自带/第三方的微信分身功能同时使用多个微信账户
  • 少部分什么都没装无辜躺枪的 Play 商店版微信用户(一脸懵逼)
  • 使用模拟器或者多开的

3.2 关于等待时间

涉及到网络的操作或其他异步操作,一般需要显式的等待,根据经验进行调整

3.3 异常处理

每一步操作都需要做异常处理,一旦有异常即停止执行,保证后续脚本的执行环境

3.4 自动化环境

尽量使用 Mac,特别adb、node这些命令比在Windows下稳定多了

3.5 UI用例编写

应根据业务场景,做不同界面的兼容处理

3.6 关于 NATIVE 和 Webview 环境【重要】

如果通过 uiautomatorviewer 可以看到小程序内部的元素,则不用关注这个区别,直接按照安卓APP的定位方法即可, 值得注意的是,因为不是原生开发的,小程序里的元素没有Resource ID,但是可以通过文本、Xpath等去定位。

如果通过 uiautomatorviewer 只能看到一个 Webview(里面的子元素都看不到),那么处理起来会复杂一些, 自动化代码需要实现从原生的 NATIVE 环境切换到小程序的 Webview 环境、并在小程序的不同 Window 切换,详细参考代码实现。

这其中的原因暂未明确,可能微信有一定的控制策略。手头上的两台手机各种情况都出现过。

3.7 测试手机选型

尽量选择接近Android原生系统的手机(会减少很多莫名其妙的问题及不必要的麻烦),例如 Nexus、三星、乐视等。

!避免使用小米、华为、OV、一加这种经过深度定制或者阉割的手机!

安卓系统版本推荐 Android 7.x 或 Android 6.x (新版本的也可以,不过笔者的都是 7.x)

微信版本使用最新即可

3.8 如何切换小程序页面到当前页面?更多问题?

参考源码实现,部分细节未开源,可入群沟通

四、微信交流群

请扫码加群,如二维码失效,可加管理员 alisha_kelly 申请入群,备注小程序测试

五、版权声明

有车以后测试组荣誉出品,如果对您项目有帮忙,欢迎Star,开源声明 The 3-Clause BSD License

About

基于Appium的微信小程序自动化测试方案

https://xingzx.org/blog/wxapp-appium-test


Languages

Language:Python 96.6%Language:Gherkin 3.4%