基于airtest的安卓ui自动化实践

本文详细介绍了使用airtest进行安卓UI自动化测试的方法,包括airtest简介、连接安卓设备、airtest和poco的使用,以及示例和自动化方案。airtest是一个跨平台的UI自动化框架,支持图像和poco控件识别,广泛应用于游戏和app测试。文章还讲解了如何通过无线和代码连接安卓设备,以及airtest和poco的各种操作,如点击、滑动、文本输入等,并提供了实际操作示例。

在tester home上初识airtest感觉很惊艳,最近想给组里的同学分享一下,仔细研究了一番。分享之后,发现他们练习做的还很不错。

莫非我真的有教书育人的能力?(天真脸)

分为四个部分讲解:airtest简介,airtest安卓上的应用(分airtest和poco),参考示例,ui自动化方案。

airtest简介

  • 网易内部工具团队研发
  • 跨平台ui自动化框架,适用游戏与app
  • 基于图像识别和poco控件识别

支持

  • web
  • windows
  • android
  • ios
  • 游戏

airtest在安卓上的应用

1.连接

airtest与手机连接有三种方式:USB,无线连接,代码连接

无线连接的步骤:

1.手机通过usb连接电脑,查看手机ipadb shell ifconfig wlan0 或者直接在手机上看

2.指定tcpip端口号:  adb tcpip 端口号 (端口号可随便定义,不冲突就行)

3.拔掉手机usb连接

4.cmd命令行输入:adb connect 手机ip:端口号(刚才指定)

5.连接成功后,可输入adb devices 查看到

6.airtest ide右侧远程连接中输入 adb connect 手机ip:端口号 ,然后在设备列表中,点击connect

代码连接的格式:

格式:connect_device("Android://")

括号中格式:Android://adbhost:adbport/serialno

如:connect_device("Android://127.0.0.1:5037/c78886cd")

2.airtest-android的常用方法

1)获取apk 包名

adb shell  或者 adb –s  设备号(通过adb devices可以看到的) shell

pm list packages

加过滤 pm list packages |grep ala

2)打开apk

start_app('package_name')

3)关闭apk

stop_app('package_name')

4)touch

按压,对象可以是图片或者坐标,参数可根据需要修改,默认一次,相当于点击

5)wait

对象是图片,等待某图片出现。找到图片则返回图片中心点坐标,否则超时后抛出异常

6)swip

滑动,对象为两个,分别是滑动起点和重点的图片或坐标,或者选用参数VECTOR

7)exists

对象是图片,判断图片是否存在,存在则返回图片中心点坐标,否则返回False

8)text

文本输入

9)keyevent(这个是需要注意下的)

输入,需要按下的键盘内容,与adb shell input keyevent的值一致

如:keyevent(“KEYCODE_3”) 输入数字3

https://blog.youkuaiyun.com/chen825919148/article/details/18732041

10)snapshot 截图

11)sleep

延迟时间,默认1秒

12)assert_exists

对象为图片,判定图片存在,如果存在则返回图片中心点坐标,否则抛出异常

13)assert_not_exists

判定图片不存在,断言失败时抛出异常

14)assert_equal

断言两个值相同

15)assert_not_equal

断言两个值不相同

