APP自动化测试-Appium进阶

本文探讨了Appium高级操作,如触屏模拟、网络切换、截图与录屏,以及自动化关键数据记录。重点介绍了如何处理弹窗异常、打造测试框架的价值和功能,包括日志管理、报告生成和多设备并发支持。此外,还涉及参数化与数据驱动测试的实践应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Appium进阶

触屏操作

TouchActions官方地址
appium2.0+ 触屏操作方法:待补充
appium官网文档

模拟来电

self.driver.make_gsm_call(‘5551234567’, GsmCallActions.CALL)

模拟来短信

self.driver.send_sms(‘555-123-4567’, ‘Hey lol’)

模拟网络切换

self.driver.set_network_connection(1)
在这里插入图片描述

截图

self.driver.get_screenshot_as_file(‘./photos/img.png’)

录屏

self.driver.start_recording_screen()

self.driver.stop_recording_screen()

自动化关键数据记录

  • 行为日志
    使用 python 自带的 logging 模块
    使用 pytest.ini 配置日志开关与格式
    pytest.ini 文件配置日志级别,保存地址等内容。
    注意:windows系统 需要把中文 注释去掉。
[pytest]
;日志开关 true false
log_cli = true
;日志级别
log_cli_level = info
;打印详细日志,相当于命令行加 -vs
addopts = --capture=no
;日志格式
log_cli_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
;日志时间格式
log_cli_date_format = %Y-%m-%d %H:%M:%S
;日志文件位置
log_file = ./log/test.log
;日志文件等级
log_file_level = info
;日志文件格式
log_file_format = %(asctime)s [%(levelname)s] %(message)s (%(filename)s:%(lineno)s)
;日志文件日期格式
log_file_date_format = %Y-%m-%d %H:%M:%S
import codecs

def ReadFile(filePath, encoding="utf-8"):
    with codecs.open(filePath, "r", encoding) as f:
        return f.read()

def WriteFile(filePath, u, encoding="gbk"):
    with codecs.open(filePath, "w", encoding) as f:
        f.write(u)

def UTF8_2_GBK(src, dst):
    content = ReadFile(src, encoding="utf-8")
    WriteFile(dst, content, encoding="gbk")

UTF8_2_GBK('pytest_utf8.ini', 'pytest.ini')
  • 截图
方法名描述
get_screenshot_as_file(filename)保存图片为.png 格式,filename 图片路径
save_screenshot(filename)保存图片为.png 格式,filename 图片路径
get_screenshot_as_png()保存图片为二进制格式
get_screenshot_as_base64()将图片保存为 base64 格式。通常用在 html 里添加截图
  • 页面源码
    通过获取页面源码,分析页面的 dom 结构
    driver.page_source
    打印当前页面为xml
    print(self.driver.page_source)

自动化测试实战

思路:

  • 梳理测试用例:梳理用例流程、前置后置
  • 构造po模型:创建页面相关的类和方法
  • 编写测试用例:根据业务逻辑编写、链式调用
  • 填充具体实现:实现的时候BasePage进行封装
  • 优化用例:封装样板代码、提取页面元素、添加起始页面的url。。

PO 模型类图,分为三层:

  • 具体业务层
  • 公共业务层
  • 和业务无关的公共方法层
    在这里插入图片描述

app 弹窗异常处理

运行过程中不定时弹框:广告、升级提示、短信、、、、弹框不是bug
try:
find
except:
处理异常逻辑
异常逻辑:黑名单机制,遍历黑名单,如果发现黑名单弹框,则点掉,继续执行find方法;如果达到最大查找次数,还是异常,则抛出NoSuchException错误信息。

装饰器
对原有函数的功能增强
不改变原有函数的逻辑
使代码更简洁、易维护

测试框架

打造测试框架的需求与价值

领域模型适配:封装业务实现,实现业务管理
提高效率:降低用例维护成本,提高执行效率
增强功能:解决已有框架不满足的情况

自动化框架应具备的功能

支持管理用例,运行用例
支持查找元素/定位元素,对元素/页面 进行各种操作(点击,滑动,输入等等)
支持生成测试报告
能够实现功能的复用,(比如登录,搜索等)
当页面有异常弹框的时候,可以进行有效的处理
当用例失败,需要添加失败时的日志,截图,等信息,放在测试报告中
多设备并发
支持平台化

自动化测试框架实现

功能实现
管理用例,运行用例pytest
查找元素/定位元素Appium
测试报告Allure
功能复用PO 实现
异常弹框编写代码
失败时的日志,截图编写代码
多设备并发selenium grid
平台化VUE+FLASK/Django

项目结构

在这里插入图片描述
为什么要封装框架?复用*平台化*

