使用Robot Framework实现多平台自动化测试
基于Robot Framework、Jenkins、Appium、Selenium、Requests、AutoIt等开源框架和技术,成功打造了通用自动化测试持续集成管理平台(以下简称“平台”),显著提高了测试质量和测试用例的执行效率。
01、设计目标
平台通用且支持不同类型的自动化测试
平台框架轻量、开放、灵活,有强大丰富的测试库,全面支撑PC桌面应用(如核心柜台和网上交易系统)、Web应用(如商城网厅)、APP应用(如手机证券)、接口(如柜台周边接口)、数据库(如Oracle)等自动化测试,便于后续持续测试开发和集中统一管理。
平台支持自动化测试全流程
平台展示界面统一、清晰、简洁,覆盖测试用例设计、测试脚本开发、测试执行、测试报告生成等流程。通过对测试流程实现统一管理,降低测试人员使用平台的门槛。
平台具有良好的扩展性、易维护性
平台支持协同工作、分布式测试执行,能与版本管理工具、软件缺陷管理系统、企业邮件系统等集成,同时在项目不断迭代的过程中,自动化测试脚本能弹性调整和代码复用。
02、架构设计
平台采用组件化的思想和分层架构,可分为4层,每一层都实现特定的功能,并提供接口给其它层调用:
最底层是被测系统,主要明确被测对象的形态。平台支持APP、Web和PC应用测试,以及接口、数据库等测试。
往上是测试库。平台除提供如进程、字符串、集合、截图处理等基础测试库外,还提供Web、APP、接口等专用测试的扩展测试库,以支持不同的被测系统选择相应的测试库。
中间是测试框架,其作用包括用例管理、测试数据管理、测试运行、测试报告等。
最上面则是持续构建层,负责任务、机器、排队等控制和调度,自动完成整个测试作业过程。
03、平台实现
在自动化框架选型上,我们选择Robot Framework(以下简称“RF”)作为自动化测试平台的核心底层框架,Jenkins作为持续集成与任务调度平台,同时选择AppiumLibrary、Selenium2Library、RequestsLibrary、AutoItLibrary等作为扩展测试库,以应对不同的测试需求。
(1)RF框架
RF是一款功能丰富并且扩展性强的开源自动化测试框架,主要用于轮次较多的回归测试。框架通过关键字的组合形成测试逻辑,最终通过各个底层测试库与被测系统交互,完成测试工作。
RF框架为APP、Web、接口、数据库测试等提供了标准的底层关键字API,测试人员只需在这些关键字的基础上开发自定义脚本,即可满足自身测试的要求。
(2)AppiumLibrary
Appium是一个开源、跨多平台多语言的测试框架,相比其它框架,它支持iOS和Android平台上的原生、Web和混合应用自动化测试,可在平台间重用代码,编写测试脚本和运行测试时不需要对源码重新编译,在脚本的编写和实现上对编程语言没有太多要求,测试更轻量灵活。
AppiumLibrary是RF框架基于Appium的第三方扩展应用程序测试库,可支持券商手机证券APP自动化测试开发。
(3)Selenium2Library
Selenium是为了实现多平台Web应用程序测试而专门设计的自动化测试工具套件,具有可扩展、跨平台、多浏览器支持等特性。Selenium 2集成了WebDriver,WebDriver通过原生浏览器支持或者浏览器扩展直接控制浏览器,测试人员可根据不同的平台、不同浏览器选择不同的WebDriver去执行测试。
Selenium2Library是RF框架基于Selenium2的Web测试库,可支持券商商城、网厅等Web应用自动化测试开发。
(4)RequestsLibrary
接口测试一般用于多系统间交互开发,或拥有多个子系统的应用系统开发的测试。Requests是用Python语言编写,基于urllib,采用Apache2 Licensed开源协议的HTTP库,可满足HTTP接口测试需求。RequestsLibrary是RF框架下的API测试库,可支持券商IFS或其它自定义开发接口自动化测试开发。
(5)AutoIt桌面应用测试
AutoIt是一款用于对Windows GUI进行自动化操作的软件,它可以模拟键盘按键,、鼠标移动以及窗口或控件的操作来实现自动化任务。AutoItLibrary是RF框架基于AutoIt的Win32桌面应用测试库,可支持券商核心柜台、网上交易等桌面应用系统自动化测试开发。
(6)Jenkins持续集成
Jenkins是一种开源的持续集成工具,它支持svn、Git等多种SCM配置管理工具,可根据项目要求设置定时构建(如每小时、每次间隔时间或每天晚上几点钟等)或触发构建(如源代码提交触发),支持Shell脚本、Windows批处理、Ant构造等多种构建方法,从而满足在不同操作系统上运行。
Jenkins支持分布式构建(类似于Selenium Grid),可实现多主机多任务并行执行。Jenkins还提供丰富的插件支持,安装Robot Framework plugin插件后可执行RF自动化测试用例。
04、平台的创新点
1、平台架构灵活、适应场景广,满足多种不同类型自动化测试
平台基于轻量的RF开源框架,具有良好的扩展性,通过集成不同的开源扩展测试库可满足不同类型、不同平台和应用的测试:
RF+AppiumLibrary可实现APP自动化测试,且可在iOS和Android之间重用代码,只需要编写出一个统一的测试脚本就可以运行在不同的平台上,这种方式将极大提高自动化测试脚本的使用率,节省编写和调试测试脚本的时间;
RF+Selenium2Library则可实现Chrome、IE、Firefox等多浏览器下的Web应用程序自动化测试;
RF+AutoItLibrary可实现一般Win32桌面应用程序自动化测试;
RF+RequestsLibrary可实现接口自动化测试,等等
所以该平台具有相当强的灵活性、兼容性和易用性,尤其适用于核心柜台、网上交易、手机证券等界面变化不大、软件生命周期长,经常推出新版本的产品自动化测试。
2、平台实现端到端自动化测试管理,一站式图形展示信息
平台支持用例管理、脚本开发调试、任务分布式调度执行、测试报告呈现全流程
3、基于数据和关键字驱动的自动化测试,灵活应对被测试系统变更
平台克服了传统自动化框架录制回放模式脚本高耦合性的缺点,具有高健壮性、高复用性和良好的维护性:
支持数据驱动模式,测试数据和脚本分离,测试数据变更无需修改脚本,提高了自动化测试脚本的可复用性。
实现界面元素统一管理,界面元素和测试脚本分离,应用程序界面变动只要修改失效的界面元素即可,无需大量修改脚本,提高了脚本的可维护性。
业务流程测试基于可以灵活组合的关键字脚本进行控制,通过增加关键字即可实现测试框架的功能扩展。
脚本结构釆用分层设计思想,将自动化测试脚本分成用例层、流程层、页面元素层和变量集合层,方便实现高内聚、低耦合的测试脚本设计。
05、平台的实施效果
1、提高测试用例设计质量和业务场景的覆盖度
东莞证券自动化测试项目自实施以来,用例粒度和覆盖度得到了较大改善,手机APP交易、接口、Web(网厅/商城/有财贷)、核心柜台、网上交易的测试用例分别达到1645、153、76、569和1168个,用例规模平均增长近8倍,基本覆盖所有交易类业务。平均自动化率达65%以上,极大提升了产品研发团队的质量信心。
2、提升测试用例执行效率,加快产品投产速度
自动化测试提高了测试用例执行的效率和准确性,降低了生产应用系统的故障率。另外持续集成尽早地介入,减少了版本延迟发布的可能性。以东莞证券手机APP交易自动化测试为例,之前版本迭代周期是2-3个月,开展自动化测试后缩短至1个月;以往一轮15人天的手动测试改为自动化执行后不到2人天。按平均每月迭代一次计算,全年可省近150人天的测试资源。如对接独立的测试柜台(支持7*24执行)并增加多台设备并行执行,自动化测试效率还可大幅提升;该项目已投入近20轮版本迭代测试,发现缺陷17个。
06、总结
东莞证券基于开源的RF框架从0到1建立起通用自动化测试体系,并在手机APP、核心柜台、网上交易、接口、商城、网厅等项目中落地,同时结合Jenkins实现自动化测试持续集成和分布式构建,有效支撑了敏捷和快速迭代过程。
限于篇幅,本文并未就APP、Web、桌面应用、接口等自动化测试开发方法展开详细论述,而是提供一种建立通用自动化测试持续集成管理平台的思路,希望对其他券商有一定的启发和借鉴意义。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
相关文章:

