App自动化测试|Appium工作原理及Desired Capbilities配置

简介: App自动化测试|Appium工作原理及Desired Capbilities配置

Appium工作原理及Desired Capbilities配置

在这里插入图片描述

Appium工作原理

在这里插入图片描述

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

  • JsonWireProtocol:它是一种协议,遵循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属性一起使用)

DesiredCapabilities使用实例:

  1. 定义一个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)
  1. 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)
相关文章
|
8天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
16天前
|
消息中间件 监控 小程序
电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
电竞陪玩系统架构涵盖前端(React/Vue)、后端(Spring Boot/php)、数据库(MySQL/MongoDB)、实时通信(WebSocket)及其他组件(Redis、RabbitMQ、Nginx)。通过模块化设计、微服务架构和云计算技术优化,提升系统性能与可靠性。同时,加强全面测试、实时监控及故障管理,确保系统稳定运行。
|
2月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
151 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
3月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
3月前
|
开发框架 安全 JavaScript
xss漏洞原理(四)自动化XSS
xss漏洞原理(四)自动化XSS
|
4月前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。
|
4月前
|
敏捷开发 Java 测试技术
探索自动化测试的奥秘:从Selenium到Appium
【9月更文挑战第14天】软件测试,这个看似枯燥乏味却至关重要的领域,正经历着一场革命。随着技术的进步,自动化测试工具如Selenium和Appium已成为质量保证的利器。本文将带你一探这些工具的神秘面纱,了解它们如何简化测试流程、提升效率,并确保软件产品的质量。准备好,我们将深入自动化测试的世界,解锁其背后的原理和实践技巧。
|
5月前
|
Java 测试技术 API
探索自动化测试的奥秘:从Selenium到Appium
【8月更文挑战第31天】本文旨在引导读者理解自动化测试的重要性,并逐步深入介绍如何利用Selenium和Appium这两个强大的工具来提升测试效率和质量。文章不仅分享理论知识,还通过具体代码示例,展示如何在Web应用和移动应用测试中实施自动化策略。
|
XML Java 测试技术
技术分享 | app自动化测试(Android)--App 控件交互
通常获取到元素之后,可以调用 click() 方法来实现对这个元素的点击操作
|
8天前
|
前端开发 Java 开发工具
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】

热门文章

最新文章