腾讯开源的FAutoTest主要服务于微信的公众号、小程序的UI自动化测试,一方面支持微信的公众号H5页面和小程序的常见控件识别、操作和获取页面内容,另一方面支持基础的性能测试监控和android native页面的组合操作。它具有API使用简单、调试定位方便和功能扩展性强的优点。FAutoTest框架是一个同步阻塞的模型,采用分层设计的原则,共有用户交互层、操作解析层和引擎层。
User Interface(用户交互层):提供给用户所有的界面操作 API(H5界面及小程序界面),只需要关注自身业务逻辑流程(手工用例流程转换成自动化流程)。
PageOperator(操作解析层):主要用于接收和解析用户命令后传递给 Engine 层。
Engine( H5&小程序引擎层):将用户命令传输到手机,并返回结果信息。封装 WebSocket 和单线程池,通过WebSocket Debug URL 和浏览器内核建立链接,发送 Json 格式的协议到手机端进行用户指定的操作。
本文以某公众号的功德捐赠为业务场景,研究FAutoTest在微信的公众号H5页面上的运用。
第一步,需要在Android手机端安装微信和TBS内核,然后在PC端安装Chrome浏览器和使用chrome:inspect去获取页面Xpath;
第二步,把Android手机和PC电脑连接起来,Android手机设置调试模式;
第三步,编写测试脚本,首先打开微信App,跳到公众号的页面,然后定位到功德捐赠功能项,接着定位到捐款说明字段,并输入字段信息。
经过FAutoTest的使用和体验,与已有工具Appium的比较如下:
功能项 | Appium | FAutoTest | 比较 |
微信的公众号 H5页面UI自动化 | 支持 | 支持 | 页面发生切换时,Appium控件识别不稳定,FAutoTest稳定性强。 |
微信小程序 UI自动化 | 不支持 | 支持 |
|
兼容性 | 较差 | 较高 | Appium:Chromedriver匹配Android和Chrome内核版本 FAutoTest:依赖Chrome debugging 协议,版本依赖低 |
脚本编写 | 支持多种编程语言 | 暂时支持Python2 |
|
# -*- coding: utf-8 -*-
from fastAutoTest.core.h5.h5Engine import H5Driver
import os
import time
from uiautomator import Device
'''
打开Android微信,利用ADB命令
'''
def openWechat():
os.system('adb shell am force-stop com.tencent.mm') # 杀掉微信
os.system('adb shell am start com.tencent.mm/.ui.LauncherUI') # 启动微信
time.sleep(5)
'''
H5页面操作
'''
def pageOperator(url,h5Driver):
h5Driver.navigateToPage(url)
#print("手机屏幕高度%s,手机屏幕宽带%s" % (h5Driver.getWindowHeight(),h5Driver.getWindowWidth()))
#print("H5页面CPU %s,内存信息%s" % (h5Driver.getCPUInfo(),h5Driver.getMemoryInfo()))
#while not h5Driver.isElementExist('.//*[text()="建寺功德"]'):
time.sleep(10)
h5Driver.clickFirstElementByText('建寺功德')
h5Driver.wait(5)
h5Driver.textElementByXpath('.//input[@class="mugeda_render_object mugine_class_495 mugine_class_496"]','TestForText')
#h5Driver.returnLastPage()
def main_work():
openWechat()
d = Device()
d(text='发现').click()
d(text='购物').click()
h5Driver = H5Driver()
h5Driver.initDriver()
url = 'https://ecsp.icbc.com.cn/wechat_official_account/payWX/payIndex.html?code=0819ZC1b0GIlCv1FD11b0xEQ1b09ZC1V¶bcode=DZYH&openId=oWX3XjgdG3SWaFTos5oV0h5tDZ5c&k=ECSP&wechatOfficialAcct=wx1ec46f7d85a521b1¶bcode=DZYH&skinType=standard&code=0819ZC1b0GIlCv1FD11b0xEQ1b09ZC1V&state=icbc&token=oWX3XjgdG3SWaFTos5oV0h5tDZ5c'
pageOperator(url,h5Driver)
h5Driver.close()
if __name__ == '__main__':
main_work()
参考:
https://github.com/Tencent/FAutoTest/