使用Robot Framework实现多平台自动化测试
基于Robot Framework、Jenkins、Appium、Selenium、Requests、AutoIt等开源框架和技术,成功打造了通用自动化测试持续集成管理平台(以下简称“平台”),显著提高了测试质量和测试用例的执行效率。 01、设计目标 平台通用且支持不…...

Java基础进阶02-xml
目录 一、XML(可拓展标记语言) 1.学习网站: 2.作用 3.XML标签 4.XML语法 5.解析XML (1)常见解析思想DOM 6.常见的解析工具 7.DOM4j的使用 8.文档约束 (1)概述 (2…...
《开始使用PyQT》 第01章 PyQT入门 03 用户界面介绍
03 用户界面介绍 《开始使用PyQT》 第01章 PyQT入门 03 用户界面介绍 The user interface (UI) has become a key part of our everyday lives, becoming the intermediary between us and our ever-growing number of machines. A UI is designed to facilitate in human-co…...
HTML-列表
列表 abbr: li : list item ol : orderd list ul : unordered list dl : definition list dt : definition title dd : definition description 1.有序列表(order list) 概念:有顺序或侧重顺序的列表 <h2>要把大象放冰箱总共分几步</h2> &…...

OceanBase创建租户
租户是集群之上的递进概念,OceanBase 数据库采用了多租户架构。 集群偏部署层面的物理概念,是 Zone 和节点的集合,租户则偏向于资源层面的逻辑概念,是在物理节点上划分的资源单元,可以指定其资源规格,包括…...

Java中Integer(127)==Integer(127)为True,Integer(128)==Integer(128)却为False,这是为什么?
文章目录 1.前言2. 源码解析3.总结 1.前言 相信大家职业生涯中或多或少的碰到过Java比较变态的笔试题,下面这道题目大家应该不陌生: Integer i 127; Integer j 127;Integer m 128; Integer n 128;System.out.println(i j); // 输出为 true System.o…...

【Unity】粒子贴图异常白边问题
从PS制作的黑底,白光的贴图。放入Unity粒子中,拉远看会有很严重的白边,像马赛克一样。 材质使用:Mobile/Particles/Additive 经测试只使用一张黑色的图片,也会有白边。 解决方案: 关闭黑色底…...
bxCAN接收处理
接收处理 为了接收 CAN 消息,提供了构成 FIFO(First Input First Output) 的三个邮箱。为了节约 CPU 负载,简化软件并保证数据一致性,FIFO 完全由硬件进行管理。应用程序通过 FIFO 输出邮箱访问 FIFO 中所存储的消息。 有效消息 当消息依据…...

前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展)
前端面试题-(浏览器内核,CSS选择器优先级,盒子模型,CSS硬件加速,CSS扩展) 常见的浏览器内核CSS选择器优先级盒子模型CSS硬件加速CSS扩展 常见的浏览器内核 内核描述Trident(IE内核)主要用在window系统中的IE浏览器中&…...
WEB前端标签的使用
图片标签 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><!-- img标签就是用来将图片显示在页面上的标签 --><img src"图片路径"><!-- 可用路径&#…...
739. 每日温度
提示给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: tempe…...