增强功能

  • 异常处理(弹窗黑名单)

  • 日志记录\运行日志记录\错误日志记录

  • 报告生成:
    异常日志
    异常截图
    测试用例步骤
    测试描述
    bug,issue 关联
    用例分类(feature,story,step 等)

pip install allure-pytest
pytest test_xxx.py --alluredir=./result
allure serve ./result

  • 参数化与数据驱动:
    支持支持测试用例 / 步骤层级的参数化驱动配置
    配置方式包括三个部分
    参数定义(指定名字)
    数据源指定(指定 yaml 文件 /或者其它格式文件)
    数据源准备(无论是从线上环境 捞的数据,还是自己创建的测试数据)

减少冗余代码\集中管理测试数据\便于维护

  • 总结
    自动化测试框架应具备的功能
    自动化测试框架优化(在 PO 的基础上,添加异常处理,日志,报告 ,截图,参数化与数据驱动等)逐步的将框架完善
<think>好的,我现在需要帮助用户寻找关于Python Selenium和Appium进行自动化测试的教程、示例和用法。首先,我应该回忆用户提供的引用内容,看看是否有相关的资料可以推荐。 用户提到了引用[2]和引用[5],其中引用[2]详细介绍了Python+Appium的使用步骤,包括环境准备和示例代码,这可能是一个好的起点。引用[5]提到了安装Appium-Python-Client依赖包,这也是使用Appium的必要步骤。另外,引用[3]和引用[4]涉及到了Toast信息的获取和滑动操作,这些可能是实际测试中的常见需求,应该包含在教程或示例中。 接下来,我需要组织这些信息,按照用户的要求结构清晰,分步骤说明。可能需要分为环境搭建、基础用法、进阶操作和示例代码几个部分。同时,要确保所有数学公式和独立公式符合格式要求,不过在这个问题中可能涉及的不多,但代码块需要正确展示。 用户可能需要具体的代码示例,比如如何启动Appium驱动,定位元素,以及执行滑动操作。引用[4]中的滑动示例可以直接用代码展示。此外,引用[3]提到的Toast信息获取需要安装uiautomator2,这也需要特别说明。 还要注意引用标识的正确添加,比如在提到环境准备时引用[2],在安装依赖时引用[5],滑动操作引用[4],Toast部分引用[3]。同时,用户可能对Selenium和Appium的区别以及如何结合使用有疑问,需要简要说明两者的应用场景。 最后,生成相关问题,确保问题与用户查询的主题相关,涵盖教程推荐、环境配置、元素定位、区别对比、常见问题等。检查所有链接是否有效,但根据用户提供的引用,可能不需要外部链接,而是引用已有的站内引用。 需要确保回答使用中文,结构清晰,代码示例正确,并且自然融入引用标识。现在整理这些思路,形成连贯的回答。</think>### Python Selenium与Appium自动化测试指南 #### 一、环境搭建 1. **Selenium环境** - 安装Python的Selenium库:`pip install selenium` - 下载浏览器驱动(如ChromeDriver),并配置环境变量[^2]。 2. **Appium环境** - 安装Node.js和Appium:`npm install -g appium` - 安装Appium客户端库:`pip install Appium-Python-Client`[^5] - 配置Android SDK和模拟器/真机调试环境[^2]。 --- #### 二、基础用法 **1. Selenium示例(Web自动化)** ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.baidu.com") search_box = driver.find_element("id", "kw") search_box.send_keys("自动化测试") driver.quit() ``` **2. Appium示例(移动端自动化)** ```python from appium import webdriver desired_caps = { "platformName": "Android", "deviceName": "emulator-5554", "appPackage": "com.android.calculator2", "appActivity": ".Calculator" } driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps) driver.find_element("id", "digit_5").click() driver.quit() ``` --- #### 三、进阶操作 1. **元素定位策略** - 使用ID、XPath、ClassName等定位方式,如Appium中`driver.find_element("xpath", "//Button[@text='OK']")`。 2. **滑动操作** ```python # 向上滑动屏幕(引用Appium扩展命令) driver.execute_script('mobile: swipe', {'direction': 'up'}) [^4] ``` 3. **Toast信息捕获** - 需安装uiautomator2驱动:`cnpm install appium-uiautomator2-driver` [^3] - 使用XPath定位Toast:`driver.find_element("xpath", "//*[@text='登录成功']")` --- #### 四、核心区别与应用场景 | 工具 | 适用平台 | 典型场景 | |---------|-----------|-------------------------| | Selenium| Web浏览器 | 网页功能测试、表单提交 | | Appium | 移动端APP | 移动应用UI测试、手势操作 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

balahalalala

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值