微信公众号UI自动化回归

2019-06-25  本文已影响0人  龙猫六六

背景

微信公众号有业务范畴,需要实现微信UI自动化,来提高回归效率,减轻测试压力。

测试需求分析

1.微信为第三方app,无微信源码
2.微信公众号UI自动化测试,如Android系统,细分Native,H5两块UI自动化
3.微信有黑厂

测试方案设计

1.微信是个比较成熟的软件,本身质量稳定,因此针对公众号测试更多关注的是公众号功能本身,即H5页面测试。考虑平台开放性,选择Android版本微信作为回归载体
2.在上述的基础上,公众号UI自动化框架选型FAutoTest。主要考虑FAutoTest为微信自研UI自动化框架,对微信H5自动化兼容性好;支持Native,H5两种自动化测试,满足测试需求。

环境搭建

FAutoTest官网:https://github.com/Tencent/FAutoTest
参考官网完成环境的搭建:依赖环境+FAutoTest开发环境
注意:
1.只支持Python2.7.x
2.安装Python库,确认pip对应Python2.7.x

image.png

测试用例编写

官网提供的用例相对简单,下述内容在demo基础上丰富用例,更接近实际应用场合

工程介绍

官网git下工程,使用pycharm打开,工程结果如下:


image.png

1.dist:fastAutoTest依赖框架,需要到该路目录下运行手动下载

pip install dist/fastAutoTest-xxx.whl(whl文件请在dist目录下手动下载)

2.docs:说明文档目录,API使用方法可以再次进行参考
3.fastAutoTest:核心代码文件夹
4.sample:测试脚本文件夹

Navtive UI API介绍

FAutoTest集成了uiautomator,使用uiautomator实现Native UI自动化,常用API方法如下:

//adb 命令行启动微信 
cmd = 'adb shell am start com.tencent.mm/com.tencent.mm.ui.LauncherUI'
//依赖包名
from uiautomator import Device
//通过设备id,连接设备
androidDriver = Device('SJE5T17821003335')
from uiautomator import Device
androidDriver = Device('SJE5T17821003335')
self.driver=androidDriver

#文本获取控件
self.driver(text='控件文案').click()              //控件点击
content=self.driver(text='控件文案').text    //控件文案获取

#resourceId获取控件+点击
self.driver(resourceId='resourceId').click()              //控件点击
content=self.driver(resourceId='resourceId').text   //控件文案获取

#className获取控件+点击
self.driver(className='className').click()              //控件点击
content=self.driver(className='className').text    //控件文案获取

H5 UI API介绍

FautoTest提供API来实现H5页面的获取及操作,一般微信公众号常用操作行为大致为如下三类:点击,文案输入,页面滑动。从应用场景出发简单这三类操作模拟:

脚本demo

# coding=utf-8
import sys
import os
#添加运行环境描述,便于命令行启动
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[0]
sys.path.append(rootPath)


from fastAutoTest.core.h5.h5Engine import H5Driver
import  unittest
from uiautomator import Device as d
from uiautomator import Device
from time import sleep

class wechatPublicTest(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        # cmd = 'adb shell am force-stop com.tencent.mm'
        #使用adb命令调起微信
        cmd = 'adb shell am start com.tencent.mm/com.tencent.mm.ui.LauncherUI'
        os.system(cmd)
        #对应设备的deviceName,对应多台设备
        androidDriver = Device('SJE5T17821003335')
        #对应pc只连接一台设备,执行用户暂时用这种方式,通用性好
        # androidDriver = d
        self.driver=androidDriver
        #休眠一下,等待微信主页面加载完毕
        sleep(2)

    #微信原生界面流程测试(uiautomator框架),进度小说分站首页
    def test_case0_public_native(self):
        #找到微信主页面的“通讯录” 并点击
        self.driver(text='通讯录').click()
        #点击公众号
        self.driver(text='公众号').click()
        #上下滑动去找测试公众号
        self.driver(scrollable=True).scroll.to(text="测试公众号")

        self.driver(text='测试公众号').click()
        sleep(1)
        self.driver(text='阅读记录').click()
        sleep(1)
        self.driver(text='最爱小说').click()
        sleep(3)


    #书籍搜索
    def test_case1_public_Search(self):
        #初始化driver
        h5Driver = H5Driver()
        h5Driver.initDriver()

        # 进入书城首页
        h5Driver.clickFirstElementByText('首页')

        sleep(2)
        h5Driver.clickElementByXpath('//*[@class="icon icon-search"]')

        sleep(2)
        h5Driver.textElementByXpath('//*[@id="search-input"]', "民国奇人")

        sleep(2)
        h5Driver.clickElementByXpath('//*[@class="btn f-fr"]')

        sleep(2)
        bookName=h5Driver.getElementByXpath('//*[@class="bookDesc"]/h3').text

        self.assertTrue((bookName == "民国奇人"), '搜索异常,无目标书籍《民国奇人》')

        sleep(1)
        h5Driver.clickElementByXpath('//*[@class="bookDesc"]')

        sleep(1)

        #书籍中文校验
        print "begin"
        content = h5Driver.getElementByXpath('//*[@class="m-content"]/p[1]').text
        print len(content)
        # 考虑到书籍文字会根据
        self.assertTrue(len(content) > 1, "书籍中文加载失败")


        #书籍章节名获取
        articleTitle = h5Driver.getElementByXpath('//*[@class="m-content"]/h1[1]/span[1]').text
        # print articleTitle
        flag = (articleTitle=='第二章 鲁班教中师与徒')

        #书籍中文滑动到底部
        h5Driver.scrollWindow(0, 0, 0, 1000,160)

        sleep(1)
        h5Driver.clickFirstElementByText('目录')

        #根据flag,选择目标章节的目录点击
        sleep(1)
        if flag:
            h5Driver.clickFirstElementByText('第一章 三道坎镇有邪事')
        else:
            h5Driver.clickFirstElementByText('第二章 鲁班教中师与徒')
        sleep(3)

        title = h5Driver.getElementByXpath('//*[@class="m-content"]/h1[1]/span[1]').text

        targetTitle="第二章 鲁班教中师与徒"
        if flag:
            targetTitle="第一章 三道坎镇有邪事"

        print  "targetTitle:" + targetTitle
        print  "title:" + title
        self.assertTrue(title==targetTitle)

Jenkins持续继承

cd /Users/jc/Documents/pythonWorkSpace/AndroidUI/FAutoTest/sample
python BookDemo.py 
上一篇 下一篇

猜你喜欢

热点阅读