stm32F103C8T6简介及标准库和HAL库的区别
什么是单片机 单片机是一种集成电路芯片,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换电路、A\D转换器等电路)集成到一…...

操作系统(3)---操作系统引导
在安装操作系统后,磁盘的分布如下: C盘是这个磁盘的活动分区(又称主分区),安装了操作系统 开机过程如下: 1.计算机的主存由RAM和ROM组成,RAM关机数据消失,而ROM(Basic In…...
Vue3+Ts:实现paypal按钮
Vue3Ts:实现paypal按钮 一、前端页面按钮实现第一步:下载paypal.js依赖第二步:引入要使用的vue页面,并调用。 二、实现逻辑研究第一点:了解下Buttons自带的style属性第二点:了解下Buttons自带的处理方法第三…...
.[Decipher@mailfence.com].faust 勒索病毒数据怎么处理|数据解密恢复
尊敬的读者: 随着网络技术的发展,勒索病毒已经成为数字时代中一种极具破坏性的威胁。[support2022cock.li].faust [tsai.shenmailfence.com].faust [Encrypteddmailfence.com].faust[Deciphermailfence.com].faust 勒索病毒是其中的一种,它以…...

【UE Niagara】制作星光飘落效果
效果 步骤 1. 新建一个Niagara系统 选择模板“Fountain” 这里命名为“NS_Flare” 打开“NS_Flare”,选中Sprite渲染器,设置材质为上一篇文章中(【UE 材质】闪烁的星星材质)制作的材质“M_Flare” 2. 由于要在Niagara中调整粒子的…...

SLAM初学
昨天组长布置了任务,要求看香港大学的一篇论文,一打开,好家伙,纯英文,直接翻译着看 几个读不懂的概念: 体素:体素是三维空间中的体积像素的简称。它类似于二维图像中的像素,但在三…...

腾讯云轻量应用服务器Docker如何一键搭建属于自己的幻兽帕鲁服务器?
幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏,在帕鲁的世界,玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活,也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活,也…...

win10+elasticsearch8.12 安装教程
Elasticsearch是一种搜索引擎,本地安装完成之后,可使用其他编程语言(例如python)与elasticsearch建立连接,然后使用python脚本搜索elasticsearch中的数据 1下载 elasticsearch elasticsearch最新版官网下载链接 点击…...

经典面试题-死锁
目录 1.什么是死锁? 2.形成死锁的四个必要条件 3.死锁的三种情况 第一种情况: 举例: 举例: 第二种情况:两个线程 两把锁 举例: 第三种情况:N个线程 M把锁 哲学家进餐问题 1.什么是死锁&…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...