测试Delphi应用程序的最佳方法

时间:2009-02-12 09:33:34

标签: oracle delphi testing testcomplete

我有一个Delphi应用程序,它有许多依赖项,并且很难重构它以使用DUnit(它很大),所以我在考虑使用像AutomatedQA的TestComplete这样的东西从前端UI进行测试。

我的主要问题是错误修正或新功能有时会破坏之前测试过的旧代码(手动),并且用于工作。

我已经设置了应用程序以使用命令行开关来打开可以测试的特定表单,并且我可以创建一组需要完成的值和点击。

但在我做任何激烈的事情之前(以及在购买之前)我有几个问题

  1. 值得吗?
  2. 这是一个很好的测试方法吗?
  3. 测试结果应该在我的数据库(Oracle)中,是否有一种简单的方法可以在testcomplete中检查这些值(多个表中的多个字段)?
  4. 我需要设置一个测试数据库来进行所有自动化测试,是否有一种简单的方法可以自动重新设置测试数据库?除了删除用户级联,创建用户,...,impdp。
  5. testcomplete中是否有方法为exe指定命令行参数?
  6. 是否有任何类似的经历。

7 个答案:

答案 0 :(得分:14)

我建议您计划同时使用DUnit和TestComplete之类的东西,因为它们各自用于不同的目的。

DUnit非常适合单元测试,但很难用于整体应用测试和UI测试。

TestComplete是为数不多的实际支持Delphi的自动化测试产品之一,我们的QA工程师告诉我他们的支持非常好。

请注意,设置自动化测试是一项庞大而耗时的工作。如果您严格应用单元测试和自动UI测试,您可以轻松获得比生产代码更多的测试代码。

对于大型(现有)应用程序,您在实施自动化测试方面处于困境。

我的建议是首先与自动构建服务器一起设置单元测试。每当有人检查任何来源控制时,单元测试都会自动运行。不要试图直接设置所有内容的单元测试 - 这对现有应用来说太大了。只要记住在添加新功能时以及何时即将进行更改时都要创建单元测试。我还强烈建议,每当报告错误时,您创建一个单元测试,在修复之前再现该错误。

答案 1 :(得分:10)

我处于类似情况。 (具有大量依赖关系的大型应用程序)。几乎没有自动化测试。但是有一个很大的愿望来解决这个问题。这就是为什么我们要解决每个新版本的一些问题。

我们即将发布新产品的第一个版本。而且最初的迹象是好的。但这是很多工作。因此,下一个版本我们确实需要一些方法来自动化测试过程。这就是我已经引入单元测试的原因。虽然由于依赖性,这些都不是真正的单元测试,但你必须从某个地方开始。

我们所做的事情:

  • 引入了更多面向对象的方法,因为代码的很大一部分仍然是程序性的。
  • 在文件之间移动内容。
  • 尽可能消除依赖关系。

但是在要求清单上还有更多要求,确保整个团队有足够的工作直到退休。

也许我有点奇怪,但清理代码会很有趣。没有单元测试的重构是一项危险的任务,特别是如果有很多副作用。我们使用结对编程来避免愚蠢的错误。还有很多测试会议。但最终我们的代码更清晰,引入的新bug数量极低。

哦,确定你知道这是一个昂贵的过程。这需要很多时间。而且你必须对抗连续解决不止一个问题的倾向。

答案 2 :(得分:3)

我无法回答所有问题,因为我从未使用过testcomplete,但我可以回答其中的一些问题。

1 - 是的。回归测试是值得的。作为一名开发人员,当你破坏曾经工作过的东西时,客户回到你身边时,你会感到非常尴尬。总是一个好主意,以确保过去工作的一切,仍然。

4 - Oracle有一个名为Flashback的东西,它允许您在数据库中创建一个还原点。完成测试后,您可以跳回到此还原点。您也可以编写脚本来使用它,FLASHBACK DATABASE TO TIMESTAMP (FEB-12-2009, 00:00:00);

答案 3 :(得分:3)

我们正在考虑使用VMWare来隔离我们的一些测试。

您可以从保存的快照开始,因此您始终拥有一致的环境和本地数据库状态。

VMWare操作可以编写脚本,因此您可以从网络位置自动安装最新版本,启动测试并在之后关闭。

答案 4 :(得分:3)

  
      
  1. 值得吗?
  2.   

可能。设置和维护测试可能是一项艰巨的任务,但是当您拥有测试时,可以非常轻松且一致地执行测试。如果您的项目在不断发展,那么某种测试套件非常有用。

  
      
  1. 这是一个很好的测试方法吗?
  2.   

我想说正确的DUnit测试套件是更好的第一步。但是,如果你有大量的代码库没有设计用于测试,那么设置功能测试比设置GUI测试更加痛苦。

  
      
  1. 测试结果应该在我的数据库(Oracle)中,有一个简单的方法   testcomplete中的方法来检查这些值(多个表中的多个字段)?
  2.   

TestComplete具有ADO和BDE接口。或者,您可以在VBScript中使用OLE接口来访问所有可用的内容。

  
      
  1. testcomplete中是否有方法为其指定命令行参数   一个exe?
  2.   

答案 5 :(得分:0)

在(旧)应用程序中引入单元测试的一种方法可能是拥有“开始数据库”(如Rich Adams所描述的“闪回”功能)。 程序som unittest使用DUnit来控制GUI。 在http://delphixtreme.com/wordpress/?p=181

上进行“使用DUnit进行GUI测试”

每次通过恢复到“启动数据库”开始测试时,因为可以使用一组已知的数据。

答案 6 :(得分:0)

  

我需要设置一个测试数据库来完成所有自动化操作   测试,会有一个简单的方法   自动重新设置测试数据库?

使用事务:在测试完成时执行回滚。这应该将所有内容恢复到初始状态。

推荐阅读:

http://xunitpatterns.com/