一次Linux桌面自动化测试工具的试用经历分享

最近老板提出桌面应用要上自动化测试,让我研究研究。研究了一阵,这里做一下分享。

我们公司是国产化平台的软件企业,主要做国产Linux系统平台的产品。本公司产品主要是Qt做的,跨平台地图应用,也包括国产平台,如银河麒麟,搜了一下国内外软件。国外有一家Squish能做,国内有CukeTest能做。但因为是国产化平台,所以找了国内的这家。申请CukeTest试用版,看官方的说明是支持全平台的自动化工具。今天分享一下试用心得。

背景介绍

公司环境主要是银河麒麟、中标麒麟和Ubuntu。我试用电脑上装了Ubuntu 18.04,环境里面除了从apt安装的默认qt4.8跟5.9,另外手动安装了最新版的qt 5.15用于开发桌面应用。

安装

申请了Linux完整版试用,拿到了CukeTest 1.5.14.deb安装包,直接使用dpkg -i命令安装上去,打开了界面如下:

安装界面

示例学习

初见

在欢迎界面右下角提供了几个示例,但是一个个点开看过去都是Web跟API的示例,而我要的是Qt也就是桌面自动化的示例,似乎这里还没有提供。好在官网里面提供了不少Linux平台Qt测试的文档跟视频,照着视频教程里面提供的示例代码,从github拷了一份到电脑准备跑一跑学习一下。

选择了提供的Qt table的示例,看描述是针对表格应用的,恰好公司应用里面也涉及到很多表格的正确性测试。示例项目内容如下:

table示例项目

项目的结构如下:

项目结构

因为没看到项目文件之类的可以直接关联打开项目的文件,只有一个package.json文件,检查了一下里面是版权信息跟模版之类的内容。所以直接从CukeTest界面打开table示例所在的文件夹,打开后如下所示:

打开table示例项目

table示例主界面

试着点击一下工具栏上的运行按钮,CukeTest就最小化进入运行状态了,弹出一个应用,运行时似乎还有字幕显示。因为很快就运行完了,总共跑了十几秒,运行结束以后跳出了一个图表,应该就是描述刚刚的运行情况了。

运行结果

仔细看了一下跟项目,至少我大概明白了这个软件的测试方式,也就是它根据这一个个场景与步骤的定义来执行,如果步骤的执行有问题,就会呈现在这个报表上,好让测试人员查看。

步骤比对

模型管理器

接着看教程视频,了解到这个软件还有一个管理控件识别的模块,叫作模型管理器,用于把要操作的控件加进去以便进行自动化,而保存这些控件信息的文件就叫作模型文件,位于项目中的features/step_definitions/*.tmodel文件中。双击该文件打开了模型管理器,如下:

模型管理器

第一次启动的用模型管理器侦测控件时,我从CukeTest的安装目录下找到了被测的表格应用,就是Qt自带的样例Dock Widget。手动把它打开了,但是却出现了控件识别不到的问题: 识别应用中的控件没有识别到。高亮模型管理器中已有的控件都不生效,会出现了错误1003: 无法找到匹配的应用:

识别与高亮失败

接着看视频,找到了问题的所在,是由于自动化的机制决定了要通过特殊的方式启动被测应用,这里我们通过模型管理器启动一下这个表格应用,之后才能识别到。因为它会在被测应用中加载一个名为Qt Agent的服务。之后才看到这篇文档中有讲解:启动应用

完美解决了问题!识别跟高亮功能都能正常的运作,如下所示:

识别新的控件

并且在模型管理器左下角也出现了被测应用的信息:

应用信息

接着在识别到的控件中控件操作标签页,看到了提供的一些自动化操作,而且工具看起来是针对不同的控件都有不一样的操作方法,文档中也提供了这些操作方法的参考手册对象操作API。下面是用工具提供的set方法修改单元格数据的结果:

修改单元格数据

好了,现在我觉得我已经部分掌握了自动化桌面软件的基础了,让我开始来试试完整的自动化流程。

编写自动化

补课

打开主要的代码文件definition1.js,刚了解了一下CucumberJS框架,所以这个代码也比较容易看懂,大致就是每个场景的步骤对应一个函数。里面有好多async/await的关键字,之前了解Node.js的语法时好像没看到这部分。为了看懂这些代码,我又把Node.js中的异步调用一章看了一下,主要是Promise和async/await的用法,node果然很先进啊,async/await可以完成异步调用,相当于是通过这种方式实现多线程的效果,这下涨经验了。

脚本界面

再次回去复习了视频教程,发现里面提到了,表格控件因为是复杂控件,CukeTest提供了额外的自动化方法来应对不同的自动化场景,这里实际上只要再掌握一个getItem操作方法就可以应对了。

getItem操作方法能够根据传入的行列信息获取目标位置的单元格对象(类似Excel中定位单元格的方式),获取到这个对象以后再去执行它的操作方法即可。更多内容可以查看表格的参考手册

自己动手丰衣足食

看完视频,脑子说:噢我会了,手说:你会了个啥?这大概是自己模仿视频教程写一个自动化项目的真实感受了。创建项目的第一步就栽了个跟头,做到后面发现我这项目怎么没有.tmodel文件呢?回头看了下视频发现没改模版,选择了Basic模版,又赶忙重新建了一个,选择Qt模版。

注意选择Qt模版

这回创建的味儿对了:

有tmodel了

接着是我自己写的一个简单的自动化流程,或者说自动化剧本,总体上是跟示例项目的结构一致的,自己只新建了一个hooks.js文件。

我的自动化流程
hooks.js文件

开始运行

在运行的过程中,因为表格比较长,其中一个步骤要执行很久(因为我在步骤里面遍历了整个表),以至于误触了超时时间。在hooks.js文件中设置了超时时间为30秒,所以当运行某个步骤时超过了这个时间,就会触发timeout的错误然后退出。按照文档超时里的方法,把hooks.js文件中设置的超时时间调为-1来禁用掉超时(虽然官方不建议这么做)来完整的执行完自动化。

自动化的结果如下:
![被测应用的运行结果]https://upload-images.jianshu.io/upload_images/4377716-3830ff1c8074f66e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

控制台的输出

运行结束后获得了一个运行报告:

被测应用的运行结果

总结

这次的试用体验总体来说还不错,尤其是现在Linux平台的自动化测试工具还没有流行的软件,CukeTest算是Linux平台做桌面自动化测试的一种选择。而且去了解了一下这个工具的背景,它其实一直都是支持全平台的,但是桌面自动化这一块原先是在Windows平台耕耘了很久,在不久前才正式宣布支持Linux平台的Qt桌面自动化,但是从体验上来说已经具有相当的成熟的机制跟体系了。在我用的国产软件中算是不错的水平,可以赞一下。后面如果再有些试用心得再跟大家分享。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342