【基础教程】Appium自动化测试,太详细了!

2023-11-17

Appium简介

Appium是一款开源的Appium自动化工具, 基于Webdriver协议, 主要有以下3个特点:

  1. 全能: 支持iOS/Andorid/H5/混合App/WinApp

  1. 通用: 支持Win/Linux/Mac, 支持Java/Python/Ruby/Js/PHP等各种语言

  1. 开源: 免费

App自动化测试工具对比

iOS

官方:

  • Uiautomation/XCUITest: 白盒, UI测试, JS
    其他:

  • FastMonkey: 性能(仿Monkey), 张钊

Andorid

官方:

  • Uiautomator/Uiautomtor2: UI测试, Java

  • Monkey: app性能/稳定性测试, 随机操作

  • MonkeyRunner: UI测试, Jpython, 只能通过坐标定位

  • Robotium: 白盒, UI测试, Java, 支持Webview/Toast/menu/Dialog等, 无法跨进程

  • Espresso: 官方推荐扩展测试包, 白盒,ui, 一般开发自测使用

  • CTS: 兼容性测试, Java

其他:

  • Python-Uiautomotor2: UI测试, 使用简单, 支持无线连接设备及使用weditor查看元素定位

  • Adb-For-Test/adb-For-Robotium: 个人, 基于adb命令的封装

多平台支持

  • Calabash: iOS/Andriod/混合app, Ruby, BDD模式, Api丰富

  • Appium: iOS/Andriod/混合app/H5, Java/Python/Ruby/JS..

  • Macaco: 阿里基于Appium进行的精简封装的一套框架, 支持Electron应用, 包含app-inspector和ui-recorder, 统一了iOS/Android操作的Api, 目前坑比较多, 环境搭建较麻烦

  • Airtest(ATS): 网易推出的一款基于截图对比的App自动化测试工具, 可用于App游戏UI测试, 支持iOS/Android

云平台

  • Sauce Labs: Appium官方推荐, 应用最广的云测平台, 收费

  • Testin/腾讯云测等: 国内云平台, 收费

  • OpenSTF: 开源手机集群管理平台, 免费

Appium实现原理

Andorid(uiautomator)

  1. 调用Android adb完成基本的系统操作

  1. 向Android上部署bootstrap.jar

  1. bootstrap.jar Forward Android的端口到PC机器上

  1. PC上监听端口接收请求,使用webdriver协议

  1. 分析命令并通过forward 端口发给bootstrap.jar

  1. bootstrap.jar接收请求并把命令发给uiautomator

  1. ui automator执行命令

Andorid-uiautomator2-driver: bootstrap.jar改为使用uiautomato2 server apk, 使用netty server代替原来的websocket与PC端通信

iOS

  1. client端 依然是 test script是我们的webdriver测试脚本。

  1. 中间是起的Appium的服务,Appium在服务端起了一个Server(4723端口),跟selenium Webdriver测试框架类似, Appium⽀持标准的WebDriver JSONWireProtocol。在这里提供它提供了一套REST的接口,Appium Server接收web driver client标准rest请求,解析请求内容,调⽤用对应的框架响应操作。

  1. appium server调用instruments.js 启动⼀一个socket server,同时分出一个⼦子进程运⾏instruments.app,将bootstrap.js(一个UIAutomation脚本)注⼊入到device⽤于和外界进行交互

  1. 最后Bootstrap.js将执行的结果返回给appium server

  1. appium server再将结果返回给 appium client。

环境搭建

  • 安装JDK, 配置环境变量

  • 安装Android SDK, 配置环境变量

  • 安装Appium-Windows-Desktop

  • 安装Appium-Python-Client

  • 安装模拟器

Mac Android/iOS环境搭建

Andorid介绍

基本架构

常见布局/视图

  • 线性布局: LinerLayout

  • 相对布局: RelativeLayout

  • 帧布局: FrameLayout, 叠放

  • 普通视图: View

  • 切换视图: ListView, 注意, 其中的元素会动态变化

HierarchyViewer, uiautomatorviewer

