APP自动化测试-Appium进阶

  • Post author:
  • Post category:其他

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 的基础上,添加异常处理,日志,报告 ,截图,参数化与数据驱动等)逐步的将框架完善

版权声明:本文为weixin_43687367原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。