当前位置:网站首页>软件测试技术之跨平台的移动端UI自动化测试(下)
软件测试技术之跨平台的移动端UI自动化测试(下)
2022-07-26 21:15:00 【学掌门】
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插件:
以上指令代表执行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,有可能需要通过升级版本、应用商店审核、最终用户更新的漫长过程才能得到解决,而这个过程会导致用户的流失。
当然,自动化的测试只能作为人工测试的辅助,完成不适合人类的工作,在第一轮测试中主动发现问题不是自动化测试的长处,即使可以发现,也要付出更多的成本。快速大量的回归测试才是自动化系统擅长的事情。
测试中没有银弹,提高人的主观能动性、避免形式化的束缚、使用自动化技术替代机械劳动,不断提高系统交付质量这条路上永远没有终点。
文章来源:网络 版权归原作者所有
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编,我们将立即处理
边栏推荐
- OPPO 自研大规模知识图谱及其在数智工程中的应用
- FreeRTOS personal notes - Software Timer
- What to do if the browser home page is tampered with, and how to recover if the home page is tampered with
- 拼多多获得搜索词推荐 API
- Pytoch uses RNN model to build person name classifier
- Flask对token的解码&挂载&装饰器&七牛云上传
- Go----Go 语言中的标识符和关键字
- 一篇让小百彻底搞懂性能调优
- 织梦提示DedeCMS Error:Tag disabled:php!
- A bowl of noodles in a dream
猜你喜欢

Isilon's onefs common operation commands (I)

Basic operation of (C language) files

仅需一个依赖给Swagger换上新皮肤,既简单又炫酷

Technology sharing | do you know the functions of the server interface automated testing and requests library?

A bowl of noodles in a dream

梦里的一碗面

测试员:“我有五年测试经验”HR: “不,你只是把一年的工作经验用了五年”

正规方程法(Normal Equation)原理以及与梯度下降法的区别

Oppo self-developed large-scale knowledge map and its application in digital intelligence engineering

JDBC summary
随机推荐
Summer vacation daily question week 7:7.18 - 7.24
Pytorch torch. add() torch. add_ () usage
06 cp 命令
京东一面:Redis 如何实现库存扣减操作?如何防止商品被超卖?
Four solutions of distributed session
基于CAShapeLayer和贝塞尔曲线的圆形进度条动画
LDAP -- realize unified login management of users
Thorough load balancing
js验证复杂密码
The principle of normal equation method and its difference from gradient descent method
JDBC总结
Cmake compiling obs-studio-27.2.0
Shrimp Shope gets the product details API according to the ID
Let me show you the MySQL isolation level. What happens when two transactions operate on the same row of data at the same time?
Flextronics responded to the "seizure of Huawei materials" incident: deeply regretted, looking forward to continuing cooperation!
拼多多获得搜索词推荐 API
Knowledge base tools | wechat, document center, image display page can be generated by dragging (with template, directly used)
45. Instance segmented labelme dataset to coco dataset and coco dataset to labelme dataset
实际权威来自信息优势
Altium Designer 22 中文字符乱码