目录

前言:

一、方法介绍

1、UI Automator

3、shell脚本

二、shell脚本实现自动化测试原理和步骤

1、 原理

2、步骤

三、shell自动化测试实例


前言:

       在开发项目的过程中,我们将某个阶段的需求完成并且提测,通常,在测试工程师更细致的测试之下,会测试出一些我们没有考虑周全而出现的代码逻辑问题或自测没有测出来的交互问题,有些问题可以直接通过打印定位,但是对于一些偶现,且在当前打印中并不能快速定位的问题,那我们接下来的调试步骤一般是在相关代码里添加一些自己的新的打印,然后根据测试工程师描述的步骤进行操作,然后再观察打印,重复这两个步骤之后一步步debug出有问题的代码段,由于这个问题是偶现的,若概率非常小,则需要我们不断的手动点击屏幕,做大量的重复的动作去复现测试工程师描述的问题,该过程相当费“体力”,此时我们会想,既然该操作动步骤是重复的,那我们有没有方法进行自动化测试呢。

        那么接下来我重点介绍一种自动测试的方法,shell脚本自动化测试。

一、方法介绍

     要实现自动化测试,方法有很多,例如使用原生框架UI Automator、使用第三方开源工具Appium、以及我提到的shell脚本自动化测试等等。接下来,对于前两种方法我只是做一个简单的介绍,第三种自动化测试方法我会着重说明。

1、UI Automator

      UI Automator 是一个适用于跨应用功能界面的界面测试框架,对系统和已安装的应用进行测试。借助 UI Automator API 在设备上测试可见元素,而无论 Activity 位于哪里。因此你可以执行打开“设置”菜单等操作或测试设备中的应用。你的测试可以通过描述词查找界面组件,例如该组件中显示的文字,或内容说明等。

• 类型:官方原生测试框架。

• 用途:跨应用UI自动化测试,支持操作系统级界面元素(如通知栏、设置菜单)。

• 特点:无需源码,提供API定位控件,支持多设备并行测试。

• 工具链:UI Automator Viewer用于控件层级分析。

• 缺点:对H5支持有限。

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等)。

• 用途:跨平台端到端测试,支持原生、混合和Web应用。

• 优势:  

1)多语言支持(Python、Java等),脚本复用性高。

2)无需修改应用代码,通过Desired Capabilities配置设备参数。

• 典型操作:元素定位(ID/XPath)、滑动、输入文本。

3、shell脚本

相比于以上提到的两个方法,该方法较为轻量化,但可以测试的功能较为有限,优势是对于一些简单的测试,例如简单的重复点击屏幕几个固定坐标的测试,使用该方法方便快捷,轻量化,不需要配置较为繁杂的坏境,且代码量非常小。

  

• 用途:测试一些较为简单的测试项,例如重复点击屏幕的固定坐标等。

• 优势:轻量化,系统级别测试,代码编写简单,不需要配置复杂的环境等。

• 缺点:不能实现较为复杂的测试。

二、shell脚本实现自动化测试原理和步骤

1、 原理

      Shell自动化测试实际上就是将我们平时adb调试时使用的各种命令组合起来,组成一个可以满足我们测试要求的测试文本,由于我们的测试需求通常是做大量重复操作复现问题,故该脚本通常包含循环语句。测试的时候运行该脚本即可实现自动化测试。

2、步骤

(1)将我们的测试逻辑通过shell语句组合起来,形成一个文本,例如myTest.sh;

(2)adb或者串口连接我们的设备,将该shell文本复制到我们的设备的某个路径下,例如etc/myTest.sh;

(3)使用执行命令使该脚本执行起来(./etc/myTest.sh)。

三、shell自动化测试实例

