在GeneXus开发过程中如何进行自动化测试?
1. 简介
GXtest是基于专门为GeneXus平台开发的应用程序提供的自动化测试解决方案。
我们强调“解决方案”和“自动化”两个词:
- 解决方案:
GXtest为整个GeneXus软件开发生命周期提供测试支持,在每个阶段提供不同的测试工具,包括单元测试(Unit Test)、UI测试自动化(UI Test Automation)、负载测试(UI Test/Load Testing);
GXtest解决方案提供持续集成/持续交付(CI/CD)的支持,借助JenKins等CI/CD引擎和MsBuild构建引擎,利用和实践了DevOps文化;
GXtest不仅仅运行在GeneXus IDE中,还可以利用Docker、Hyper-V以及其他容器技术进行部署,这意味着GXtest可以在on-premises/ PaaS解决方案甚至Azure/AWS和阿里等云平台中轻松运行。 - 自动化:
现代软件工程、敏捷开发和DevOps实践都基于管道(PipeLine)方法,GeneXus DevOps文化理念认为:及早交付高质量的软件,才能体现软件产品的价值。测试自动化过程是系统交付有价值软件的一个重要关键,测试自动化层能为管道增加多少价值,这取决于自动化的成本、测试的频率和速度、测试位置(在哪个环境中)、评估方法和有效性。
每个GeneXus IDE对应的GXtest版本要求是不一样的,可以通过GeneXus IDE的菜单“知识库管理”à“管理引用模块”去更新。
目前IDE对应GXtest版本信息,可以在下列网址去查看。
https://wiki.genexus.com/commwiki/servlet/wiki?43829,GXtest+versioning,
2.Unit Test
GXtest版本的Unit Test适应性:
- GeneXus15版本,支持面向Java/.Net环境的知识库
- GeneXus16版本,支持面向Java/.Net/.Net Core环境的知识库——.Net Core是微软开发的适用于 windows、linux 和 macos 操作系统的免费、开源托管的计算机软件框架。
Unit Test是在GeneXus中以独立、快速和可重复的方式测试业务逻辑的最有效方法。Unit Test的测试对象,是在GeneXus中封装业务逻辑代码的过程——这些过程可以在不同的场景重用,包括proceduces、dataProviders、Business Transactions。
以下业务场景会用到Unit Test:
- 输入一些参数,看看程序运行结果与预期的是否一样,这些结果可以是返回值、文件、数据库记录;
- 没有输入参数,或者输入参数在数据库里和配置文件中,看看运行结果如何;
- 以上兼而有之。
Unit Test的测试目的,主要是验证程序是否按照产品规范来工作。
当然,前面提到了,Unit Test的测试对象不仅仅是Procedure,对于DataProviders 和 Business Transactions同样可以进行测试。
Unit Test主要是提供给开发人员使用的(自动化测试另外讨论):
1) 开发人员可以在集成测试和正式发布前,自己先检查BUG;
2) 测试非常快,测试结果立刻就能反馈给开发人员
3) 开发人员可以通过GeneXus Server将自己编写的测试程序分享给其他人
4) 不再需要其他的测试工具了,直接在IDE里面就可以测试
5) GeneXus提供完整的测试框架,开发人员不需要再自己定义业务场景设计测试界面了
3.UI Test
UI Test是通过Web页面上执行相关操作,模拟真实用户与软件系统之间的交互过程,验证UI和数据库上的输出结果,以确认业务流程的完整性和可靠性。
在GXtest版本中,Web应用程序的测试通过WebDriver协议完全符合W3C标准,这意味着UI Test在流行的浏览器的新版本上都可以进行测试,——这些浏览器的内核一般基于Chrome, Firefox, Edge, and IE。
GeneXus开发人员关注的是业务在Web界面上如何表现,并不完全理解和控制HTML元素,——这是因为GeneXus提供了一个业务抽象层屏蔽了底层的技术应用。同样的,UI Test关注的重点也是Web页面上如何体现用户的操作以及信息交互。
UI Test工具的使用人员不需要了解开发技术,他/她在web上的操作,GXtest可以通过一个小插件转换为测试脚本,这些测试脚本用来简化UI Test的自动化工作和重复测试工作。这个插件是GXtest Recorder,利用用GXtest Chrome扩展记录器提供了记录功能。在你的Chrome上安装了这个扩展,你就可以浏览你想要测试的web应用程序,同时获取测试步骤和验证形成测试脚本。
4.自动化测试(ROI-based)
及早交付高质量的软件,才能体现软件产品的价值。测试自动化过程是系统交付有价值软件的一个重要关键。
重复劳动应由计算机完成。在测试工作中,频繁编译和重复测试都是不可避免的工作,这些工作如果交由计算机完成,会大大减少项目团队的工作量,降低人为错误的概率,提升反馈和沟通效率。
就测试工作而言,GXtest中的Unit Test往往由开发人员进行,他们一般只是在代码完成后仅测试一次就结束了;UI Test可以测试整个流程,但是测试过程冗长,测试人员没有耐心去等待结果更加没有兴趣去反复测试。
接下来我们仔细分析。
GXtest的测试自动化层中, Unit Test和UI Test的应用场景和使用价值是不一样的。单元测试和是最快和成本最低的,而Ul(端到端)测试非常慢,而且成本更高。
当然,每个应用GeneXus的团队,由于技术/业务水平不同,每个系统的业务复杂度不同,对于Unit Test或者UI Test的的选择和投入是不一样的。
为什么Unit Test是最快和成本最低的?Unit Test是GeneXus应用程序中最重要的测试层:
- 可靠和快速:Unit Test以毫秒级的速度运行,每次测试的最终时长取决于程序中业务逻辑对象的个数(或者说是与SQL/DB速度有关系)。
- 随手测:在GeneXus IDE中创建和调试测试非常容易,测试结果在独立的窗口中显示。
- 及时反馈:程序发生变化并且编译后,GeneXus立即在开发环境中进行测试,如果测试结果不正确会立即反馈给开发人员。
GeneXus的开发人员往往在写完一段程序后立即运行/调试自己的程序。在过去,开发人员一般利用自己编写的Web和UI界面来测试输入/输出,要准备大量的不重复的输入数据来仿真一些业务场景。当然,即使没有GXtest,利用GeneXus的新特性,开发人员也可以将这些测试界面、测试数据作为KB的重要组件进行保存。
但是这样做仍然有缺点,那就是这种测试是孤立进行的,即使某些功能在开发人员完成开发后进行了测试,仍然不能保证系统在集成其他组件后能作为一个整体不产生BUG。GeneXus应用通常使用SOAP或者Rest API提供公开的服务接口,——这就要求必须同时进行并且重复进行所有的Unit Test,这就是为什么我们建议尽可能实现自动化测试的目的。
自动化框架的优势,在于:
- 跑得更快
- 测试核心功能(不需要UI)
- 很容易集成到CI/CD管道中
如果核心业务逻辑封装在GeneXus的Procedures和dataProviders里面时,Unit Test具有最佳的ROI(投资回报比);而业务逻辑不是在Procedures而是封装在面板上(例如WebPanels或SDPanels,对GeneXus而言这是一个非常糟糕的编程实践),那么需要使用其他方法来测试了。
因此,UI Test是自动化测试的最后一层了。UI Test对测试用的基础设施(硬件/网络/存储等等)、数据、使用框架和浏览器的版本要求都很高,但它是模拟真实用户与软件系统进行交互的唯一方法。
我们建议为了提高UI Test的效率,可以从两个方面着手:
- 对于应用APP:可以利用GXtest Recorder记录应用系统的使用过程,生成关键业务流程的测试脚本;
- 对于知识库KB:基于WebPanel的定义自动生成UITest的框架。
5.测试工具比较
在单元测试领域,GXtest是唯一支持GeneXus编程对象函数的单元测试的工具。GXtest的Unit Test工具直接在GeneXus IDE中利用GeneXus语法来编写测试数据(输入和输出)、验证程序和测试程序的代码。
在界面测试领域,除了GXtest的UI Test工具,目前没有其他的界面自动化测试框架能够在GeneXus开发的应用程序上这么“轻而易举”地进行测试。要知道GXtest以外的界面测试工具要在浏览器上模仿真实用户与软件系统之间的交互操作,往往需要“很重”的编程来实现,——复杂的显式的“wait”事件编程或者复杂的JavaScript函数。
在现代软件开发行业中,单元测试在测试工作中最重要的部分,而界面自动化测试检查端到端业务流程的关键部分。在DevOps方法论中,持续测试是“及早交付高质量软件,体现软件产品的价值”重要保障,而GXtest恰好是能够集成到管道并实现持续测试的基本工具。
我们对GXtest和主流的几款测试工具软件做了个简单对比,包括几个方面:IDE集成、单元测试、服务/API测试、界面自动化测试、SCM集成、CI/CD集成、性能测试、报告等等。对比结果如下:
注释:
Partial: 意味着此工具在此方面尚有欠缺,或者正在努力朝预期目标前进
Intergration:意味着此工具可以与第三方工具无缝集成,从而实现目标
在GeneXus开发过程中如何进行自动化测试?的更多相关文章
- 一些关于angularJS的自己学习和开发过程中遇到的问题及解决办法
这篇文章也许会不定时更新,主要记录这段时间内自己遇到的angularjs学习开发的一些问题的解决办法.本文以摘抄为主,主要目的还是将自己遇到的困惑在各个地方查到的解决办法的汇总,给自己留个备忘吧. 1 ...
- SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率
应网友的要求,抽了点时间写了这个Demo,希望对2.2版想升级到3.0的朋友或正在使用3.0的朋友有所帮助.大家在使用Demo过程中如果发现什么问题或有什么建议,可以直接将Bug提交给我或告诉我,我会 ...
- web开发过程中经常用到的一些公共方法及操作
进化成为程序猿也有段岁月了,所谓的经验,广度还是依旧,只不过是对于某种功能有了多种实现方式的想法.每天依旧不厌其烦的敲打着代码,每一行代码的回车似乎都有一种似曾相识的感觉.于是乎:粘贴复制,再粘贴再复 ...
- Eclipse开发过程中个VM Arguments的设置
Eclipse开发过程中个VM Arguments的设置 1:jre中的Default VM Arguments: -Xms256M -Xmx640M -XX:PermSize=256m -XX:Ma ...
- 客户关系管理系统(CRM)的开发过程中使用到的开发工具总结
开发<客户关系管理系统(CRM)>软件过程,也就是一个标准的Winform程序的开发过程,我们可以通过这个典型的软件开发过程来了解目前的开发思路.开发理念,以及一些必要的高效率手段.本篇随 ...
- 软件开发过程中的审查 (Review)
http://blog.csdn.net/horkychen/article/details/5035769 软件开发过程中的审查 (Review) 希望别人做些什么->定义出流程 希望别人 ...
- javaweb开发过程中的地址写法
凡是要表示web资源的地址,比如浏览器地址栏中,都是 /凡是要表示硬盘地址, 都是 \ public class ServletDemo1 extends HttpServlet { //实际开发过 ...
- SpringMVC开发过程中的中文乱码问题
相信大家在开发初期遇到中文乱码问题一定是一头雾水,不是数据库乱码了就是页面乱码了或者传值时乱码.其实解决乱码的途径很简单,就是统一编码与解码的类型,我把自己遇到的乱码问题整理出来,希望能够对大家有用. ...
- net开发过程中Bin目录net开发过程中Bin目录下面几种文件
.net开发过程中Bin目录下面几种文件格式的解释 在.NET开发中,我们经常会在bin目录下面看到这些类型的文件: .pdb..xsd..vshost.exe..exe..exe.config..v ...
随机推荐
- ajax上传文件 基于jquery form表单上传文件
<script src="/static/js/jquery.js"></script><script> $("#reg-btn&qu ...
- H3C 帧中继与水平分割(续)
- ThinkPHP3.2版本安全更新
近日我们收到了一个关于3.2版本的漏洞提醒,官方已经第一时间进行处理和更新.由于3.2版本已经过了官方的维护和安全更新周期,而且大量的开发者也进行了二次开发,因此不再发布新版,官方仅进行安全公告和修复 ...
- uni-app学习记录02-属性绑定.for循环
<template> <view class="content"> <text> 我是首页 </text> <!-- 输出纯字 ...
- Django入门3--Models
- 2018百度之星初赛B - A,D,F
总结:这一次的百度之星之行到这里也就结束了,充分的认识到了自己的不足啊...果然还是做的题太少,,见识的题型也还太少,对于STL的掌握还是不够到位啊!!(STL大法是真的好,建议大家认认真真的好好学学 ...
- UE4 中的 C++ 与 蓝图交互
1.Unreal 引擎提供了两种创建新 Gameplay 元素的方法:C++ 和 蓝图视觉脚本. 通过 C++,程序员构建基础游戏系统:设计师可以基于此系统为场景 / 游戏创建自定义的游戏玩法. 这种 ...
- sqlserver 2005 备份还原失败
1.直接右键还原数据库可能会失败.如果失败 使用下面的sql语句还原 USE MASTER RESTORE DATABASE bingo FROM DISK = 'F:\DevProject\bing ...
- struts2中的数据类型自动转换
参考:https://blog.csdn.net/qq_35326718/article/details/72453042 https://www.cnblogs.com/aigeileshei/p/ ...
- WebGPU学习(十):介绍“GPU实现粒子效果”
大家好,本文介绍了"GPU实现粒子效果"的基本思想,并推荐了相应的学习资料. 本文学习webgpu-samplers->computeBoids示例,它展示了如何用compu ...