APP自动化效果测试工具

简介: 项目测试过程中经常需要在手机端体验语音产品的识别效果和稳定性,识别效果与手机硬件强相关无法抛开硬件影响。因此开发了一套基于uiautomator2+python UI自动化工具,可以实现在电脑端控制手机demo开始收音+播放待测音频+保存识别结果的APP自动化效果测试工具。

1. 背景

项目测试过程中经常需要在手机端体验语音产品的识别效果和稳定性,识别效果与手机硬件强相关无法抛开硬件影响。因此开发了一套基于uiautomator2+python UI自动化工具,可以实现在电脑端控制手机demo开始收音+播放待测音频+保存识别结果的APP自动化效果测试工具。

2. uiautomator2安装及介绍

uiautomator2是一个自动化测试开源工具,仅支持Android平台的原生应用测试。它本来是Google提供的一个自动化测试的Java库,后来发展了python-uiautomator2,封装了谷歌自带的uiautomator测试框架,提供便利的python接口,用它可以很便捷的编写python脚本来实现app的自动化测试。uiautomator2 提供了点击、长按、输入文本、滑动、拖拽、截屏等方法,能够模拟用户的各种动作。用户可以通过控件的 id 或 text 等属性,定位到控件,从而对控件实施上述操作。

2.1 环境搭建

2.1.1 安装adb

安装adb并使手机与电脑连接(具体安装自行百度)。
adb devices 查看连接设备。

2.1.2 安装uiautomator2

pip install --pre -U uiautomator2

2.1.3 设备安装atx-agent

python -m uiautomator2 init (安装包含httprpc服务的apk到手机)

2.1.4 安装weditor

基于浏览器技术的weditor UI查看器,方便抓取手机上应用的控件。

pip install --pre weditor(安装)
python -m weditor(运行)

网络异常,图片无法展示
|

2.2 atx主要方法

2.2.1 设备连接

import uiautomator2 as u2
d = u2.connect('192.168.1.169')  #通过WIFI
d = u2.connect_usb('123456f')    #通过USB(手机的序列号可以通过adb devices获取到,假设序列号是123456f)

2.2.2 获取当前包名

cmd界面输入“uiautomator2 current ”,能获取手机当前界面APP的包名、activity以及pid等相关信息,如下:{"package": "com.android.browser", "activity": "com.uc.browser.InnerUCMobile", "pid": 28478 }。

2.2.3 启动/停止APP

//启动
d.app_start("com.android.browser")     #默认的这种方法是先通过atx-agent解析apk包的mainActivity,然后调用am start -n $package/$activity启动
d.app_start("com.android.browser", use_monkey=True)   #使用 monkey -p com.example.hello_world -c android.intent.category.LAUNCHER 1 启动,这种方法有个副作用,自动会将手机的旋转锁定给关掉
//停止
d.app_stop("com.android.browser") 
d.app_clear('com.android.browser')

2.2.4 元素定位方法

d(resourceId="com.smartisanos.clock:id/text_stopwatch").click()   #ResourceId定位
d(text="发现").click()    #Text定位
d(description="..").click()   #Description定位
d(className="android.widget.TextView").click()   #ClassName定位

2.2.5 控件操作

d.click(x, y)    #点击
d.double_click(x, y)   #双击
d.double_click(x, y, 0.1)   # 两次点击时间间隔0.1秒
d.long_click(x, y) d.long_click(x, y, 0.5) # 点击时间0.5秒,长按

2.3 uiautomator2+python UI自动化测试框架简介

python端:运行脚本,并向移动设备发送HTTP请求。移动设备:移动设备上运行了封装了uiautomator2的HTTP服务,解析收到的请求,并转化成uiautomator2的代码,对被测程序进行相关操作。

网络异常,图片无法展示
|

3.实战案例

3.1 手机计算器

以下以计算器为例,计算七加八并自动获取计算结果。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import uiautomator2 as u2
import time
if __name__ == '__main__':
    d = u2.connect_usb("123456f")   # 通过USB连接手机(手机的序列号可以通过adb devices获取到,假设序列号是123456f)
    d.app_start("com.coloros.calculator")   # 通过包名启动手机计算器(不同手机计算器包名可能不同,需要修改)
    d(resourceId="com.coloros.calculator:id/digit_7").click()   # resourceId定位法,点击“7”
    d(resourceId="com.coloros.calculator:id/op_add").click()    # 点击“+”
    d(text="8").click()     # text定位法,点击“8”
    # d(resourceId="com.coloros.calculator:id/eq").click()
    d.click(0.829, 0.92)    # 坐标定位法,找到“=”的坐标点,点击“=”
    d(resourceId="com.coloros.calculator:id/result").get_text()   #获取result结果
    time.sleep(5)
    d.app_stop("com.coloros.calculator")     #关闭手机计算器