<think>好的,我现在需要帮用户设计一个基于AirtestUI自动化测试框架。首先,我得回想用户之前的问题,他们之前问过HTML测试报告模板,现在转向了AirtestUI自动化框架,可能是在构建完整的测试流程,从执行到报告生成。 用户可能的需求是什么?他们可能想要一个结构化的框架,方便编写、执行测试用例,并生成报告。作为测试人员,他们可能关注易用性、可维护性以及如何集成报告。另外,用户可能对Airtest不熟悉,需要明确框架的组成部分和示例。 首先,我需要介绍Airtest的基本概念,说明它是一个基于图像识别和UI控件的自动化测试工具,适用于游戏和App测试。然后,分模块讲解框架的核心组成部分,比如测试用例管理、公共模块、配置文件、测试数据、报告生成和持续集成。 接下来,需要给出一个目录结构示例,这样用户能直观了解文件组织方式。然后,提供核心代码示例,包括基础测试类、页面对象、测试用例和报告生成。这部分要确保代码语法正确,并且有详细注释,方便用户理解。 还要考虑用户可能需要的高级功能,比如多设备支持、数据驱动测试和自定义报告,这些可以作为扩展部分。同时,注意事项部分要提醒用户关于图像识别的稳定性、等待机制和日志记录,这些是实际使用中常见的问题。 需要确保回答结构清晰,逐步引导用户从环境搭建到用例编写,再到报告生成。可能用户是初学者,所以语言要简洁明了,避免过于技术化的术语,但又要覆盖关键点。另外,结合之前的HTML报告模板,可以建议如何将Airtest的报告与之前的模板整合,增强可视化。 最后,检查是否所有要点都涵盖:框架结构、代码示例、执行流程、扩展建议和注意事项。确保用户能根据回答搭建起一个基本的框架,并根据需要进行扩展。</think>以下是一个基于AirtestUI自动化测试框架设计指南,包含核心模块和最佳实践: --- ### 一、框架基础架构 ```text project_root/ ├── cases/ # 测试用例目录 │ ├── __init__.py │ ├── test_login.py │ └── test_payment.py ├── pages/ # 页面对象模型 │ ├── base_page.py │ ├── login_page.py │ └── payment_page.py ├── common/ # 公共模块 │ ├── airtest_utils.py # Airtest扩展方法 │ ├── config.py # 配置文件 │ └── report.py # 报告生成器 ├── reports/ # 测试报告输出 ├── logs/ # 运行日志 └── run.py # 主执行入口 ``` --- ### 二、核心代码模块 #### 1. 基础测试类(base_page.py) ```python from airtest.core.api import * class BasePage: def __init__(self, driver): self.driver = driver # 连接设备对象 def wait_element(self, img_path, timeout=10): """封装等待元素方法""" try: return exists(Template(img_path), timeout=timeout) except Exception as e: self._take_screenshot() raise e def _take_screenshot(self): """失败时自动截图""" snapshot(filename=f"logs/{time.strftime('%Y%m%d%H%M%S')}.png") ``` #### 2. 页面对象示例(login_page.py) ```python class LoginPage(BasePage): USERNAME_INPUT = Template(r"img/username_input.png") LOGIN_BUTTON = Template(r"img/login_btn.png") def input_username(self, text): self.wait_element(self.USERNAME_INPUT).click() text(str(text)) # 使用Airtest的文本输入方法 def click_login(self): self.wait_element(self.LOGIN_BUTTON).click() ``` #### 3. 测试用例示例(test_login.py) ```python import pytest from pages.login_page import LoginPage class TestLogin: @pytest.mark.usefixtures("connect_device") def test_success_login(self, connect_device): """成功登录测试""" page = LoginPage(connect_device) page.input_username("admin") page.input_password("123456") page.click_login() assert exists(Template(r"img/welcome.png")) ``` #### 4. 报告生成模块(report.py) ```python from airtest.report.report import simple_report def generate_report(devices, filepath="reports/report.html"): """生成Airtest增强报告""" simple_report(devices, logpath=True, output=filepath, logfile="logs/log.txt") ``` --- ### 三、框架执行流程 ```mermaid graph TD A[初始化设备连接] --> B[加载测试用例] B --> C{执行测试} C -->|成功| D[记录结果] C -->|失败| E[截图保存] D --> F[生成HTML报告] E --> F F --> G[发送邮件通知] ``` --- ### 四、框架扩展建议 1. **多设备支持**:通过`devices_list`参数实现并行测试 ```python # 在config.py中配置 DEVICES_LIST = [ "Android:///", "Windows:///?title=Unity.*" ] ``` 2. **数据驱动测试**:使用CSV/YAML管理测试数据 ```python @pytest.mark.parametrize("username,password", load_testdata("data/login_cases.yaml")) def test_login_cases(self, username, password): # 测试逻辑 pass ``` 3. **自定义报告模板**:结合HTMLTestRunner生成更美观的报告 --- ### 五、注意事项 1. **图像识别优化**: - 使用`threshold`参数调整识别阈值(默认0.7) - 对动态元素使用`Template(r"img.png", record_pos=...)`固定坐标 2. **等待机制**: ```python # 显式等待最佳实践 def wait_animation_finish(self): sleep(2.5) # 根据实际动画时长调整 ``` 3. **日志管理**: ```python # 在命令行执行时添加参数 airtest run test.air --log logs/ --device Android:/// ``` 该框架通过封装Airtest原生API实现: - 测试脚本与设备操作的解耦 - 失败用例自动重试机制 - 多平台兼容性(Android/iOS/Windows) - 自动生成带操作截图的测试报告 建议配合Jenkins/Docker实现持续集成,可通过`--device`参数动态指定测试设备,适合移动端和PC客户端的UI自动化测试场景。
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值