App自动化测试 —— Appium的使用
目录
- 简介
- 安装
- 配置 & Run
- 问题 & 解决方案
- 优点 & 缺点
- 总结
简介
Appium
是一个开源测试自动化框架,用于原生、 混合和移动 Web 应用程序。
安装
Appium
安装方式有两种,一种是通过npm
命令行安装,另一种是通过安装可视化工具。
npm
安装npm
安装方式稍微麻烦一点,需要先安装npm
才能进行操作,想了解的可参考:安装Appium可视化工具安装
可视化工具的下载可前往Github下载
本文使用的是 可视化工具安装 方式。
配置 & Run
安装完成后启动Appium.exe
,点击编辑配置
在弹出的配置界面中填写已提前配置好的环境变量路径并保存重新启动
重启后点击启动服务器
点击右上角的启动检查器会话
点击中间偏下方的 “ + ” 号添加参数
Capability | Description |
---|---|
platformName | 设备操作系统 |
platformVersion | 设备操作系统版本 |
deviceName |
设备名称(可通过执行adb的adb devies 获取当前连接上的设备)
|
appPackage | 应用程序包名 |
appActivity | 从appPackage 中启动的 Android 活动的活动名称 |
noReset | true or false,执行程序的同时是否清空app数据 |
更多Capability可参考:Appium Desired Capabilities
填写部分参数如下:
点击启动会话后弹出如下窗口:
Appium
可以通过录制操作,生成JS、Java、Python、Ruby等程序可运行的语言。具体操作如:开始操作 → 点击app界面的某一个按钮或输入框 → 点击后会在右侧的 选定元素 中显示相关信息 → 选择 点击 或 发送密钥 的操作 → 刷新屏幕截图。
部分选择元素是无法选中的,需要使用坐标定位所点击位置。录制完相关操作,将录制生成的代码复制到剪贴板,粘贴至Android Studio
开发工具 @Test
注解的方法里。
run
一下,自动化UI测试的操作步骤就完成了
在Android Studio
里面执行代码,应提前引入commons-lang3
、java-client
、selenium-server-standalone
三个jar包,下载地址在文章尾部。部分Java
代码如下:
@Beforepublic void initAppium() {File classpathRoot = new File(System.getProperty("user.dir"));// 获取apps文件,前面测试应用所存放的目录File appDir = new File(classpathRoot, "/test_app/");// 获取apk文件File app = new File(appDir, "AppiumAutoTest.apk");DesiredCapabilities capabilities = new DesiredCapabilities();capabilities.setCapability("platformName", "测试的设备系统");capabilities.setCapability("platformVersion", "系统平台版本号");capabilities.setCapability("deviceName", "测试的设备名称");capabilities.setCapability("app", app.getAbsolutePath());capabilities.setCapability("appPackage", "被测应用包名");capabilities.setCapability("appActivity", "app启动的第一个运行界面");// 连接appium启动相应apptry {driver = new AndroidDriver<>(new URL("http://192.168.31.98:4723/wd/hub"), capabilities);} catch (MalformedURLException e) {e.printStackTrace();}System.out.println("App is launched!");}@Testpublic void startTest() throws InterruptedException {MobileElement el3 = (MobileElement) driver.findElementByAccessibilityId("Reflow");el3.click();sleep(1000);MobileElement el4 = (MobileElement) driver.findElementByAccessibilityId("Slideshow");el4.click();sleep(1000);MobileElement el5 = (MobileElement) driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.view.ViewGroup/android.widget.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.view.ViewGroup");el5.click();sleep(1000);execRootCmdSilent("adb shell input tap 958 1588");sleep(1000);MobileElement el6 = (MobileElement) driver.findElementByAccessibilityId("更多选项");el6.click();sleep(1000);MobileElement el7 = (MobileElement) driver.findElementById("com.miyue.appiumautotest:id/title");el7.click();sleep(1000);MobileElement el8 = (MobileElement) driver.findElementByAccessibilityId("转到上一层级");el8.click();}private void sleep(int second) throws InterruptedException {Thread.sleep(second);}/*** 使用adb命令执行点击的坐标点* @param paramString*/public void execRootCmdSilent(String paramString) {String content = "";BufferedReader reader = null;InputStream is = null;try {java.lang.Process process = Runtime.getRuntime().exec(paramString);is = process.getInputStream();reader = new BufferedReader(new InputStreamReader(is));StringBuffer output = new StringBuffer();int read;char[] buffer = new char[4096];while ((read = reader.read(buffer)) > 0) {output.append(buffer, 0, read);}content = output.toString();System.out.println("App execution adb done!" + content);} catch (Exception e) {e.printStackTrace();System.out.println("App issue!" + e.getMessage());} finally {if (null != is) {try {is.close();} catch (Exception e) {e.printStackTrace();}}if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 运行完成* @throws InterruptedException*/@Afterpublic void end() throws InterruptedException {// 退出应用driver.quit();}
问题 & 解决方案
no tasks available.
原因:没有配置
Run/Debug Configurations
。Connection refused: connect.
原因:
Appium
服务未启动。An unknown server-side error occurred while processing the command. Original error: Unable to find an active device or emulator with OS 11. The following are available: 6HJ4C19A29009173 (10).
原因:
platformVersion
输入的操作系统与连接到的操作系统版本不对。An unknown server-side error occurred while processing the command. Original error: Could not find a connected Android device in 20088ms.
原因:未连接到测试设备,需要使用adb或数据线连接上设备,执行adb命令
adb devices
查看目前所连接到的设备,将设备名称拷贝粘贴至deviceName
。重新编写测试步骤的代码,应该提前
clean
运行缓存。
优点 & 缺点
优点
- 支持第三方应用程序。
- 支持同时测试多台设备。
- 支持生成多种语言的测试代码。
- 不需要把第三方代码编译进app中。
- 解放了双手,避免了不必要的重复操作。
- 支持IOS、Android、Windows的应用程序。
- 支持Native apps、 Hybrid apps、Web apps。
缺点
- 暂不支持可用于编写Android程序的Kotlin代码。
- 相对于人工测试而言,Appium自动测试不太适合小规模的测试。
总结
噢,相信你体验之后肯定会刷新你对Appium
的看法。
若测试的应用不需要进行多次重复性的UI测试,似乎没必要使用Appium
自动化测试,与手动点击UI测试相比,速度慢的似乎不是一丁半点。
最近了解到一个叫AccessibilityService
(无障碍服务)的东西,这玩意可以用来开发Application脚本,脚本执行速度那叫一个快。只可惜它不是一个自动化测试的框架,不然用来搞自动化测试应该很牛掰的吧。
本文Android Studio
代码下载地址:Appium自动化测试的使用代码下载地址
参考资料
1、Appium官网
2、Appium下载地址
3、java-client.jar包下载地址
4、commons-lang3.jar包下载地址
5、Appium搭建Android自动化测试框架
6、selenium-server-standalone.jar包下载地址
App自动化测试 —— Appium的使用相关推荐
- app自动化测试appium教程之番外1——进阶补充内容
app自动化测试appium教程之番外1--进阶补充内容 混合app测试 1. 打开app内webview debug模式 2. 验证是否为混合app 3. 切换至H5页面 4. 切回原生app 5. ...
- app自动化测试appium教程之三——appium基础命令(python)
app自动化测试教程之三--appium基础命令(python) hello appium 基础操作API 教学视频参考b站课程,此文为学习记录 (免费的羊毛,要薅呀,筒子们~) 零基础入门移动自动化 ...
- APP自动化测试——Appium运行环境搭建保姆级教程
APP自动化测试运行环境比较复杂,稍微不注意安装就会失败.我见过不少朋友,装了1个星期,Appium 的运行环境还没有搭好的. 搭建环境本身不是一个有难度的工作,但是 Appium 安装过程中确实存在 ...
- app自动化测试appium教程之二——adb命令
adb命令 ADB简介 获取包名和界面名 文件传输 获取app启动时间 获取手机日志[应用] 其他adb命令 教学视频参考b站课程,此文为学习记录 (免费的羊毛,要薅呀,筒子们~) 零基础入门移动自动 ...
- APP自动化测试-Appium日志分析
下面是我们的代码脚本:(环境准备工作就不在这里讲述,自行百度) 下图中,appium作为server端收到客户端发出的post请求,可以看到请求参数就是我们代码里面写的那些字段信息 appium收到请 ...
- 集成——Mac电脑上app自动化测试(Appium + xcode 8.2 + python)环境搭建
1.Mac电脑.xcode.appium客户端1.6.4,appium1.6.4, android studio 命令行安装: 2.安装brew /usr/bin/ruby -e "$(cu ...
- APP自动化测试系列之Appium介绍及运行原理
VOL 161 23 2020-09 今天距2021年99天 这是ITester软件测试小栈第161次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...
- APP自动化测试系列之Appium环境安装
VOL 158 16 2020-09 今天距2021年106天 这是ITester软件测试小栈第158次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 ...
- 使用appium进行app自动化测试时遇到AppActivity设置正确但报Connect Appium Server Fail.A new session could not be created
appium 部分服务关键字如下: PlatformName=Android PlatformVersion=4.4.4 AppPackage=com.xxxxx.xxxx AppActivity=. ...
最新文章
- python读取txt文件并写入excel-Python读excel生成数据存入txt文件
- 对于初学者而言!如何处理 Python 入门难以进步的现象?
- VTK:可视化之HideActor
- 说说基于网络的五种IO模型
- 轻量级web富文本框——wangEditor使用手册(4)——配置下拉菜单 demo
- 如何提高linux的时钟精度,Linux时钟精度提高有什么办法?
- html form表格采购单,【HTML】--- 列表、表格、form表单标签
- 黄杏元《地理信息系统概论》考研复习考点精讲(六)
- 大数据技术_ 基础理论 之 数据挖掘与分析
- 如何将PDF转换成图片
- 2021-02-10微软漏洞通告
- 震惊!旷视首席科学家、知名AI学者孙剑博士去世
- JavaScript思维导图
- 【App Inventor】飞机大战 APP
- 苹果手机微信端打开网页长按保存图片可以唤醒但是点击保存、发好友无效
- 【论文精读】Perception-based seam cutting for image stitching
- 中创算力|“商鼎云”助力元宇宙底层建设
- FFmpeg —— 编译obs源码(解决编译后不能捕获摄像头问题)
- vmware 几种联网的方式,如何实现虚拟机上网
- GeckoFX 在winform中的简单应用
热门文章
- sql注入危害利用及防护详解+sqlmap使用
- 知识图谱——TransH模型原理
- 视频教程-【深入理解计算机网络】“数制”视频课程-网络技术
- 强制清理CDN(DNS)缓存方法
- python parser.add_argument函数及sys.argv[]
- 基于vue-cli3的vue项目 通过postcss-pxtorem 实现px自动转换成rem
- 封面文章:寻找技术中国——渴望不再被扼住喉咙!
- 【常用命令】netstat -ano命令图文详细说明
- 【100%通过率】华为OD机试真题 C++ 实现【最优芯片资源占用】【2023 Q1 | 100分】
- 在Spyder安装xlrd插件