APP自动化实战

server/2025/2/27 13:09:13/

APP自动化能做什么?

请看示例(实现批量的视频,封面功能复用能力(实现效果参考抖音号:71403700901

APP自动化实战-操作剪映APP

PO模式

1. PO模式介绍

PO(Page Object)模式是一种在自动化测试中广泛使用的设计模式。

其主要思想是将页面元素的操作和页面的业务逻辑封装到一个单独的类中,以提高测试代码的可读性、可维护性和可重用性。

PO 模式的优点包括:

  1. 减少代码重复:相同页面的操作只需在对应的页面对象中定义一次。
  2. 提高代码可读性:测试用例专注于业务流程,而页面操作的细节被隐藏在页面对象中。
  3. 便于维护:如果页面元素或操作有变化,只需在相应的页面对象中进行修改。

2. PO模式应用

  1. PO模式可以把一个页面分为三层,对象库层、操作层、业务层。
    • 对象库层:封装定位元素的方法。
    • 操作层:封装对元素的操作。
    • 业务层:将一个或多个操作组合起来完成一个业务功能。比如登录:需要输入帐号、密码、点
      击登录三个操作。
  1. 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

  1. 下载:前往Oracle官网或国内镜像站(如华为镜像),下载JDK 1.8及以上版本,安装过程中选择合适路径,避免中文和空格。
  2. 配置环境变量:右键点击“此电脑”,选择“属性”,进入“高级系统设置”,点击“环境变量”。新建“JAVA_HOME”变量,变量值为JDK安装路径;编辑“Path”变量,添加%JAVA_HOME%\bin
  3. 验证:在命令提示符输入“java -version”,显示版本信息则安装成功。

2. 安装Android SDK

  1. 下载:访问Android SDK官网,下载SDK安装包。
  2. 安装与配置环境变量:解压到指定目录,新建“ANDROID_HOME”变量,变量值为SDK解压路径;编辑“Path”变量,添加%ANDROID_HOME%\platform-tools%ANDROID_HOME%\build-tools%ANDROID_HOME%\tools等目录(用英文分号隔开)。
  3. 验证:在命令提示符输入“adb”和“adb devices”,能正确显示相关信息则安装成功。

3. 安装安卓模拟器

可选择夜神模拟器、天天模拟器、Genymotion、网易MUMU等。以夜神模拟器为例:

  1. 下载安装:访问夜神模拟器官网,下载并安装。
  2. 配置:开启模拟器的开发者模式,在模拟器中,进入“设置”->“关于手机”->连续点击“版本号”5次激活开发者选项,接着在“设置”->“开发者选项”中启用USB调试。将Android SDK中的platform-tools文件夹下的adb.exe文件拷贝到夜神模拟器安装路径下的bin目录下,覆盖原有的adb文件。

4. 安装Node.js

  1. 下载:访问Node.js官网,下载适合Windows系统的安装包。
  2. 安装:点击安装包,按照提示点击“Next”按钮,勾选“I accept the terms in the License Agreement”,可自定义安装路径,之后默认点击“Next”,再点击“install”和“finish”完成安装。
  3. 验证:打开命令提示符,输入“node -v”,显示版本号则安装成功。

5. 安装Appium

有客户端安装和远程安装两种方式,推荐客户端安装。

  1. 客户端安装:前往Appium官网下载Windows安装包,选择第一个选项点击“安装”,点击“完成”。双击打开Appium客户端,host输入127.0.0.1,Appium默认端口是4723,点击“Start Server”开启服务。
  2. 远程安装:在命令提示符中输入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

  1. 下载:访问Python官网,下载适合Windows系统的安装包。
  2. 安装:运行安装包,在安装过程中,建议勾选“Add Python to PATH”,将Python添加到环境变量。
  3. 验证:打开命令提示符,输入“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 的启动日志信息,显示服务器是否成功启动以及相关的配置信息等。

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>是测试脚本的文件名。
  • 使用测试框架:若使用unittestpytest等测试框架来组织和管理测试用例,可在命令行中执行相应的命令来运行测试套件。如使用unittest时,可在命令行中执行python -m unittest discover -s tests -p "test_*.py",其中tests是测试用例所在的目录,test_*.py是测试用例文件的命名模式。

查看测试结果

  • 查看控制台输出:在运行脚本的控制台中,查看测试执行过程中的输出信息,包括测试用例的执行情况、断言结果等。若测试失败,会显示详细的错误信息和堆栈跟踪,帮助定位问题。
  • 生成测试报告:可使用HTMLTestRunner等工具生成HTML格式的测试报告,直观地展示测试结果,包括测试用例的执行时间、通过率、失败用例的详细信息等。

http://www.ppmy.cn/server/171041.html

相关文章

Flutter 介绍及安装使用

Flutter 安装 1. 镜像的配置 Flutter 源站在国内可能不太稳定&#xff0c;因此谷歌中国开发者社区(GDG)专门搭建了临时镜像&#xff0c;使得我们的 Flutter 命令行工具可以到该镜像站点下载所需资源。 使用方法 Flutter SDK 默认从 Github 获取更新&#xff0c;如您访问 Github…

esp8266 rtos sdk开发环境搭建

1. 安装必要的工具 1.1 安装 Git Git 用于从远程仓库克隆代码&#xff0c;你可以从Git 官方网站下载 Windows 版本的安装程序。安装过程中可保持默认设置&#xff0c;安装完成后&#xff0c;在命令提示符&#xff08;CMD&#xff09;或 PowerShell 中输入git --version&#…

二十三种设计模式详解

二十三种设计模式是软件开发中用于解决常见问题的经典解决方案&#xff0c;它们由 Erich Gamma 等四位作者在《设计模式&#xff1a;可复用面向对象软件的基础》一书中提出。这些模式分为三大类&#xff1a;创建型模式、结构型模式 和 行为型模式。 1. 创建型模式&#xff08;…

seasms v9 注入漏洞 + order by注入+​information_schema​解决方法

目录 一、当注入时&#xff0c;information_schema被禁用的解决方法 1.通过sys库可以获取到表名和库名 2.通过无列名注入join获取列名 二、seasms v9 注入漏洞 三、order by注入 一、当注入时&#xff0c;information_schema被禁用的解决方法 information_schema数据库是My…

【一文入门】shell语法进阶篇

Shell 脚本的进阶语法涉及更复杂的编程结构、数据处理和系统交互。以下是一些进阶的 Shell 编程概念和技巧&#xff0c;帮助你提升编写复杂脚本的能力。 前置知识 【一文入门】shell基础语法 【一文入门】shell语法进阶篇 1. 高级变量操作 间接引用&#xff1a;通过变量名的…

LLM大语言模型私有化部署-使用Dify的工作流编排打造专属AI诗词数据分析师

背景 前面的文章通过 Ollama 私有化部署了 Qwen2.5 (7B) 模型&#xff0c;然后使用 Docker Compose 一键部署了 Dify 社区版平台。 LLM大语言模型私有化部署-使用Dify与Qwen2.5打造专属知识库&#xff1a;在 Dify 平台上&#xff0c;通过普通编排的方式&#xff0c;创建了基于…

轮式机器人在复杂地形中如何选择合适的全局路径规划算法

已思考完成 收起 好的&#xff0c;我现在需要回答用户关于轮式机器人局部路径规划算法的问题。用户之前已经提过这个问题&#xff0c;现在提供了更多的参考内容&#xff0c;我需要仔细分析这些内容&#xff0c;整理出合适的答案。 首先&#xff0c;我需要回顾用户提供的参考内容…

C++ Qt常见面试题(1):Qt信号槽的理解

C++ 中的 Qt 信号槽机制 是 Qt 框架中用于实现组件间通信的核心机制之一。它是一种 观察者模式 的实现,提供了一种安全、灵活且松耦合的方式来连接对象和处理事件。下面从10个方面来介绍C++ Qt信号槽的原理及使用技巧。 一. Qt信号槽机制的基本概念 信号(Signal):对象中定义…