基本控件

  • TextView: 文本

  • Button: 按钮

  • EditText: 输入框

  • ImageView: 图片

  • 其他: Alert(警告框)/Toast(提示消息)/SeekBar(滑块)/Webview(嵌入网页)

控件常见属性

  • index: 索引, 用于排序

  • text: 控件名称(显示文本)

  • resource-id: 资源id

  • class: 控件类型(文本/按钮/输入框等)

  • content-desc: 控件描述

  • package: 所属包(一个包就是一个apk)

  • enabled: 是否可用

  • clickable: 是否可点击

  • focused: 是否聚焦状态

  • bounds: 坐标

Adb命令基础

Andorid sdk介绍

  • add-ons: 附加库

  • build-tools: 编译工具

  • platform: 各版本sdk

  • platforms-tools: 平台通用工具, 如adb

  • tools: 常用工具

Adb介绍

Adb(Android Debug Bridge): Andoid设备调试桥梁, 可以再PC端通过命令调试Android设备, 如获取设备状态, 安装/卸载app, 上传/下载文件等操作

Adb常用命令

开启/关闭服务

  • adb start-server: 开启服务

  • adb kill-server: 关闭服务

连接设备/获取连接状态(自动开启服务)

  • adb connect/disconnect 设备名或uuid: 连接/断开连接设备

  • adb devices: 查看连接的设备

安装/卸载app

  • adb install 安装包路径.apk

  • adb uninstall apk包名

通过uiautomatorviewer可以获取获取apk包名

上传/下载文件

  • 上传: adb push 本地文件 设备目录

  • 下载: adb pull 设备文件 本地目录

Copyadb push 1.txt /sdcard/
adb pull sdcard/1.txt .
adb shell: 可用于查看设备中的文件, exit退出

强大的adb shell

  • pm: 应用及权限管理 adb shell pm list packages

  • am: Activity操作 adb shell am start -n 包名/包名.主Activity名

  • input: 模拟按键/输入

  • 点击(触控)指定坐标: adb shell input tap 50 250

  • 输入文字: adb shell input text hello

  • 按键: adb shell input keyevent 3

  • 滑动: adb shell input swipe 300 1000 300 500

  • logcat: 日志查看及过滤(问题定位)

  • monkey: 性能/稳定性测试

  • dumpsys: 性能分析

  • screencap: 截图 adb shell screencap -p /sdcard/01.png

  • screenrecord: 录屏 adb shell screenrecord --time-limit 10 /sdcard/demo.mp4

使用aapt获取包名, 主Activity(aapt位于Androidsdk/build-tools下)
Copyaapt dump badging app-debug.apk
Copypackage: name='com.lqr.wechat'
...
launchable-activity: name='com.lqr.wechat.ui.activity.SplashActivity'
...
name中包含 包名.主Acitivty名

示例:

配合uiautomatorviewer查看元素坐标, 使用bounds中x,y的平均值, 屏幕分辨率1280*760, 滑动时可取平均值
  • 安装高仿微信app

  • 启动app

  • 点击登录按钮

  • 输入18010181267

  • 按TAB键

  • 输入123456