3.2 语音助手识别效果自动化测试

同时控制手机和音箱,配合模拟人与手机助手的语音交互并保存返回的识别结果

网络异常,图片无法展示
|

控制手机打开语音助手

def openAssistant()
    d = u2.connect_usb("手机序列号")
    d.app_start("包名", "activity", use_monkey=True)    #启动手机语音助手,需要通过语音助手包名启动
    d.click(x, y)   #通过坐标定位方法,点击语音助手浮球,开启语音助手交互

播放测试音频文件

# pcm音频读取
class PcmRead:
    def __init__(self, path, sampleRate, sampleSize, channelCount):
        self._i_opened_the_file = None
        if isinstance(path, str):
            f = open(path, 'rb')
            self._i_opened_the_file = f
        # else, assume it is an open file object already
        self._framerate = sampleRate
        self._sampwidth = sampleSize
        self._nchannels = channelCount
        self._nframes = os.path.getsize(path) // (sampleSize * channelCount);
    def __del__(self):
        self.close()
    def __enter__(self):
        return self
    def __exit__(self, *args):
        self.close()
    def close(self):
        file = self._i_opened_the_file
        if file:
            self._i_opened_the_file = None
            file.close()
    def getnchannels(self):
        return self._nchannels
    def getnframes(self):
        return self._nframes
    def getsampwidth(self):
        return self._sampwidth
    def getframerate(self):
        return self._framerate
    def readframes(self, nframes):
        size = nframes * self._sampwidth * self._nchannels;
        data = self._i_opened_the_file.read(size);
        return data
#播放音频文件
def play(audioPath):
    if audioPath.endswith(".pcm"):
        wf = PcmRead(audioPath, "音频采样率", "采样点大小,只支持2", "音频声道数")
    elif audioPath.endswith(".wav"):
        wf = wave.open(audioPath, 'rb')
    else:
        raise ValueError("invalid suffix")
    with wf:
        p = pyaudio.PyAudio()
        stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                        channels=wf.getnchannels(),
                        rate=wf.getframerate(),
                        output=True)
        CHUNK = 1024
        data = wf.readframes(CHUNK)
        while b'' != data:
            stream.write(data)
            data = wf.readframes(CHUNK)
        stream.stop_stream()
        stream.close()
        p.terminate()

4.可扩展领域

uiautomator2+python UI自动化测试框架,与selenium 和 unittest 的 Web UI自动化测试框架相类似,基于Android系统有屏设备的自动化测试解决方案,支持对被测设备的模拟点击、截图、获取返回结果等功能。可用于所有Android带屏设备的APP测试。

相关文章
|
1月前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
3天前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
39 15
|
12天前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
123 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
29天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
159 17
Selenium:强大的 Web 自动化测试工具
|
2月前
|
机器学习/深度学习 人工智能 算法
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
BALROG 是一款用于评估大型语言模型(LLMs)和视觉语言模型(VLMs)在复杂动态环境中推理能力的基准测试工具。它通过一系列挑战性的游戏环境,如 NetHack,测试模型的规划、空间推理和探索能力。BALROG 提供了一个开放且细粒度的评估框架,推动了自主代理研究的进展。
46 3
BALROG:基准测试工具,用于评估 LLMs 和 VLMs 在复杂动态环境中的推理能力
|
2月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
128 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1月前
|
前端开发 JavaScript 测试技术
前端自动化测试
前端自动化测试是通过使用工具和脚本自动执行测试用例的过程,旨在提高测试效率、减少人为错误,并确保Web应用的功能在不同环境和设备上的一致性与稳定性。
|
1月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!
|
2月前
|
机器学习/深度学习 SQL 安全
如何确保自动化安全测试的全面性和准确性
确保自动化安全测试的全面性和准确性,需集成多种工具(如SAST、DAST、IAST、SCA),编写自动化测试脚本,融入CI/CD流程,定期更新测试用例和工具,使用真实数据,持续维护代码,模拟攻击场景,运用机器学习,采用智能测试平台,并结合手动测试。这些策略有助于及时发现并修复安全问题,提升软件安全性。
|
2月前
|
监控 测试技术 开发工具
移动端性能测试工具
移动端性能测试工具
58 2

热门文章

最新文章