软件测试技术之跨平台的移动端UI自动化测试(下)

3、使用JavaScript引擎执行代码:JavaScript引擎的选择

iOS中可以使用系统自带的JavaScriptCore框架执行。Android中可以使用Rhino作为执行引擎,Rhino 是一种使用 Java 语言编写的 JavaScript 的开源实现,原先由Mozilla开发,现在被集成进入JDK 6.0。当然也可以选择Chrome的V8引擎执行,选择Rhino引擎的原因是它用Java语言编写,可以直接以jar包的形式集成到项目中。

4.1、JavaScript调用Native端插件执行命令:JavaScript和Native端通信方法

如果使用WebView来显示网页,可以利用WebView的特性进行JavaScript和Native端(统指iOS和Android端)通信。但直接使用JavaScript引擎时,无法使用shouldOverrideUrlLoading()等方法进行拦截具体指令,并且Native代码和JavaScript分处不同的作用域,相互之间不能共享对象,因此无法直接相互调用。针对这种情况,工程师在JavaScript的内存空间维持一个指令队列,每当JavaScript需要调用Native代码时,把指令推入指令队列,Native端从指令队列中取出一个指令执行,执行完毕后,检查指令队列中是否有下一个指令继续执行,直到所有指令执行完毕。

4.2、JavaScript调用Native端插件执行命令:JavaScript和Native端通信协议

JavaScript指令队列中的每一条指令,包括插件名称、目标、参数三部分。

Native端收到插件名称后,查找预先在Native端注册的插件,传入具体“目标”和“参数”来执行。

每一条指令可以以“插件名称://目标?参数”的形式来传递。

例如在测试代码中经常使用的perform_event插件:IMG_260

以上指令代表执行Native端的“点击界面上的7日年化收益率”用户操作。

5.1、根据指令运行测试业务:Native端使用插件执行指令

Native端启动时需要注册一系列插件,例如perform_event插件代表执行用户动作,snapshot代表截图。由于插件实现在Native端,所以要根据平台特性进行具体实现,例如“perform_event://client?text=7日年化收益率”这条指令,在iOS端可以从UIViewController的View开始,向下查找每一层的UILabel,看是否有包含特定文字的项目,然后在该项目上执行点击动作。而在Android端,可以使用solo这种测试框架来直接点击屏幕上的特定文字部分。