Copyadb install app-debug.apk
adb am start -n com.lqr.wechat/com.lqr.wechat.com.lqr.wechat.ui.activity.SplashActivity
adb shell input tap 170 1197
adb shell input text 18010181267
adb shell input keyevent KEYCODE_TAB
adb adb shell input tap 360 498
adb shell input swipe 700 540 10 540  # 滑动时离开一定边界
adb shell screencap -p /sdcard/01.png
adb shell input keyevent 3 # 按HOME键
adb pull /sdcard/01.png .  # 下载图片
支持的KEYCODE
  • 0 --> "KEYCODE_UNKNOWN"

  • 1 --> "KEYCODE_MENU"

  • 2 --> "KEYCODE_SOFT_RIGHT"

  • 3 --> "KEYCODE_HOME"

  • 4 --> "KEYCODE_BACK"

  • 5 --> "KEYCODE_CALL"

  • 6 --> "KEYCODE_ENDCALL"

  • 7 --> "KEYCODE_0"

  • 8 --> "KEYCODE_1"

  • 9 --> "KEYCODE_2"

  • 10 --> "KEYCODE_3"

  • 11 --> "KEYCODE_4"

  • 12 --> "KEYCODE_5"

  • 13 --> "KEYCODE_6"

  • 14 --> "KEYCODE_7"

  • 15 --> "KEYCODE_8"

  • 16 --> "KEYCODE_9"

  • 17 --> "KEYCODE_STAR"

  • 18 --> "KEYCODE_POUND"

  • 19 --> "KEYCODE_DPAD_UP"

  • 20 --> "KEYCODE_DPAD_DOWN"

  • 21 --> "KEYCODE_DPAD_LEFT"

  • 22 --> "KEYCODE_DPAD_RIGHT"

  • 23 --> "KEYCODE_DPAD_CENTER"

  • 24 --> "KEYCODE_VOLUME_UP"

  • 25 --> "KEYCODE_VOLUME_DOWN"

  • 26 --> "KEYCODE_POWER"

  • 27 --> "KEYCODE_CAMERA"

  • 28 --> "KEYCODE_CLEAR"

  • 29 --> "KEYCODE_A"

  • 30 --> "KEYCODE_B"

  • 31 --> "KEYCODE_C"

  • 32 --> "KEYCODE_D"

  • 33 --> "KEYCODE_E"

  • 34 --> "KEYCODE_F"

  • 35 --> "KEYCODE_G"

  • 36 --> "KEYCODE_H"

  • 37 --> "KEYCODE_I"

  • 38 --> "KEYCODE_J"

  • 39 --> "KEYCODE_K"

  • 40 --> "KEYCODE_L"

  • 41 --> "KEYCODE_M"

  • 42 --> "KEYCODE_N"

  • 43 --> "KEYCODE_O"

  • 44 --> "KEYCODE_P"

  • 45 --> "KEYCODE_Q"

  • 46 --> "KEYCODE_R"

  • 47 --> "KEYCODE_S"

  • 48 --> "KEYCODE_T"

  • 49 --> "KEYCODE_U"

  • 50 --> "KEYCODE_V"

  • 51 --> "KEYCODE_W"

  • 52 --> "KEYCODE_X"

  • 53 --> "KEYCODE_Y"

  • 54 --> "KEYCODE_Z"

  • 55 --> "KEYCODE_COMMA"

  • 56 --> "KEYCODE_PERIOD"

  • 57 --> "KEYCODE_ALT_LEFT"

  • 58 --> "KEYCODE_ALT_RIGHT"

  • 59 --> "KEYCODE_SHIFT_LEFT"

  • 60 --> "KEYCODE_SHIFT_RIGHT"

  • 61 --> "KEYCODE_TAB"

  • 62 --> "KEYCODE_SPACE"

  • 63 --> "KEYCODE_SYM"

  • 64 --> "KEYCODE_EXPLORER"

  • 65 --> "KEYCODE_ENVELOPE"

  • 66 --> "KEYCODE_ENTER"

  • 67 --> "KEYCODE_DEL"

  • 68 --> "KEYCODE_GRAVE"

  • 69 --> "KEYCODE_MINUS"

  • 70 --> "KEYCODE_EQUALS"

  • 71 --> "KEYCODE_LEFT_BRACKET"

  • 72 --> "KEYCODE_RIGHT_BRACKET"

  • 73 --> "KEYCODE_BACKSLASH"

  • 74 --> "KEYCODE_SEMICOLON"

  • 75 --> "KEYCODE_APOSTROPHE"

  • 76 --> "KEYCODE_SLASH"

  • 77 --> "KEYCODE_AT"

  • 78 --> "KEYCODE_NUM"

  • 79 --> "KEYCODE_HEADSETHOOK"

  • 80 --> "KEYCODE_FOCUS"

  • 81 --> "KEYCODE_PLUS"

  • 82 --> "KEYCODE_MENU"

  • 83 --> "KEYCODE_NOTIFICATION"

  • 84 --> "KEYCODE_SEARCH"

  • 85 --> "TAG_LAST_KEYCODE"

Appium使用

获取app的Package和Activity

desired_caps

元素定位

uiautoviewer

  • id: resource_id

  • name: text/content-desc

  • xpath:

实战案例

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

电商项目实战

web测试项目

web+App+h5+小程序 测试项目

接口自动化测试实战项目

Linux实战项目

面试资料

我们进阶学习自动化测试必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

以上资料,对于想要测试进阶的朋友们来说应该会很有帮助,需要的小伙伴可以后台私信找我免费领取。

总结

我见过很多leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了好几年,更夸张的是7、8年工作内容的重复性比较高,没有什么技术含量的工作。

凡事要趁早,特别是技术行业,一定要提升技术功底,丰富自动化项目实战经验,这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。

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

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【基础教程】Appium自动化测试,太详细了! 的相关文章

  • 步骤详图 教你在linux搭建容器环境

    警告 切勿在没有配置 Docker YUM 源的情况下直接使用 yum 命令安装 Docker 1 准备工作 系统要求 要安装Docker CE 社区版 操作系统的最低要求是CentOS7 7以下版本都不被支持 卸载旧版本 Docker改版
  • 测试用例评审流程优化

    测试用例 评审是QA日常工作流程中的关键一环 是QA同学完善测试用例 交流测试经验的好机会 负责组内测试用例建设以来 作者对于评审流程做了一些优化工作 本文作者将整个优化过程中的心得体会做了一个总结 希望能给大家带来帮助 01 原始流程 1
  • 软件测试|使用Python轻松裁剪视频

    简介 裁剪视频是在视频编辑和处理中常见的任务之一 Python提供了多种库和工具 可以用来裁剪视频 在本文中 我们将详细讨论如何使用Python来裁剪视频 并提供示例代码 步骤1 环境准备 首先 我们要安装必要的Python库 我们将使用
  • 软件测试|使用matplotlib绘制多种折线图

    简介 在数据可视化领域 Matplotlib是一款非常强大的Python库 它可以用于绘制各种类型的图表 包括折线图 本文将介绍如何使用Matplotlib创建多种不同类型的折线图 并提供示例代码 创建模版 在绘图之前 我们可以先创建我们的
  • 软件测试|Python中如何提取列表中索引为奇数的元素

    简介 在Python中 我们经常需要从列表中提取特定位置的元素 如果我们想要提取列表中索引为奇数的元素 可以使用一些简单的方法来实现这一目标 本文将介绍如何在Python中提取列表中索引为奇数的元素 并提供示例代码来帮助大家更好地理解这个过
  • 软件测试|Selenium StaleElementReferenceException 异常分析与解决

    简介 Selenium 是一个流行的自动化测试工具 用于模拟用户与网页交互 然而 当我们在使用 Selenium 时 可能会遇到一个常见的异常 即 StaleElementReferenceException 这个异常通常在我们尝试与网页上
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 一篇文章带你了解Python常用自动化测试框架——Pytest

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 开眼了,自动化测试还能这样用?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

    在日常的软件开发中 测试是确保代码质量的关键步骤之一 然而 对于测试报告的生成和测试结果的可读性 一直以来都是开发者关注的焦点 Pytest插件 pytest sugar 以其清晰而美观的输出 为我们提供了一种愉悦的测试体验 本文将深入介绍
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 一文让你了解UI自动化测试

    测试都起什么作用 是项目的保险 但不是项目的救命草 测试无实际产出 但作用远大于实际产出 测试是从项目维度保证质量 而不是测试阶段 UI自动化 下面简称自动化 基于UI进行自动功能测试 以Web端作为例子 一般的UI功能自动化都是基于HTM
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 外包干了3个月,技术退步明显。。。。。

    先说一下自己的情况 本科生 20年通过校招进入广州某软件公司 干了接近3年的 功能测试 今年年初 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了3年的功能测试 已经让我变得不思进取 谈了2年的女朋
  • 软件测试面试:还没有自动化测试项目经验,3个项目帮你走入软测职场!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • iOS:无法启动 .app 文件

    我不知道为什么它在我的 app 文件中寻找目录 每次我运行应用程序时 它都会在 iPhone 上安装应用程序 但不会运行并给出以下错误 谁能告诉我这个设置存储在哪里 谢谢 error failed to launch Users xxx L

随机推荐