当前位置: 首页 > news >正文

APP自动化实战

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 = by
		self.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格式的测试报告,直观地展示测试结果,包括测试用例的执行时间、通过率、失败用例的详细信息等。

相关文章:

  • c++ 三维图形 R树的简单应用案例
  • 鸿蒙5.0实战案例:基于RichEditor的评论编辑
  • 鸿道Intewell操作系统的Linux实时拓展方案
  • 组态软件在物联网中的应用
  • TFChat:腾讯大模型知识引擎(DeepSeek R1)+飞书机器人实现AI智能助手
  • Java中的缓存技术:Guava Cache vs Caffeine vs Redis
  • w803|联盛德|WM IoT SDK2.X测试|window11|VSCODE|(4):IDE配置
  • Spark内存迭代计算
  • .Net 9下使用Tensorflow.net---DNN_Eager
  • RabbitMQ死信队列
  • 「云原生」「云原生应用的构建与部署」
  • 阻抗和电阻
  • Linux提权之docker提权(十三) 链接第八篇完整版
  • 如何在docker上部署java服务
  • 学习路之PHP --TP6异步执行功能 (无需安装任何框架)
  • Linux 日志系统·
  • 蓝桥杯手把手教你备战(C/C++ B组)(最全面!最贴心!适合小白!)
  • Linux提权之详细总结版(完结)
  • (八)趣学设计模式 之 装饰器模式!
  • 【阮一峰】19.类型工具
  • 中国建设网官方网站硅灰/百度推广投诉电话
  • 网站建设海报/关键词查询网站的工具
  • 广告公司怎么做/北京seo推广服务
  • 建设银行网站查询工资/微信crm客户管理系统
  • wordpress 没有样式/对网站提出的优化建议
  • 网站开发运营人员职业前景/网络外贸推广