以下是自动化测试脚本实例,该脚本的功能是打开应用一和应用二,且将它们进行分屏,重复200次。

  1. #!/system/bin/sh
  2. sleep 1
  3. i=1
  4. while [ $(($i)) -le 200 ]
  5. do
  6. i=$(($i+1))
  7. # 最近任务
  8. input tap 3811 1087     //点击坐标(38111087) 
  9. sleep 0.5
  10. input tap 3796 1141
  11. sleep 0.5
  12. # kill all_pid
  13. input tap 3615 1483       //点击坐标(3615,1483) 
  14. sleep 0.5
  15. # init
  16. input keyevent HOME
  17. sleep 2
  18. # 进入侧边栏
  19. input tap 3811 1087
  20. sleep 0.5
  21. input tap 3796 1141
  22. sleep 0.5
  23. # 打开应用分屏
  24. input tap 3238 702
  25. sleep 0.5
  26. # 选择应用一
  27. input tap 2627 738
  28. sleep 0.5
  29. # 选择应用二
  30. input tap 2265 925
  31. sleep 0.5
  32. # 确认开启进入分屏
  33. input tap 2643 1178
  34. sleep 6
  35. done

部分代码语句解析:

while [ $(($i)) -le 200 ]   : 循环测试两百次

input tap 3811 1087     : 点击屏幕坐标(3811,1087)

input keyevent HOME    : 点击home按键,回到主页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96404.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96404.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96404.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

绿联科技全球化突围:业财一体化如何打通全球电商全链路数字化

绿联科技专注数码配件20年,产品覆盖全球100多个国家,年销售额突破30亿。作为"连接"领域的专家,绿联深知连接的真谛不仅在于硬件产品,更在于数据的全球化连接。在全球电商竞争日益激烈的今天,绿联率先探索业财…

uv教程 虚拟环境

什么是uv 可以创建虚拟环境 安装依赖 安装uv 参见官方文档 安装 | uv-zh-cn 自定义安装目录,winr 输入powershell,输入如下命令 $env:UV_INSTALL_DIR "C:\Custom\Path";powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/inst…

绕过codex在vscode中登录403的问题

codex安装: npm i -g openai/codex codex升级: npm install -g openai/codexlatest 绕过codex在vscode中登录403的问题: https://linux.do/t/topic/924206/4 1.在windows端powelshell登陆好codex; $env:HTTP_PROXY"http://…

软件研发如何选对方法论?传统计划驱动与敏捷价值驱动的全面对比

软件项目研发中的方法论是一个核心话题,它决定了团队如何规划、执行和交付软件。下面我将对这些方法论进行一个全面的概述,从传统的到现代的,并说明它们的核心思想、适用场景和趋势。 一、 方法论的核心分类 软件研发方法论主要分为两大阵营:传统计划驱动(Plan-Driven)…

【服务器】将本地项目部署到服务器

当我们已经有了一个服务器后 如何将本地项目部署到服务器呢第一步,找到云服务器实例,查看公网IP地址第二步,推荐使用 Windows 自带的 PowerShell ssh root你的公网IP # 例如: ssh root47.98.123.45如果超时,首先检查服…

Flink中的 BinaryRowData 以及大小端

背景 本文基于 Flink 1.17.0 写此文章的目的是为了说明 Flink 堆内和堆外内存以及 内部 BinaryRowData 行处理的优化。 分析 堆内和堆外内存 跟Spark的内存管理不一样,Flink 中的堆内和堆外一直都是存在的。 堆内内存(JVM Heap)存储用户对象和…

HTTP/3.0:网络通信的技术革新与性能飞跃

🌐 HTTP/3.0:网络通信的技术革新与性能飞跃 Refer:PPP PRIVATE NETWORK™ 2 企业级虚拟以太网接入综合解决方案介绍 🚀 引言:悄然来临的网络革命 你是否曾期待视频加载卡顿成为过去?YouTube 已经迈出了重…

【golang学习笔记 gin 】1.1 路由封装和mysql 的使用封装

安装gin go get -u github.com/gin-gonic/gin go get -u github.com/go-sql-driver/mysql创建相关目录 gotest->conifg->database.go->redis.go->controller ->index.go->model->user.go->router->router.gomain.go 创建用户模型 package model imp…

SQL 层面行转列

背景:如果对一些评论、点赞、收藏等互动数据,使用了按照 type 分类存储,num 也是对应的。这样如果创建一个帖子,那么就会出现 3 行数据(type 不同,num 不同,对应评论点赞和收藏)&…

