【2024软件测试面试必会技能】Appium自动化(4):Appium工作原理及Desired Capabilities配置

本文主要是介绍【2024软件测试面试必会技能】Appium自动化(4):Appium工作原理及Desired Capabilities配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Appium工作原理

Appium工作原理图如下:

脚本请求——>4723端口appium server——>解析参数给PC端4724端口——>发送给设备4724端口——>通过设备4724端口发给bootstrap.jar——>Bootstrap.jar把命令发给uiautomator;

sonWireProtocol:

它是一种协议,遵循REST风格,以JSON方法进行传输,是一系列的键值对,遵循W3C WebDriver Spec设计风格;appium中的Json wire protocol继承自selenium的webdriver wire protocol,并进行了扩展,使得Json wire protocol能够控制不同的移动设备的行为。

bootstrap:

bootstrap在appium中是以jar包的形式存在的,它的功能是作为一个socket服务,把Appium sever发送的请求转化成uiautomator的命令来让uiautomator进行处理。

 在创建session成功之前,appium就已将bootstrap.jar放入手机中,并开启设备上的基于appiumbootstrap的socket服务,绑定本机和boostrap通信的端口号4724用于和Android设备通讯,默认监听4724端口,等待client的连接。

Uiautomator:

UiAutomator是Google提供的用来做安卓自动化测试的一个Java库,基于Accessibility服务。功能很强,可以对第三方App进行测试。它的初始版本发布在Android4.3(APIlevel18)及以上的android系统版本。

Selendroid:

Selendroid和UiAutomator类似,也是Google提供的一个安卓自动化测试软件,适用于Android系统的本地应用程序和移动web的UI混合测试。它主要应用在Android4.2(APIlevel17)及以下的android系统版本。

Instruments:

Instruments一个很灵活的、强大的工具,是性能分析、动态跟踪和分析OSX以及iOS代码的测试工具,appiumios封装了apple的Instruments框架,主要使用Instruments里的UIAutomation(Apple的自动化测试框架),然后在设备中注入入bootstrap.js进行行监听。

Desired Capabilities配置

Desired Capabilities携带了一些配置信息。从本质上讲,它是key-value形式的对象。可以理解成是java里的map,python里的字典,ruby里的hash以及js里的json对象。实际上Desired Capabilities在传输时就是json对象。

DesiredCapabilities最重要的作用是告诉appium server本次测试的上下文。

比如:

  • 本次测试是启动浏览器还是启动移动设备?
  • 是启动andorid还是启动ios?
  • 启动android时,app的package是什么?
  • 启动android时,app的activity是什么?

appium server的这些疑问Desired Capabilities都必须给予解答,否则appium server就无法完成移动app或者是浏览器的启动。

Desired Capabilities常用键值对介绍:

automationName:使用哪种自动化引擎。appium(默认)还是Selendroid。

platformName:平台的名称,iOS,Android,FirefoxOS

platformVersion:移动设备的系统版本号,7.1,4.4

deviceName:设备名称,Android:可随意填写;IOS:instruments -s devices

udid:连接的物理设备的唯一设备标识adb devices可获取

app:本地绝对路径_或_远程httpURL所指向的一个安装包(.ipa,.apk,或.zip文件)。Appium将其安装到合适的设备上。如果指定了appPackage和appActivity参数,Android则不需要此参数了。该参数也与browserName不兼容。(一般和noSign属性一起使用)

browserName:测试的H5 web浏览器,如果是测app则忽略

newCommandTimeout:用于客户端在退出或者结束session之前,Appium等待客户端发送一条新命令所花费的时间(秒为单位)

noReset:在当前session前不重置app状态,默认值为false

fullReset:(iOS)删除所有的模拟器文件夹。(Android)要清除app里的数据,请将应用卸载才能达到重置应用的效果。在Android,在session完成之后也会将应用卸载掉。默认值为false

Desired Capabilities android特有键值对介绍:

appPackage:运行的Android应用的包名;如果是测试H5网页则忽略该属性

appActivity:Activity的名字是指从你的包中所要启动的Androidacticity。通常需要再前面添加‘.’;如果是测试H5网页则忽略该属性

unicodeKeyboard:使用Unicode输入法。默认值为false

resetKeyboard:在设定了unicodeKeyboard关键字的Unicode测试结束后,重置输入法到原有状态。如果单独使用,将会被忽略。默认值为false

noSign:跳过检查和对应用进行debug签名的步骤。仅适用于UiAutomator,不适用于selendroid。默认值为false;(一般和app属性一起使用)

最全的键值信息可参考:https://github.com/appium/appium/blob/master/docs/cn/writing-running-appium/caps.md

 DesiredCapabilities使用实例:

1、定义一个Desired Capabilities配置的字典

原生app的Desired Capabilities配置:

复制代码

from appium import webdriver# 1、定义一个DesiredCapabilities配置的字典
des = {'automationName':'appium','platformName':'Android',   # 平台的名称,iOS,Android,FirefoxOS'platformVersion':'9.1.0',  # 填写android虚拟机/真机的系统版本号'deviceName':'huawei',      # 填写安卓虚拟机/真机的设备名称'appPackage':'com.sky.jisuanji',    # 填写被测app包名'appActivity':'.JisuanjizixieActivity',    # 填写被测app的Activity入口'udid':'HBSBB18821510293',    # 填写通过命令行 adb devices 查看到的udid'noReset':True,               # 是否 不重置APP'noSign':True,                # 是否 不签名'unicodeKeyboard':True,       # 是否支持中文输入'resetKeyboard':True,         # 是否支持重置键盘'newCommandTimeout': 30  # 30秒没发送新命令就断开连接}# 2、把配置的字典作为请求参数发送给appium服务器
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

复制代码

H5网页的Desired Capabilities配置:

复制代码

from appium import webdriver# 1、定义一个DesiredCapabilities配置的字典
des = {'automationName':'appium','platformName':'Android',   # 平台的名称,iOS,Android,FirefoxOS'platformVersion':'9.1.0',  # 填写android虚拟机/真机的系统版本号'deviceName':'huawei',      # 填写安卓虚拟机/真机的设备名称'browserName': 'chrome',      # 浏览器的设备名称'udid':'HBSBB18821510293',    # 填写通过命令行 adb devices 查看到的udid'noReset':True,               # 是否 不重置APP'noSign':True,                # 是否 不签名'unicodeKeyboard':True,       # 是否支持中文输入'resetKeyboard':True,         # 是否支持重置键盘'newCommandTimeout': 30  # 30秒没发送新命令就断开连接}# 2、把配置的字典作为请求参数发送给appium服务器
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',des)

 总结

如果你对此文有任何疑问,如果你也需要接口项目实战,如果你对软件测试、接口测试、自动化测试、面试经验交流感兴趣欢迎加入我们,加入方式在文章的最后面

  自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

  总结:

 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

​​​

​​​

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

测试开发视频教程、学习笔记领取传送门!!

这篇关于【2024软件测试面试必会技能】Appium自动化(4):Appium工作原理及Desired Capabilities配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/732968

相关文章

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte