首页 > 其他分享 >Appium 实现APP的UI自动化测试(Android)

Appium 实现APP的UI自动化测试(Android)

时间:2024-04-20 19:33:36浏览次数:27  
标签:Appium shell APP adb 测试 UI Android

Appium是一款开源工具,用于自动化iOS、Android和Windows桌面平台上的本地、移动web和混合应用程序。原生应用是指那些使用iOS、Android或Windows sdk编写的应用。移动网页应用是通过移动浏览器访问的网页应用(appum支持iOS和Chrome上的Safari或Android上的内置“浏览器”应用)。混合应用程序有一个“webview”的包装,这是一个允许与web内容交互的原生控件。像Apache Cordova这样的项目可以很容易地使用web技术构建应用程序,然后将这些技术捆绑到原生包装中,创建一个混合应用程序。

重要的是,Appium是“跨平台”的:它允许您使用相同的API在多个平台(iOS、Android、Windows)上编写测试。这使得代码可以在iOS、Android和Windows测试套件之间重用。
 

Android UI自动化测试工具有很多,这些工具基本是基于Android控件层面,涉及Widgets和WebView两类;
而关于其测试方法一般有二:
第一种是: 通过Android提供的各种服务来获取当前窗口的视图信息,如UI Automator。

第二种是: 基于Instrumention,把测试APK和被测APK运行在同一个进程中,通过Java反射机制来获取当前窗口的所有视图,如Robotium

常用的测试工具有:UI Automator、Appium、Espresso、Selendroid、Robotium等;

Appium基于WebDriver,点击事件给Appium server,利用中间件Bootstrap.jar监听到appium server命令,通过调用UiAutomator的命令,实现App自动化测试。

