Python 安卓UI自动化测试(一):QT4A环境搭建及demo运行

@[toc]


参考资料:
QT4A Github: https://github.com/Tencent/QT4A

QT4A使用文档: https://qt4a.readthedocs.io/zh_CN/latest/

QT4A设计文档: https://github.com/Tencent/QT4A/blob/master/design.md

QT4A Demo工程: https://github.com/qtacore/QT4ADemoProj

QT4F: https://github.com/Tencent/QTAF


一、准备工作

  • Python环境安装
  • 安装QT4A、QT4W
  • github内Demo工程下载
  • adb环境安装
  • Python IDE:推荐使用PyCharm
  • 测试机准备(需root 或云真机)
  • 待测APP安装包准备(debug包)
  • UI查看工具:AndroidUISpy

二、环境安装

  1. Python环境安装
  1. adb环境安装

  2. Python IDE安装

  3. UI查看工具:AndroidUISpy安装

  4. 安装QT4A

  5. 测试桩安装

    • 以上步骤全部完成的情况下,执行用例前,需先安装QT4A测试桩,可通过QT4A命令执行

    • qt4a-manage install-driver

    • 安装前/data/local/tmp 目录


      安装前
    • 安装测试桩


      安装测试桩
    • 安装后,可以看到/data/local/tmp 目录下多了一个qt4a文件夹


      /data/local/tmp
    • QT4A文件夹

      文件目录
    • 设备显示已安装:QT4A助手


      云真机

三、Demo运行

  1. 下载Demo工程

demo下载
  1. Demo功能文件结构

    • demotest:测试用例集合,这里存储所有测试用例的脚本
    • demolib:测试业务库,这里存放所有测试业务lib层的代码,使得不同用例可以复用demolib的接口
    • settings.py:项目配置文件,可以配置你所需要的项
    • 目录结构如下:
    F:\QT4ADEMOPROJ-MASTER
    │  .gitignore
    │  demo.apk
    │  manage.py
    │  README.md
    │  requirements.txt
    │  settings.py
    │
    ├─demolib
    │      demoapp.py
    │      demotestbase.py
    │      login.py
    │      main.py
    │      __init__.py
    │
    └─demotest
            hello.py
            webview.py
            __init__.py
    
    
  1. 安装demo.apk

    • 使用ADB命令安装,adb install demo.apk

      adb install demo.apk
    • 传输至手机端安装

  2. ./demotest/hello.py用例

    # -*- coding: utf-8 -*-
    
    '''示例登录测试用例
    '''
    
    from demolib.demotestbase import DemoTestBase
    from demolib.demoapp import DemoApp
    
    class HelloTest(DemoTestBase):
        '''示例登录测试用例
        '''
        owner = "Administrator"
        timeout = 5
        priority = DemoTestBase.EnumPriority.High
        status = DemoTestBase.EnumStatus.Ready
        
        def run_test(self):
            #--------------------------
            self.start_step('1、登录Android demo')
            #--------------------------
            acc = "admin"
            pwd = "admin"
            device = self.acquire_device()
            app = DemoApp(device)
            app.login(acc, pwd)
            self.log_info("登录完成")        
            self.waitForEqual('当前Activity为:com.qta.qt4a.demo.HomeActivity', app.device, 'current_activity', 'com.qta.qt4a.demo.HomeActivity')
    
        
    if __name__ == '__main__':
        HelloTest().debug_run()
    
    
    
  1. demo.apk登录页面元素封装:./demolib/login.py

    # -*- coding: utf-8 -*-
    
    from qt4a.andrcontrols import Window, Button, EditText
    from qt4a.qpath import QPath
    
    class LoginPanel(Window):
        '''登录界面
        '''
        Activity = 'com.qta.qt4a.demo.MainActivity'  # 登录界面
    
        def __init__(self, demoapp):
            super(LoginPanel, self).__init__(demoapp)
            self.update_locator({'帐号': {'type': EditText, 'root': self, 'locator': QPath('/Id="editAcc"')},
                                '密码': {'type': EditText, 'root': self, 'locator': QPath('/Id="editPwd"')},
                                '登录': {'type': Button, 'root': self, 'locator': QPath('/Id="btnLogin"')},
                          
                                })
    
        def login(self, acc, pwd):
            '''登录界面
            '''
            self.wait_for_exist()
            self.Controls["帐号"].text = acc
            self.Controls["密码"].text = pwd
            self.Controls["登录"].click()
    
    
    
  1. 运行Demo工程./demotest/hello.py用例

    • 使用命令行执行:python manage.py runscript demotest/hello.py

      注:需先进入文件目录

    • 运行hello.py用例文件

  2. 结果展示

    • 运行日志


      demo运行
    • 用例执行


      demo运行