使用代码来模拟用户行为,例如打开“购买”页面,既可以点击“购买”按钮(perform_event://client?text=7日年化收益率),也可以直接启动购买页面(open://购买页面)。为了更加真实的模拟用户行为,建议测试过程中尽量模拟用户的真实行为,不要跳过用户操作直接实现结果,例如前例中建议从页面的所有View中找到带有“购买”文字的按钮,实现按钮的点击操作。

5.2、根据指令运行测试业务:测试数据准备

测试中从Native端请求的REST API必须使用模拟的测试数据,以保证在任何时刻页面数据的一致。

模拟数据一方面可以在Native端通过Mock一个HTTP Server来截断所有HTTP请求,但是这样同样需要iOS和Android两个平台都进行编写,日后也需要维护两部分数据。更好的方法是直接在测试服务器上搭建一个模拟的REST API服务,针对每一个测试用例,返回固定的模拟数据,如果数据简单,使用静态JSON文件即可。

6、数据收集和对比

截图之后的图片直接在Native端通过HTTP协议上传至服务器。在服务器端,通过手机型号、操作系统、操作系统版本、业务名称、编号进行分类保存,这样可以迅速查找到某一个设备上某一个业务的所有截图。测试服务器中保存所有录制数据,每一次从测试设备收集到测试截图后,在服务器端和录制的数据进行像素对比,然后把测试结果返回给移动端的Unit Test Case。

三、总结

通过以上方式,每次完成一个模块的集成测试,工程师都会编写完整的测试代码,并录制测试对象在所有设备上的截图。日后有任何修改,都会在所有测试设备上进行整个系统完整的回归测试,像素级别的比较可以保证系统所有的页面、每一个像素、在每一台设备上都没有变化,大大节省了回归测试的时间。

通过服务器端统一部署的方式,省去了在iOS和Android两端分别编写测试代码的工作。并且用于测试的JavaScript中,只需要编写面向用户操作的交互指令,大大降低了编写测试代码的技术要求和时间成本。

当系统变得日益复杂、开发人员越来越多、需要适配的机型不断增加时,这种跨平台的自动化UI测试,可以有效保证移动端的质量,毕竟一个移动端的致命bug,有可能需要通过升级版本、应用商店审核、最终用户更新的漫长过程才能得到解决,而这个过程会导致用户的流失。

当然,自动化的测试只能作为人工测试的辅助,完成不适合人类的工作,在第一轮测试中主动发现问题不是自动化测试的长处,即使可以发现,也要付出更多的成本。快速大量的回归测试才是自动化系统擅长的事情。

测试中没有银弹,提高人的主观能动性、避免形式化的束缚、使用自动化技术替代机械劳动,不断提高系统交付质量这条路上永远没有终点。

文章来源:网络 版权归原作者所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux mysql

安装 下载包 wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.31-1.el8.x86_64.rpm-bundle.tar解压 tar -zxvf mysql-8.0.31-1.el8.x86_64.rpm-bundle.tar -C /usr/local/mysql安装openssl-devel插件 yum install openssl-devel安装rpm包 使用rpm -ivh安装图中r…

【Unity项目实战】从零手戳一个背包系统

首先我们下载我们的人物和背景资源,因为主要是背包系统,所以人物的移动和场景的搭建这里我们就不多讲了,我这里直接提供基础项目源码给大家去使用就行 基础项目下载地址: 链接: https://pan.baidu.com/s/1o7_RW_QQ1rrAbDzT69ApRw 提取码: 8s95 顺带说一下,这里用到了uni…

AttributeError: module transformers has no attribute LLaMATokenizer解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

AES加密

来源:链接: b站up主可厉害的土豆 (据评论区说图片中有计算错误,但是过程是对的。只是了解过程问题不大,专门研究这一块的话自己可以看视频算一下) 准备 首先,明文是固定长度 16字节 128位。 密钥长度可以…

TCP协议一

TCP数据报格式 TCP通信时序 下图是一次TCP通讯的时序图。TCP连接建立断开。包含大家熟知的三次握手和四次握手。 在这个例子中,首先客户端主动发起连接、发送请求,然后服务器端响应请求,然后客户端主动关闭连接。两条竖线表示通讯的两端&…

houjie-cpp面向对象

houjie 面向对象 面向对象(上) const 在一个函数后面放const,这个只能修饰成员函数,告诉编译器这个成员函数不会改数据 const还是属于函数签名的一部分。 引用计数:涉及到共享的东东,然后当某个修改的时候&…

Mysql的学习与巩固:一条SQL查询语句是如何执行的?

前提 我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单…

【Paper】2019_Resilient Consensus Through Asynchronous Event-based Communication

Wang Y, Ishii H. Resilient consensus through asynchronous event-based communication[C]//2019 American Control Conference (ACC). IEEE, 2019: 1842-1847. 文章目录I. INTRODUCTIONII. EVENT-BASED RESILIENT CONSENSUS PROBLEMA. Preliminaries on graphsB. Event-base…

基于Java+ SpringBoot+Vue 的网上图书商城管理系统(毕业设计,附源码,教程)

您好,我是程序员徐师兄,今天为大家带来的是 基于Java SpringBootVue 的网上图书商城管理系统(毕业设计,附源码,教程)。 😁 1.Java 毕业设计专栏,毕业季咱们不慌忙,几百款…

电脑桌面图标间距突然变大怎么恢复

1. WindowsR打开 > 输入regedit 按住WindowsR打开运行,输入regedit并点击确定。 2. 双击Control Panel 双击展开HKEY_CURRENT_USER,双击展开Control Panel,双击展开Desktop。 3. 更改间距 点击打开WindowMetrics, 双击打开…

两年外包生涯,给我后面入职字节跳动奠定了基础.....

我是一位软件测试工程师。从大学毕业后,我进入了一家外包公司,在那里工作了两年时间。虽然我在公司中得到了不少锻炼和经验,但是我一直渴望能够进入一家更加专业的公司,接触更高端、更有挑战性的项目。 于是,我开始主…

Keil 4 安装教程及简单使用【嵌入式系统】

Keil 4 安装教程及简单使用【嵌入式系统】前言推荐说明Keil 4 for Arm安装教程1.安装MDK2.激活mdkkeil 4 for arm 的简单使用1建立新工程2在工程下创建新文件3.设置工程属性4.中文注释5.编辑代码6.build7.debug8. 调试窗口简介keil 4 for C51安装教程1.前期准备2.开始keil4 for…

记录-VueJs中如何使用Teleport组件

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在DOM结构相对比较复杂,层级嵌套比较深的组件内,需要根据相对应的模块业务处理一些逻辑,该逻辑属于当前组件 但是从整个页面应用的视图上看,它在DOM中应该被渲染在整个vue应用外部的其他地方,不能影响…

[架构之路-159]-《软考-系统分析师》-10-系统分析-6-现有业务流程分析, 系统分析最核心的任务

目录 第 10章 现有系统 分 析 1 0 . 6 现有业务流程分析 10.6.1 业务流程分析槪述 1 . 业务流程分析的步骤 2 . 业务流程分析的方法 10.6.2 业务-流程图TFD 1. T F D 的基本符号 2. TFD的绘制 10.6.3 业务 - 活动图 10.6.4 业务流程建模BPM 1. B P M 概述 2 . 标杆…

计算机视觉基础__图像特征

计算机视觉基础__图像特征 本篇目录: 一、前言 二、位图和矢量图概念 三、图像的颜色特征 四、RGB 颜色空间 五、HSV 颜色空间 六、HLS 颜色空间 七、实例代码 八、参考资料 一、前言 传统图像处理,需要找出图片中的关键特征,然后对这…

window端口占用如何杀死进程

1、输入命令:netstat -ano|findstr “8099” 2、杀死命令 taskkill /PID 2980 -T -F

Python机器学习:朴素贝叶斯

前两天不知道把书放哪去了,就停更了一下,昨天晚上发现被我放在书包夹层里面了,所以今天继续开始学习。 首先明确一下啊,朴素贝叶斯是什么:朴素贝叶斯分类器是一种有监督的统计学过滤器,在垃圾邮件过滤、信…

服务 API 设计之 ——API 参数规范

【强制】字段名称用小驼峰风格 【强制】Service API 返回值必须使用 Response 包装 Service API 返回值强制要求进行通用包装,例如:Response。Response 的作用: 统一方法表示 API 调用是否成功API 调用失败时,统一格式反馈错误 C…

vue实现轨迹回放(很详细)

效果 功能 时间搜索查询轨迹并生成(默认是当前的一天的时间) 图标能跟随路径方向移动 删除了百度logo和版权信息(业务需要,不建议删除) Vue Baidu Map npm install vue-baidu-map --save main.js import Vue from vu…

关于h5跳转app的坑

需求&#xff1a;h5点击按钮跳转app&#xff0c;有下载app的直接打开&#xff0c;无下载就跳转下载的链接&#xff08;安卓跟ios的下载链接不一样&#xff09; 1、用超链接的方式打开app <a href"xxxx"></a> 弊端&#xff1a;这种方式只能控制有下载ap…
最新文章