APP自动化能做什么?
请看示例(实现批量的视频,封面功能复用能力(实现效果参考抖音号:71403700901)
APP自动化实战-操作剪映APP
PO模式
1. PO模式介绍
PO(Page Object)模式是一种在自动化测试中广泛使用的设计模式。
其主要思想是将页面元素的操作和页面的业务逻辑封装到一个单独的类中,以提高测试代码的可读性、可维护性和可重用性。
PO 模式的优点包括:
- 减少代码重复:相同页面的操作只需在对应的页面对象中定义一次。
- 提高代码可读性:测试用例专注于业务流程,而页面操作的细节被隐藏在页面对象中。
- 便于维护:如果页面元素或操作有变化,只需在相应的页面对象中进行修改。
2. PO模式应用
- PO模式可以把一个页面分为三层,对象库层、操作层、业务层。
-
- 对象库层:封装定位元素的方法。
- 操作层:封装对元素的操作。
- 业务层:将一个或多个操作组合起来完成一个业务功能。比如登录:需要输入帐号、密码、点
击登录三个操作。
- PO模式的Base基类封装
-
- 比如针对元素定位封装到操作的基类当中,使代码更加简洁
实战应用
说明:Android平台&剪映APP为例,仅做简单演示。效果参考(抖音号:71403700901)
1. 主要代码结构
(参考上一篇文章:基于 Python 的自动化框架示例_python框架模板-CSDN博客)
my_app_auto_test/
├── app_lib/
│ ├── base/
│ │ ├── __init__.py
│ │ ├── base_driver.py
│ │ └── base_page.py
│ ├── pages/
│ │ ├── __init__.py
│ │ └── main_page.py
│ └── operations/
│ ├── __init__.py
│ └── main_operations.py
├── app_test/
│ ├── __init__.py
│ ├── test_main.py
│ └── conftest.py
├── config/
│ ├── __init__.py
│ └── config.ini
└── run_tests.py
2. PO模式封装
主要介绍main_page模块
import time
from selenium.webdriver.common.by import By
from app_lib.android.Base.base_page import BasePageMain# 抽象出元素定位信息的基类
class ElementLocator:def __init__(self, by: By, value: str):self.by = byself.value = value# 对象库层,用来定位元素
class PageMain(BasePageMain):def __init__(self):super().__init__()# 定位元素self.cut_cap = ElementLocator(By.XPATH, '//android.widget.TextView[@resource-id="com.lemon.lv:id/tab_name" and @text="剪辑"]')self.scissors = ElementLocator(By.XPATH, '(//android.view.View[@resource-id="com.lemon.lv:id/radioButton"])[1]')self.start_do = ElementLocator(By.XPATH, '//android.widget.ImageView[@resource-id="com.lemon.lv:id/ic_creation_new"]')self.choose_color = ElementLocator(By.XPATH, '')self.choose_color = ElementLocator(By.XPATH, '')# 剪辑按钮def find_cut_cap(self):return self.get_element((self.cut_cap.by, self.cut_cap.value))# 剪刀按钮def find_scissors(self):return self.get_element((self.scissors.by, self.scissors.value))# 开始创造按钮def find_start_do(self):return self.get_element((self.start_do.by, self.start_do.value))# 操作层,通过依赖注入接收对象库层实例,降低耦合度
class HandMain:def __init__(self, page_main_:PageMain):self.page_main = page_main_# 开始创作def start_do(self):if self.page_main.find_cut_cap() is not None:self.page_main.find_cut_cap().click()if self.page_main.find_scissors() is not None:self.page_main.find_scissors().click()self.page_main.find_start_do().click()time.sleep(3)# 业务层
class MainProxy:def __init__(self, handle_main_: HandMain):self.main_handle = handle_main_def start_do_(self):# 开始创作self.main_handle.start_do()# 使用示例
if __name__ == "__main__":page_main = PageMain()handle_main = HandMain(page_main)main_proxy = MainProxy(handle_main)main_proxy.start_do_()
上述代码中,如果页面元素或操作有变化,只需在相应的页面对象中进行修改即可。
附:Windows电脑从0到1实现APP自动化
引言
前几日回购了一台windows电脑,8成新,系统已重装。因为之前一直用的是MAC电脑,这次就这个机会用Windows电脑从0到1实现一下APP的自动化。
环境搭建
在Windows电脑上进行Python+Appium自动化测试环境搭建,主要有以下步骤:
1. 安装Java JDK
- 下载:前往Oracle官网或国内镜像站(如华为镜像),下载JDK 1.8及以上版本,安装过程中选择合适路径,避免中文和空格。
- 配置环境变量:右键点击“此电脑”,选择“属性”,进入“高级系统设置”,点击“环境变量”。新建“JAVA_HOME”变量,变量值为JDK安装路径;编辑“Path”变量,添加
%JAVA_HOME%\bin
。 - 验证:在命令提示符输入“java -version”,显示版本信息则安装成功。
2. 安装Android SDK
- 下载:访问Android SDK官网,下载SDK安装包。
- 安装与配置环境变量:解压到指定目录,新建“ANDROID_HOME”变量,变量值为SDK解压路径;编辑“Path”变量,添加
%ANDROID_HOME%\platform-tools
、%ANDROID_HOME%\build-tools
、%ANDROID_HOME%\tools
等目录(用英文分号隔开)。 - 验证:在命令提示符输入“adb”和“adb devices”,能正确显示相关信息则安装成功。
3. 安装安卓模拟器
可选择夜神模拟器、天天模拟器、Genymotion、网易MUMU等。以夜神模拟器为例:
- 下载安装:访问夜神模拟器官网,下载并安装。
- 配置:开启模拟器的开发者模式,在模拟器中,进入“设置”->“关于手机”->连续点击“版本号”5次激活开发者选项,接着在“设置”->“开发者选项”中启用USB调试。将Android SDK中的platform-tools文件夹下的adb.exe文件拷贝到夜神模拟器安装路径下的bin目录下,覆盖原有的adb文件。
4. 安装Node.js
- 下载:访问Node.js官网,下载适合Windows系统的安装包。
- 安装:点击安装包,按照提示点击“Next”按钮,勾选“I accept the terms in the License Agreement”,可自定义安装路径,之后默认点击“Next”,再点击“install”和“finish”完成安装。
- 验证:打开命令提示符,输入“node -v”,显示版本号则安装成功。
5. 安装Appium
有客户端安装和远程安装两种方式,推荐客户端安装。
- 客户端安装:前往Appium官网下载Windows安装包,选择第一个选项点击“安装”,点击“完成”。双击打开Appium客户端,host输入127.0.0.1,Appium默认端口是4723,点击“Start Server”开启服务。
- 远程安装:在命令提示符中输入
npm install -g appium
。也可使用淘宝镜像源加快速度,先执行npm install -g cnpm --registry=https://registry.npm.taobao.org
,再执行cnpm install -g appium
。
6. 安装Appium-doctor
在命令提示符中输入npm install -g appium-doctor
。安装完成后,通过在命令提示符中输入appium-doctor
进行环境检查。
7. 安装Python
- 下载:访问Python官网,下载适合Windows系统的安装包。
- 安装:运行安装包,在安装过程中,建议勾选“Add Python to PATH”,将Python添加到环境变量。
- 验证:打开命令提示符,输入“python”,若显示Python版本信息,则安装成功。
8. 安装Appium-Python-Client
打开命令提示符,输入pip install Appium-Python-Client
。
9. 安装集成开发环境(IDE)
可选择Pycharm等,前往Pycharm官网下载安装包,按照提示进行安装。
APP自动化测试
1. 启动 Appium Server
-
- 打开命令提示符:在 Windows 系统中,按下
Win + R
键,输入 “cmd” 并回车,打开命令提示符窗口。 - 输入启动命令:在命令提示符中输入
appium
命令,即可启动 Appium Server。如果需要指定一些特殊参数,如指定端口号、绑定 IP 地址等,可以使用相应的参数选项,例如appium -p 4724
表示将 Appium Server 启动在 4724 端口上。 - 查看启动信息:命令执行后,会在命令行中输出 Appium Server 的启动日志信息,显示服务器是否成功启动以及相关的配置信息等。
- 打开命令提示符:在 Windows 系统中,按下
2. 准备测试设备与APP
- 连接真机:用USB线将手机连接到电脑,确保手机开启USB调试模式,电脑能识别手机。若用模拟器,启动之前安装好的安卓模拟器。
- 安装APP,可以提前安装好,就不需要下面步骤了:
-
- 获取APP安装包:获取要测试的APP安装包文件(.apk格式),可从项目组获取或从应用商店下载后提取。
- 安装APP:使用命令行工具如
adb install <app_path>
,将APP安装到测试设备上,其中<app_path>
是APP安装包的路径。也可在Appium的启动配置中指定app
参数为APP安装包路径,让Appium在测试前自动安装。
3. 编写测试脚本
- 导入必要的库:在Python脚本中,导入
appium.webdriver
相关模块及其他可能用到的模块,如By
用于定位元素,WebDriverWait
用于等待元素加载。
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
- 配置Desired Capabilities:设置设备和APP相关的参数,如平台名称、平台版本、设备名称、APP包名、启动活动等。
desired_caps = {"platformName": "Android","platformVersion": "11","deviceName": "emulator-5554","appPackage": "com.example.app","appActivity": "com.example.app.MainActivity"
}
- 初始化驱动:创建
WebDriver
实例,与Appium服务器建立连接,启动APP。
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
from appium.options.android import UiAutomator2Options
# 创建Appium驱动实例
options = UiAutomator2Options().load_capabilities(desired_caps)
driver = webdriver.Remote(config.get('Appium', 'server_url'), options=options)
- 注意:
- 如果新版本的Appium不兼容,需要引用UiAutomator2Options。
- 与Appium服务器建立连接,启动APP。
- 编写测试用例:使用Appium提供的API来定位APP中的元素,并对元素进行操作,如点击、输入文本等。
# 等待并点击某个按钮
button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "button_id")))
button.click()# 输入文本到输入框
input_box = driver.find_element(By.ID, "input_box_id")
input_box.send_keys("test text")
- 断言与验证:使用断言来验证操作结果是否符合预期,如验证页面标题、元素是否显示等。
# 验证某个元素是否显示
assert driver.find_element(By.ID, "element_id").is_displayed()# 验证页面标题是否正确
assert driver.title == "Expected Title"
运行测试脚本
- 直接运行:在Pycharm等集成开发环境中,直接运行编写好的测试脚本。也可在命令行中进入脚本所在目录,执行
python <script_name>.py
命令来运行脚本,其中<script_name>
是测试脚本的文件名。 - 使用测试框架:若使用
unittest
或pytest
等测试框架来组织和管理测试用例,可在命令行中执行相应的命令来运行测试套件。如使用unittest
时,可在命令行中执行python -m unittest discover -s tests -p "test_*.py"
,其中tests
是测试用例所在的目录,test_*.py
是测试用例文件的命名模式。
查看测试结果
- 查看控制台输出:在运行脚本的控制台中,查看测试执行过程中的输出信息,包括测试用例的执行情况、断言结果等。若测试失败,会显示详细的错误信息和堆栈跟踪,帮助定位问题。
- 生成测试报告:可使用
HTMLTestRunner
等工具生成HTML格式的测试报告,直观地展示测试结果,包括测试用例的执行时间、通过率、失败用例的详细信息等。