【App自动化测试】(三)使用Appium进行自动化用例录制

news2025/2/24 7:06:05

目录

  • 1. Appium Inspctor 功能
  • 2. Appium inspector 页面结构
  • 3. 使用Appium Inspctor 进行用例录制
    • 3.1 获取 app 的信息
    • 3.2 配置待测应用
    • 3.3 使用Appium Inspector进行自动化脚本录制
      • 3.3.1 操作步骤
      • 3.3.2 自动化测试用例结构分析
        • 3.3.2.1 Appium Inspector生成用例脚本
        • 3.3.2.2 对Appium Inspector生成用例脚本进行优化
        • 3.3.2.3 完整代码


前言
本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 😘


⁉️ 提醒:
appium-desktop 版本>1.22后,appium inspctor和appium-desktop 分离,需要单独下载安装并进行相关配置。

appium-inspector 下载地址:https://github.com/appium/appium-inspector/releases

appium-inspector 安装教程:https://blog.csdn.net/delia_1/article/details/122247259

1. Appium Inspctor 功能

  1. UI 分析
  2. 录制用例
  3. 元素查找测试
  4. Attcah 已有的 session
  5. 云测试

2. Appium inspector 页面结构

在这里插入图片描述
功能键说明(与图中标记序号匹配):

  1. Native App Mode:原生应用模式
  2. Web/Hybrid App Mode:网页/混合应用模式
  3. SelectElements:选中元素,查看层级和属性
  4. Swipe By Coordinates:通过坐标点滑动
  5. Tap By Coordinates:通过坐标点点击
  6. Back:返回
  7. Refresh Source & Screenshot:刷新页面
  8. StartRecording:开始录制脚本
  9. Search for element:搜索元素
  10. Quit Session & Close Inspector:退出当前 Session

3. 使用Appium Inspctor 进行用例录制

3.1 获取 app 的信息

  1. 两种方法获取app入口:
  • 方法一:通过 logcat 日志获取
#mac/Linux:  
adb logcat ActivityManager:I | grep "cmp"

#Windows:
adb logcat ActivityManager:I | findstr "cmp" 

#先执行命令,后启动目标应用

示例1:Windows系统下获取Api Demos的app入口
在这里插入图片描述

  • 方法二:通过 aapt 获取
#mac/Linux: 
aapt dump badging 安装包路径  | grep launchable-activity

#Windows: 
aapt dump badging 安装包路径  | findstr launchable-activity

示例2:Windows系统下查看 Api Demos的app入口
在这里插入图片描述
2. App启动应用命令:

adb shell am start -W -n <package-name>/<activity-name> -S

3.2 配置待测应用

在这里插入图片描述

  • platformName:平台,Android/iOS

  • deviceName:设备名

    • 使用命令 adb devices 可以获取到设备名称
      在这里插入图片描述
  • appPackage:应用的包名

  • appActivity:应用的页面名 Activity

  • noReset: 防止清空缓存信息

3.3 使用Appium Inspector进行自动化脚本录制

3.3.1 操作步骤

在这里插入图片描述

  1. 下载官方 Demo apk(https://github.com/appium-boneyard/sample-code)

  2. 安装 API Demo.apk

  3. 录制用例:

    1. 待测应用配置好后,使用Appium Inspector连接移动端设备
    2. 连接成功后,点击录制按钮(图中1标记的按钮)
    3. 在Appium Inspector中,选中 【OS】元素,点击Tap按钮,进行点击操作,进入下个界面
    4. 选中【Morse Code】元素,点击Tap按钮,进行点击操作,进入下一个界面
    5. 选中输入框,点击Send Keys按钮,输入内容【测试人】
    6. 点击Appium Inspector上的Back按钮,返回上一个页面
    7. 再进行返回上一个页面的操作
    8. 最后返回到app首页

3.3.2 自动化测试用例结构分析

3.3.2.1 Appium Inspector生成用例脚本

el1 = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="OS")
el1.click()
el2 = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="Morse Code")
el2.click()
el3 = driver.find_element(by=AppiumBy.ID, value="io.appium.android.apis:id/text")
el3.send_keys("测试人")
driver.back()
driver.back()
driver.back()

3.3.2.2 对Appium Inspector生成用例脚本进行优化

  1. 添加 capability 信息
  2. 初始化webdriver,添加setupteardown
  3. 添加隐式等待和noReset属性增强用例稳定性
  4. 添加断言

注意

  • selenium 版本建议 3.141.0
  • appium-python-client 版本建议 1.2.0

3.3.2.3 完整代码

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy

class TestXueQiu:
    def setup(self):
        # 创建一个字典
        desire_cap = {}
        # 平台
        desire_cap['platform'] = 'Android'
        # 设备名
        desire_cap['deviceName'] = '127.0.0.1:7555'
        # app 包名
        desire_cap['appPackage'] = 'io.appium.android.apis'
        # app 页面名
        desire_cap['appActivity'] = '.ApiDemos'
        desire_cap['noReset'] = 'true'
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)
        self.driver.implicitly_wait(10)

    def teardown(self):
        # 回收session
        self.driver.quit()

    def test_api_demo(self):
        """
        1、打开 API demo apk
        2、点击 OS 控件
        3、点击 Morse Code 控件
        4、在搜索框中输入 测试人
        5、返回到第一页
        6、断言
        :return:
        """
        # 点击 OS 控件
        self.driver.find_element(AppiumBy.ACCESSIBILITY_ID,"OS").click()
        # 点击 Morse Code 控件
        self.driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Morse Code").click()
        # 输入`测试人`
        el=self.driver.find_element(AppiumBy.ID,"io.appium.android.apis:id/text")
        el.clear()
        el.send_keys("测试人")
        # 返回到app首页
        self.driver.back()
        self.driver.back()
	self.driver.back()
        # 选择元素进行断言
        result = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID,"Accessibility")
        print(result.text)
        # 断言
        assert result.text == "Accessibility"


文末说明:
接口测试中我们很容易混淆Session、cookie和token,你知道他们有什么区别吗?

快来跟我一起看,一篇文章让你了解三者的区别。😎
⬇⬇⬇⬇⬇⬇⬇
👍👍👍:接口测试经典面试题:Session、cookie、token有什么区别?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-难点突破(C++实现并查集+路径优化,详解哈夫曼编码树)

文章目录1. 并查集2. 哈夫曼编码树1. 并查集 并查集是一个多棵树的集合&#xff08;森林&#xff09;。 并查集由多个集合构成&#xff0c;每一个集合就是一颗树。 并&#xff1a;合并多个集合。查&#xff1a;判断两个值是否再一个集合中。 每棵树存在数组中&#xff0c;使…

js 中的 Event Loop 以及 宏任务 与 微任务

目录前言1、JS 的 执行引擎 与 执行环境2、js 是单线程的一、事件循环&#xff08;Event Loop&#xff09;二、任务队列三、宏任务 与 微任务1、宏任务2、微任务3、宏任务与微任务的运行机制四、Event Loop 实例案例一案例二前言 1、JS 的 执行引擎 与 执行环境 简单来说&…

SpringCloud微服务(八)——OpenFeign服务调用

OpenFeign服务调用 SpringCloud github官网&#xff1a;https://github.com/spring-cloud/spring-cloud-openfeign Feign是一个声明式的Web Service客户端。它的出现使开发Web Service客户端变得很简单。使用Feign只需要创建一个接口加上对应的注解&#xff0c;比如&#xf…

基于java+springboot+mybatis+vue+elementui的人职匹配推荐系统

项目介绍 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;对于人职匹配推荐系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了人职匹配推荐系统&#xff0c;它彻底改变…

分享一下前几个月我做的超炫的登录页面

先给大家看看登录页面的效果演示 这个登录页面分为三个部分&#xff08;页面切换&#xff1a;连续按五次V&#xff0c;大小写都可以&#xff09; 第一个&#xff08;最初的鱼儿游动页面&#xff09; 登录、切换页面、和鱼儿游动这个页面的代码就不放在这里了&#xff0c;这个虽…

RabbitMQ 入门案例项目

写在前面 本文不作消息队列的实现原理、异步处理优劣、rabbitmq安装说明、消息工作模式等内容分析&#xff0c;只讲述rabbitmq实际开发中的步骤说明&#xff0c;帮助同学快速上手体验消息队列的使用。 本文使用SpringAMQP&#xff0c;并非rabbitmq官方文档上的原生http请求连…

Jupyter notebook在超算平台上使用的详细教程

Jupyter Notebook 的本质是一个 Web 应用程序&#xff0c;便于创建和共享文学化程序文档&#xff0c;支持实时代码&#xff0c;数学方程&#xff0c;可视化和 markdown。 用途包括&#xff1a;数据清理和转换&#xff0c;数值模拟&#xff0c;统计建模&#xff0c;机器学习等等…

LeetCode 数据结构与算法:最大子数组和

打开我的题库&#xff0c;调为简单难度。 计算最大子数&#xff0c;直接给我难住。 报错铺满屏幕&#xff0c;凝望没有思路。 缝缝补补做出&#xff0c;击败零个用户。 翻阅评论找补&#xff0c;令我勃然大怒。 打开思维第一步&#xff0c;编写代码求数组&#xff0c; …

报错解决:Process finished with exit code -1073741819 (0xC0000005)