langchain4j笔记篇(阳哥)

一 概述1.1 概述langchain4j:langchain for java1.2 作用langchain4j的目标是简化将LLM集成到java应用程序中的过程。二 案例简单helloworld2.1 大模型调用三件套1.阿里百炼平台的通义模型: https://bailian.console.aliyun.com/2获取api-key&#x…

有鹿机器人的365天奇幻日记:我在景区当扫地僧

第一章 古建守护者:2cm的极致艺术琉璃瓦下的秘密记得那是个晨雾缭绕的清晨,我接到首个重要任务:清扫明代琉璃碑亭。这里的每块地砖都是文物,传统清洁工具根本不敢靠近。每天以2cm的精准贴边沿碑座作业,如今我每周都要为…

Objective-C方法参数标签怎么设置

在Objective-C中,方法名称可以通过几个标签名称组成,这是跟C/C中完全不一样的地方。每个标签都是字段冒号的写法,冒号后面是方法的参数,参数包括参数类型和参数变量,其中参数类型要用括号括起。方法参数的标签是通过在…

20250910_《SQL Server 数据库事务日志定期清理方案(精简优化版)》以10.1.1.31服务器的gtp-default数据库为例

《SQL Server 数据库事务日志定期清理方案(精简优化版)》 一、前提条件 数据库 gtp-default 已设置为完整恢复模式 (FULL)。 每天凌晨02:00执行完整备份,保证日志备份可用。 SQL Server Agent 已启用。 作业所有者为 sa,具有 sysadmin 权限。 Agent 服务账号 NT Service\S…

实习项目包装--HTTP 协议和 Web API

好的,完全没问题!你问到了一个非常核心且基础的知识领域,这是现代Web开发和几乎所有网络应用的基石。我们暂别嵌入式系统,专门来上一堂关于 HTTP 协议和 Web API 的详细课程。 我会从最根本的概念讲起,逐步深入到你所…

ICCV-2025 | 中科院自动化所世界模型助力具身导航!NavMorph:连续环境中的视觉语言导航自演化世界模型

作者:Xuan Yao1,2^{1,2}1,2, Junyu Gao1,2^{1,2}1,2, Changsheng Xu1,2,3^{1,2,3}1,2,3单位:1^{1}1中科院自动化所多模态人工智能系统国家重点实验室,2^{2}2中国科学院大学人工智能学院,3^{3}3鹏城实验室论文标题:NavM…

【ARDUINO】ESP8266的AT指令返回内容集合

一、基础测试指令(确认模块通信) 1. AT(测试模块是否响应) 功能:检测ESP8266与控制器(如Arduino)的串口通信是否正常。 返回内容: 成功:OK(无额外数据,仅确认通信正常) 失败:无返回(可能是波特率不匹配、接线错误) 示例:发送:AT 返回: OK二、Wi-Fi模式配置指…

Mockoon:开源免费的本地Mock服务工具,提升前后端联调效率

你有没有过这种经历?做前端开发时,后端同事的接口还没写完,你这边要调页面数据,只能对着空控制台发呆?要么手动写个 JSON 文件当假数据,改一次数据就得重新保存文件、刷新页面;要么用在线 Mock …

【Mysql|第一篇】Mysql的安装与卸载、Navicat工具的使用

一、Mysql的安装与卸载: 1、查看是否安装过mysql: (1)cmd中输入mysql看是否有显式提醒 (2)右击此电脑,选择管理,在左侧栏中找到服务,查看是否有与mysql相关的 2、卸载的…

贪心算法应用:流行病干预策略问题详解

Java中的贪心算法应用:流行病干预策略问题详解 贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致全局最优解的算法策略。在流行病干预策略问题中,贪心算法可以有效地帮助我们做出资源分配决策,以达到最优的防…

git删除最近一次提交包括历史记录。

方法一:删除最近的一次提交(最常见) 如果你只是想撤销最后一次提交,这是最简单的方法。在本地删除提交 使用 git reset --hard 命令,将你的本地分支回退到上一次提交。Bashgit reset --hard HEAD^HEAD^ 指的是 HEAD 的…