2 Appium简介
Appium是开源的、跨平台的测试自动化测试框架;
主要用于测试移动端应用;
Appium支持模拟器和真机上的原生应用、混合应用、Web应用;
Appium使用WebDriver的JSON wire协议来驱动Apple系统的UI Automator库、Android系统的UI Automator框架;
因Appium集成了Selendroid框架,所以Appium支持比较老版本的Android;
Appium支持Selenium WebDriver支持的所有语言(Java、Python、JavaScript、Objective-C、PHP、Ruby、C#、Clojure、Perl等)。
3 Appium原理
3.1 Android端过程
客户端client,指咱们的测试脚本;
Appium在服务端启动一个Server(4723端口),用来接口WebDriver client标准的rest请求,调用对应框架响应操作;
Appium Server把请求转发给中间件Bootstrap.jar(手机上),Bootstrap.jar监听4724端口并接收Appium命令;
Bootstrap将执行结果返回给Appium Server;
Appium Server再将结果返回给Appium Client。
3.2 iOS端过程
客户端client,指咱们的测试脚本;
Appium在服务端启动一个Server(4723端口),用来接口WebDriver client标准的rest请求,调用对应框架响应操作;
Appium Server调用instruments.js,启动socket server,分出子进程instruments.app,将bootstrap.js注入device;
bootstrap.js将执行结果返回给Appium Server;
Appium Server再将结果返回给Appium Client。
 ——————————————————
UI Automator测试框架是Android SDK自带的APP UI自动化测试Java库;
而UI Automator对H5支持有限;
Appium 引入了chromedriver等来实现基于H5的自动化;
Android和iOS启动过程的区别在Appium将请求转发给了Bootstrap.jar或bootstrap.js,再由Bootstrap驱动UI Automator或UI Automation。

安装配置Appium

具体可参考:appium环境配置(史上最全详细)_appium安装及环境配置-CSDN博客

真机测试

(1)USB连接手机,打开手机开发者模式,打开开发者选项中的USB调试、USB安装,小米手机还需要打开USB调试(安全设置),用adb devices命令检查是否连接成功。

(2)手机安装待测试的apk。

 

下面直接开始正题,进行移动端自动化测试实战。

Appium架构

Appium 是一个用Node.js编写的HTTP server,它创建、并管理多个 WebDriver sessions 来和不同平台交互,如 iOS ,Android等等.

Appium 开始一个测试后,就会在被测设备(手机)上启动一个 server ,监听来自 Appium server的指令. 每种平台像 iOS 和Android都有不同的运行、和交互方式。所以Appium会用某个桩程序“侵入”该平台,并接受指令,来完成测试用例的运行。

二、Appium实战(以真机为例)

aapt dump badging D:\XXX.apk 获取安装包的所有信息

adb devices(查看手机是否连接到电脑)

adb shell pm list packages:列出所有的包名,找到所查看包的包名。

adb shell dumpsys package com.android.XXX:查看某个包的具体信息

其它:

adb devices:查看Android设备是否连接到电脑。

adb shell dumpsys activity:查看当前运行的是哪个activity,运行的一些进程等

adb shell dumpsys activity activities

adb shell pm list packages:列出所有的包名。

adb shell dumpsys package:列出所有的安装应用的信息

adb shell dumpsys package com.android.XXX:查看某个包的具体信息

adb shell dumpsys activity | grep mFocusedActivity:查看当前resume的是哪个activity

adb logcat | grep ActivityManager:查看当前正在运行的Activity

adb logcat | grep Displayed:查看当前正在运行的Activity

1、 连接真机或者模拟器(此处以真机为例)

连接手机时注意选择手机的开发者模式,cmd打开命令行窗口,输入adb devices获取到设备的deviceName。

 

 2.获取Activity

cmd打开命令行窗口,输入aapt dump badging D:\XXX.apk(xxx指安装包名,D:\是指路径)直接查看需要测试app安装包的具体信息。

 

 标记的就是包名,继续往下拖拽,可以找到activity的信息。

 

 这里的红圈就可以看到activity的信息。这两个值,在appium脚本中都需要提前获取到,所以需要提前介绍这个获取方法。如果你觉得在cmd里面不好看,你可以把cmd信息导出到一个txt文件,例如 aapt dump badging shoujibaidu.apk > 123.txt 回车后,会在桌面生成一个123.txt文件,你可以打开,通过查询找到这些信息。通过上面的方法,只要我们有android SDK环境,那么我们就可以获取到任意一个包的包名和Activity信息。

3.启动Appium

1) 双击桌面上的appium图标打开,点击Android Settings进行设置。

 

 2)将上方获取到的真机的deviceName填入 ,选择platformName和platformVersion

 

 3)将服务的session配置成可重写(非必要的配置)

 

 配置好后,点击右上角的启动按钮进行启动即可。

 

 启动成功,下一步该写代码了。

4、将上方得到的设备和安装包信息写入脚本中

