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

news/2024/4/30 11:27:58/文章来源:https://blog.csdn.net/gjj920318/article/details/127996223

目录

  • 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 AppiumByclass 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):# 回收sessionself.driver.quit()def test_api_demo(self):"""1、打开 API demo apk2、点击 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.luyixian.cn/news_show_224378.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5个常见的JavaScript内存错误

JavaScript 不提供任何内存管理操作。相反&#xff0c;内存由 JavaScript VM 通过内存回收过程管理&#xff0c;该过程称为垃圾收集。 既然我们不能强制的垃圾回收&#xff0c;那我们怎么知道它能正常工作&#xff1f;我们对它又了解多少呢&#xff1f; 脚本执行在此过程中暂停…

作业-11.22

1、TCP服务器和客户端交互 服务器 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <string.h> #include <unistd.h> #define ERR_MSG(msg) do{\ …

CubeMX+VSCode+Ozone的STM32开发工作流(二)VSCode环境配置

neozng1hnu.edu.cn 本教程的示例代码是笔者参加RoboMaster机甲大师赛为机器人编写的控制器框架&#xff0c;你可以直接克隆仓库&#xff0c;阅读仓库下的Markdown文档获得更好的体验&#xff0c;记得点一个小⭐: basic_framework: basic_framework (gitee.com)所有安装包也可以…

Go:日志滚动(rolling)记录器 lumberjack 简介

文章目录简介简单使用1. Logger 结构体2. backup日志文件的文件名3. 获取文件句柄4. 日志文件backup5. 日志滚动后处理6. 收集旧日志文件7. 后处理小结简介 lumberjack是一个日志滚动记录器。写入lumberjack的日志达到一定的条件后会进行存档&#xff08;普通文件的形式&#…

基于机器学习的自动音乐生成播放器

目录 详细设计说明书 1 1 引言 1 1.1 编写目的 1 1.2 背景 1 2. 此项目的任务提出者&#xff1a;西电软件工程课程组、西电软件开发小组 1 1.3 定义 2 1.4 参考资料 2 3 程序描述 4 3.1 011 参数调整模块 4 3.1.3 界面设计 4 3.1.4 参数调整的内部逻辑 5 3.2 012 自动谱曲模块 …

求斐波那契数(递归,非递归)

目录 一、斐波那契数&#xff1f; 二、递归实现求第n个斐波那契数 2.1代码与运行结果 2.1.1图解递归过程 三、非递归求法 3.1为什么不用递归求法 3.2非递归 一、斐波那契数&#xff1f; 它指的是这样的数列&#xff1a;1&#xff0c;1&#xff0c;2&#xff0c;3&#xff0…

【sfu】回调接收测拼装的H264 帧

sfu 基于webrtc协议栈,【webrtc】rtp包组帧 :涉及到收到rtp包到组帧、传递给Frame处理直到解码器的流程。帧就是从解码器导出的。我们只需要注册1个外部解码器就可以拿到编码后的H264 帧,给到其他流程处理。调用堆栈:我这里创建一个null 的解码器: AdapterDecoder int32_t …

Python连接MYSQL、SQL Server、Oracle数据入库一网打尽

描述&#xff1a; Python众所周知用来数据提取&#xff0c;通俗说用来抓数据&#xff0c;将拿到的数据进行数据清洗、加工,分析等等。而其中最重要的部分就是数据爬取、数据入库这两部分了&#xff0c;至于数据分析那就特别考察你的SQL能力&#xff0c;如果是自己设计页面&…

【SpringCloud】04 网关springcloud gateway

网关springcloud gateway 上面的架构&#xff0c;会存在着诸多的问题&#xff1a; 客户端多次请求不同的微服务&#xff0c;增加客户端代码或配置编写的复杂性 认证复杂&#xff0c;每个服务都需要独立认证。 存在跨域请求&#xff0c;在一定场景下处理相对复杂。 网关可以做…

java项目-第157期ssm毕业生就业信息管理系统-java毕业设计_计算机毕业设计

java项目-第157期ssm毕业生就业信息管理系统-java毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm毕业生就业信息管理系统》 该项目分为4个角色&#xff0c;管理员、用户、导师、企业。 用户可以浏览前台,比如招聘信息&#xff0c;进行简历投递。 导…