简单记录一下程序异常终止&#xff0c;抛出 Process finished with exit code -1073741819 (0xC0000005) 的解决方法。 一、程序中文件位置错误/缺少文件 位置错误1&#xff1a;如果使用相对路径的话&#xff0c;推荐换成绝对路径进行排查。位置错误2&#xff1a;如果使用了o…

CAN总线协议测试拓扑图

记录测试CAN总线协议&#xff0c; CAN总线目前主要应用在汽车。 记录在PC使用USB-CAN连接测试

Talk预告 | Salesforce AI研究院研究科学家徐嘉诚:文本生成中的结构化解码

本期为TechBeat人工智能社区第457期线上Talk&#xff01; 北京时间11月23日(周三)20:00&#xff0c;Salesforce AI研究院研究科学家——徐嘉诚的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “文本生成中的结构化解码”&#xff0c;届时将详细讲解…

学会用数据分析汇报工作,升职加薪指日可待

你是否每天的八小时工作时长&#xff0c;分成八瓣用&#xff0c;却仍被领导安排众多工作&#xff1f;明明做了很多事&#xff0c;领导依旧认为工作量不饱和&#xff1f;这样的现象在职场中早已司空见惯&#xff0c;不足为奇了&#xff0c;但是究其原因是什么呢&#xff1f;工作…

Android App网络通信中通过runOnUiThread快速操纵界面以及利用线程池Executor调度异步任务实战(附源码 简单易懂)

运行有问题或需要源码请点赞关注收藏后评论区留言私信~~~ 一、通过runOnUiThread快速操纵界面 因为Android规定分线程不能够直接操纵界面&#xff0c;所以它设计了处理程序工具&#xff0c;由处理程序负责在主线程和分线程之间传递数据&#xff0c;如果分线程想刷新界面&#…

精心整理16条MySQL使用规范,减少80%问题

1. 禁止使用select * 阿里开发规范中&#xff0c;有这么一句话&#xff1a; **select *** 会查询表中所有字段&#xff0c;如果表中的字段有更改&#xff0c;必须修改SQL语句&#xff0c;不然就会执行错误。 查询出非必要的字段&#xff0c;徒增磁盘IO和网络延迟。 2. 用小表…

小学生python游戏编程arcade----敌人精灵上方显示方框及子弹显示问题

小学生python游戏编程arcade----敌人精灵上方显示方框及子弹显示问题前言1、敌人精灵上方显示方框1.1 修改enemy_tank类1.2 引用1.3 效果图2、调整方法2.1 类方法2.2 类的引用2.3 效果图2.4 大小位置调整后3、子弹过线自动消失3.1 子弹的更新中3.2 原因查到&#xff0c;把以下代…

day11 多级缓存

day11 多级缓存 1、什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后&#xff0c;先查询Redis&#xff0c;如果未命中则查询数据库&#xff0c;如图&#xff1a; 存在下面的问题&#xff1a; 请求要经过 Tomcat 进行处理&#xff0c;Tomcat 的性能成为整个系统的瓶颈Red…

数字孪生助力轨道交通安保可视化应用

截至2020年12月31日&#xff0c;全国&#xff08;不含港澳台&#xff09;共有44个城市开通运营城市轨道交通线路233条&#xff0c;运营里程7545.5公里&#xff0c;车站4660座&#xff0c;完成客运量175.9亿人次&#xff0c;进站量109.1亿人次。针对轨道交通地铁站内日常监测、事…

牛客网语法篇练习分支控制(一)

1.据说智商140以上者称为天才&#xff0c;KiKi想知道他自己是不是天才&#xff0c;请帮他编程判断。输入一个整数表示一个人的智商&#xff0c;如果大于等于140&#xff0c;则表明他是一个天才&#xff0c;输出“Genius”。 while True:try:a int(input())if a >140:print…

云原生加速器企业维格表创始人陈霈霖:提供人人可用的数字化转型全新方案,真正驱动组织创新

看上去是像Excel一样的在线协同表格&#xff0c;却能把文件、表格、图片、视频、填表单等变换出各种视图&#xff0c;它能帮助你高效方便的管理各种零碎的信息和数据&#xff1b;也能根据你的想法DIY各种功能&#xff0c;5分钟即可搭建一个适合自己的文档管理系统&#xff0c;实…

C#上位机系列(1)—项目的建立

本文是讲解C#.net平台的Winform框架下的第一个内容&#xff0c;手把手介绍项目的创建方式以及一些写软件时常用的功能。之前写过一篇关于示波器的比较抽象&#xff0c;本文讲解从零开始的每一个步骤。 VS2022以及C#.net平台的Winform框架自行百度下载。 1.创建一个新的项目 …