desired_caps = {
'platformName': 'Android',
'deviceName':'8TB6V4ZPZ54LPJ5P',
'platformVersion': '5.1',
'app': PATH(r'D:\shell_customer-debug.apk'),
'appPackage': 'com.jyibb.shell_customer',
'appActivity': 'com.jyibb.module_launch_customer.SplashActivity', # 'unicodeKeyboard': 'True',#此两行是为了解决字符输入不正确的问题
# 'resetKeyboard': 'True' #运行完成后重置软键盘的状态
5、查找app定位元素

启动Android SDK中的一个神器可以查找app的定位元素进行脚本的编写。在Android SDK中的tools中有一个uiautomatorviewer.bat,如下图所示:

 

 点击uiautomatorviewer.bat进行启动,左上角一共四个按钮,作用分别是打开本地文件、dump页面、dump压缩格式的页面、保存;启动后点击左上角第三个图标进行真机界面的呈现。

 

 第一次连接会比较慢,耐心等候一下,连接好后以后就快了。我这里以百度界面为例。

 这是连接真机后的界面显示。这样就可以根据id、class、text等定位元素进行定位了。

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.find_element_by_id("com.baidu.searchbox:id/baidu_searchbox").click()
driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").clear()
driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").send_keys('appium测试')

driver.find_element_by_id("float_search_or_cancel").click()
driver.find_element_by_id("floating_action_button").click()

driver.quit()

 

 

参考:https://blog.csdn.net/nhb687096/article/details/133769317?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-133769317-blog-134931353.235^v43^pc_blog_bottom_relevance_base9&spm=1001.2101.3001.4242.2&utm_relevant_index=4

 

标签:Appium,shell,APP,adb,测试,UI,Android
From: https://www.cnblogs.com/klb561/p/18148036

相关文章

  • 原型设计——墨语笔记APP
    一、对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点。墨刀、Axure、Mockplus等原型设计工具各有特色,下面我将从适用领域、优点和缺点三个方面对它们进行对比分析。1.墨刀适用领域:墨刀主要适用于快速原型设计和高保真度的交互设计,特别适合移动端应用、小......
  • 肖sir__po框架之ui自动化框架
    po框架一、ui自动化po框架介绍(1)PO是PageObject的缩写(pom模型)(2)业务流程与页面元素操作分离的模式,可以简单理解为每个页面下面都有一个配置class,配置class就用来维护页面元素或操作方法(3)提高测试用例的可维护性、可读取性对比:传统的设计测试用例存在的弊端:1.易读性差2.复用性差3.......
  • Android系统build阶段签名机制
    https://maoao530.github.io/2017/01/31/android-build-sign/APK签名机制https://maoao530.github.io/2017/01/31/apk-sign/ 本文介绍Android系统build阶段的签名机制。一、系统build阶段签名机制1、系统中有4组key用于build阶段对apk进行签名:MediaPlatformSharedTestk......
  • .NET开源免费的跨平台框架 - MAUI(附学习资料)
    前言前几天分享了一个.NETMAUI开源免费的UI工具包-Uranium,然后技术群有不少同学问.NETMAUI是不是免费的?能做什么?今天特意写这篇文章来介绍一下.NET开源、免费(基于MITLicense)的跨平台框架:MAUI。.NETMAUI官方介绍.NET多平台应用UI(.NETMAUI)是一个跨平台框架,用于使用......
  • com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at S
     适用的druid数据库连接池一直有问题,无法连接,但是什么都没改过。排查了数据库(数据库单独连接没问题)、防火墙、IP白名单等步骤后,重启服务器、重启应用后都无法解决。重启应用过程中发现了应用无法正常启动的情况,这点让人觉得很意外,于是想看下现在服务器上运行的jar包情况,命令是......
  • 学习unigui【24】Echart的使用:多个坐标系
    使用echart非常简单,网上有介绍。主要放一个unihtmlFrame。然后unihtmlframe.text:='html的代码',就会渲染(初次调用echart的js库要一点稍后)。unigui本身的chart貌似不能动态生成。option={title:[{text:'TOP10(抗菌药物使用人数)',top:'1......
  • 短视频app开发,可以借鉴的几个登录界面设计
    登录界面一:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>BusinessLogin</tit......
  • 关于我自己的Gui界面库完善
    仓库地址:https://gitee.com/GPRO/Gui功能说明: 解析XML, 接入AngleScript。接下来需要做的: 因为有了WPF,MFC,HTML甚至UE5的使用经验,这里我更新下 界面设计器部分。关于界面设计器的方面希望:     新建Window: 新建一个Widget,   新建容器或者控件。  ......
  • Anaconda Navigator启动卡在loading applications界面(同时莫名启动了VSCODE)
    0.问题参考:anacondanavigator启动时一直卡在loadingapplications页面我的问题和网上普遍的不太一样,首先我能找到conda_api.py,但是不是在D:\anaconda\Lib\site-packages\anaconda_navigator\api文件夹下,而是在...\anaconda3\pkgs\anaconda-project-0.11.1-py311haa9553......
  • burpsuite使用深色主题暗色主题[保姆姬教程,方便快捷]
    点开burpsuite后点右上角的齿轮,在弹出的新窗口的搜索框搜索'theme',然后点'dark'.具体如图成了PS:我在网上搜burp改暗色主题,全是一大堆要么一上来吹水,要么得下插件的麻烦的教程,我跟着教程搞了一会儿才发现burp自带个暗色主题.于是写下这篇随笔.......