C++编程进阶

目录 new运算符 new关键字的使用案例 C的引用 C中引用案例 引用的注意事项 引用做函数参数 引用做函数的返回值 前言&#xff1a; 具体案例 引用的本质 常量引用 常量引用原理 经典案例 函数的提高 函数的默认参数 注意&#xff1a; 具体案例 函数的占位参数…

数据库:Centos7安装解压版mysql5.7图文教程,亲测成功

目录 1、卸载Centos7默认自带的mariadb数据库&#xff0c;避免冲突 2、下载解压版mysql并安装 3、配置mysql 4、mysql客户端访问 Centos7安装mysql5.7解压版完整教程避免踩坑&#xff0c;可以把数据目录和系统目录分开设置。 1、卸载Centos7默认自带的mariadb数据库&#xff0c…

net.sf.json.JSONObject 类的日常使用,非阿里巴巴的JSONObject,附上作者的jsonDemo

文章目录Json介绍作者的Demo项目地址常见的转化使用测试json的添加属性&#xff0c;打印bean与json互转deepBean与json互转list与json互转map与json互转demo所用到的实体类StudentGrade个人使用的依赖常用方法其他参考文档Json介绍 1、JSONObject只是一种数据结构&#xff0c;可…

Qt OpenGL(二十四)——Qt OpenGL 核心模式-实现彩色三角形

Qt OpenGL(二十四)——Qt OpenGL 核心模式-实现彩色三角形 我们之前在Qt OpenGL 核心模式版本中,看到了Qt关于OpenGL的例程,是一个旋转的彩色三角形,本篇文章我们就使用OpenGL核心模式,实现这个彩色三角形。 图1 旋转的三角形 一、彩色三角形 上一篇文章(Qt OpenGL 核心…

半导体新能源智能装备上位机工业软件设计方案

一、什么是上位机软件 如果说PLC是工业控制的小脑&#xff0c;那么上位机软件就是其大脑。在概念上&#xff0c;控制者和提供服务者是上位机&#xff0c;被控制者和被服务者是下位机&#xff0c;上位机往往是数字信号的处理和命令的下发&#xff0c;下位机往往是模拟量的处理和…

【python实战】朋友因股票亏了,很惨常愤恨不平,当天我就分析出原因:怎么做到的?(听说关注我的人会暴富)

导语 有温度 有深度 有广度 就等你来关注哦~ 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 对于大部分股票投资者来说&#xff0c;一年能拿住翻倍的股票就实属不易。一年10倍&#xff0c;甚至…

LIN通讯

LIN通讯 一、LIN通讯的背景与意义 随着汽车电子的发展&#xff0c;汽车上的电子零件正在逐渐地增加。而电子零件的增加也导致更多的设备&#xff08;传感器、执行器、电子控制器&#xff09;需要加入汽车的局部网络&#xff0c;这些零件的增加还会带来配线的增加&#xff0c;…

OSI七层参考模型和TCP/IP四层(五层)参考模型

OSI七层参考模型 OSI&#xff08;OSI&#xff0c;Open System Interconnection&#xff09;七层模型&#xff0c;是参考模型是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联的标准体系。它是一个七层的、抽象的模型体&#xff0c;不仅…

H264码流中SPS PPS详解

1 SPS和PPS从何处而来&#xff1f; 2 SPS和PPS中的每个参数起什么作用&#xff1f; 3 如何解析SDP中包含的H.264的SPS和PPS串&#xff1f; 1 客户端抓包 在做客户端视频解码时&#xff0c;一般都会使用Wireshark抓包工具对接收的H264码流进行分析&#xff0c;如下所示&…

艾美捷nickases-Cas9内切酶裂解试验展示

核酸内切酶&#xff08;endonuclease&#xff09;在核酸水解酶中&#xff0c;为可水解分子链内部磷酸二酯键生成寡核苷酸的酶&#xff0c;与核酸外切酶相对应。从对底物的特异性来看&#xff0c;可分为DNaseⅠ、DNaseⅡ等分解DNA的酶&#xff1b;RNase、RNaseT1等分解RNA的酶。…