PageObject+Python+Appium

本文介绍了使用PageObject模式结合Python和Appium构建的自动化测试框架。该框架支持unittest参数化、YAML数据维护、Excel测试报告,同时具备多设备并行测试和WebView支持。文章通过详细步骤展示了第一次启动app和登录功能的测试实例,提供代码入口及结果展示。

目录

前言:

简介

功能

常用目录

配置

实例 - 第一次启动 app

实例 - 登录

代码入口实例

结果展示


前言:

Page Object模式是一种常用的设计模式,用于组织和管理自动化测试脚本中的页面对象。它将页面的元素和操作封装在一个独立的类中,使测试脚本更加模块化、可维护和可重用。

简介

  • 基于 appium+python3 封装的自动化测试框架

功能

  • python3
  • unittest 参数化
  • pageobject
  • 数据维护用的 YMAL
  • excel 的测试报告
  • 支持多设备 andoird 并行
  • 支持 webview

常用目录

  • Base 封装常用方法
  • Log 记录不同设备的操作用例的日志,操作失败的截图
  • PageObject 放 page
  • test 目录写测试用例
  • runner 运行入口

配置

配置 run.yaml

app: Jianshu.apk

配置 devices.yaml

- devices:  emulator-5554
  port: 4724
  config: appium --session-override  -p 4724 -bp 4734 -U  emulator-5554
  platformName: android
- devices: DU2TAN15AJ049163
  port: 4725
  config: appium --session-override  -p 4725 -bp 4735 -U  DU2TAN15AJ049163
  platformName: android

实例 - 第一次启动 app

配置用例 yaml

testinfo:
    - id: test001
      title: 第一次打开
testcase:
    - operate_type: swipeLeft
      time: 4
      element_info: android.widget.ImageView
      find_type: class_name
    - element_info: com.jianshu.haruki:id/tv_enter
      find_type: id
      operate_type: click
check:
    - element_info: com.jianshu.haruki:id/btn_login
      find_type: id

PageObject

class FirstOpen:
    '''
    kwargs: WebDriver driver, String path(yaml配置参数)
    isOperate: 操作失败,检查点就失败
    testInfo:
    testCase:
    '''

    def __init__(self, **kwargs):
        self.driver = kwargs["driver"]
        self.path = kwargs["path"]
        self.operateElement = OperateElement(self.driver)
        self.isOperate = True
        self.testInfo = getYam(self.path)["testinfo"]
        self.testCase = getYam(self.path)["testcase"]


    '''
    操作步骤
    logTest 日记记录器
    '''

编写使用 AppiumPython 的自动化测试脚本,需要遵循一套完整的指南,包括环境搭建、脚本编写、测试执行等步骤。以下是详细的编写指南: ### 环境搭建 在开始编写脚本之前,需要确保已经安装并配置好了 AppiumPython 的运行环境: - 安装 Python:确保你的系统中已经安装了 Python 3.x 版本。可以通过 Python 官方网站下载安装包。 - 安装 Appium:可以通过 npm 安装 Appium 服务器,命令为 `npm install -g appium`。 - 安装 Appium Python 客户端:通过 pip 安装 AppiumPython 库,命令为 `pip install Appium-Python-Client`。 - 配置设备环境:根据测试目标设备(Android 或 iOS)安装相应的 SDK 或 Xcode 工具链[^4]。 ### 初始化测试会话 Appium 测试脚本的核心是通过 WebDriver 启动一个会话,与设备或模拟器进行交互。需要设置所需的 `desired capabilities`,这些参数描述了测试设备和应用的基本信息。例如: ```python from appium import webdriver desired_caps = { 'platformName': 'Android', 'deviceName': 'emulator-5554', 'appPackage': 'com.example.app', 'appActivity': '.MainActivity' } driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) ``` 在上述代码中,`platformName` 指定平台类型,`deviceName` 指定设备名称,`appPackage` 和 `appActivity` 指定被测应用的包名和启动 Activity[^1]。 ### 元素定位与操作 编写自动化测试脚本的关键是定位 UI 元素并对其进行操作。Appium 支持多种元素定位方式,包括 `id`、`xpath`、`accessibility id` 等。例如: ```python # 使用 id 定位元素并点击 element = driver.find_element_by_id('com.example.app:id/button') element.click() # 使用 xpath 定位并输入文本 element = driver.find_element_by_xpath('//android.widget.EditText[@text="请输入用户名"]') element.send_keys('test_user') ``` 这些操作模拟了用户在移动应用上的交互行为,如点击、输入等[^3]。 ### 断言与验证 自动化测试中需要对预期结果进行验证,可以使用 Python 的 `unittest` 或 `pytest` 框架进行断言操作。例如: ```python # 使用 unittest 框架进行断言 import unittest class TestExample(unittest.TestCase): def test_login(self): # 假设登录成功后会显示欢迎文本 welcome_text = driver.find_element_by_id('com.example.app:id/welcome').text self.assertEqual(welcome_text, '欢迎,test_user') if __name__ == '__main__': unittest.main() ``` 通过断言可以确保应用在测试过程中行为符合预期[^1]。 ### 测试结束与清理 在测试脚本执行完毕后,需要关闭 Appium 会话并清理资源: ```python # 关闭会话 driver.quit() ``` 这一步确保设备资源被正确释放,避免影响后续测试任务[^2]。 ### 脚本优化与维护 为了提高脚本的可维护性和复用性,可以采用以下策略: - 将 `desired capabilities` 抽象为配置文件。 - 使用 Page Object 模式组织页面元素和操作逻辑。 - 使用日志记录测试过程,便于调试和分析问题。 ### 示例代码 以下是一个完整的 Appium + Python 自动化测试脚本示例: ```python from appium import webdriver from selenium.webdriver.common.by import By import unittest import time class TestApp(unittest.TestCase): def setUp(self): desired_caps = { 'platformName': 'Android', 'deviceName': 'emulator-5554', 'appPackage': 'com.example.app', 'appActivity': '.MainActivity' } self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) def test_login(self): driver = self.driver # 点击登录按钮 login_button = driver.find_element(By.ID, 'com.example.app:id/login_button') login_button.click() time.sleep(1) # 输入用户名 username_field = driver.find_element(By.XPATH, '//android.widget.EditText[@text="用户名"]') username_field.send_keys('test_user') time.sleep(1) # 输入密码 password_field = driver.find_element(By.XPATH, '//android.widget.EditText[@text="密码"]') password_field.send_keys('123456') time.sleep(1) # 提交登录表单 submit_button = driver.find_element(By.ID, 'com.example.app:id/submit_button') submit_button.click() time.sleep(2) # 验证登录成功 welcome_text = driver.find_element(By.ID, 'com.example.app:id/welcome_text').text self.assertEqual(welcome_text, '欢迎,test_user') def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main() ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值