12

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

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

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

但是在我做任何激烈的事情之前我有几个问题......(在购买任何东西之前)

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

7 回答 7

14

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

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

TestComplete 是少数几个真正支持 Delphi 的自动化测试产品之一,我们的 QA 工程师告诉我他们的支持非常好。

请注意,尽管设置自动化测试是一项庞大且耗时的工作。如果你严格应用单元测试和自动化 UI 测试,你很容易得到比生产代码更多的测试代码。

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

我的建议是首先设置单元测试,并结合自动构建服务器。每次有人将任何东西签入源代码控制时,单元测试都会自动运行。不要尝试直接为所有内容设置单元测试——这对于现有应用程序来说太费力了。只要记住在添加新功能以及即将进行更改时创建单元测试。我还强烈建议,每当报告错误时,您在修复它之前创建一个重现错误的单元测试。

于 2009-02-12T10:04:16.857 回答
10

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

我们即将发布新产品的第一个版本。最初的迹象是好的。但工作量很大。所以下一个版本我们肯定需要一些方法来自动化测试过程。这就是为什么我已经介绍了单元测试。虽然由于依赖关系,这些都不是真正的单元测试,但你必须从某个地方开始。

我们做过的事情:

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

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

也许我有点奇怪,但清理代码会很有趣。在没有单元测试的情况下进行重构是一项危险的工作,尤其是在有很多副作用的情况下。我们使用结对编程来避免愚蠢的错误。以及大量的测试环节。但最终我们的代码更干净,引入的新错误数量极少。

哦,请确保您知道这是一个昂贵的过程。这需要很多时间。你必须与连续解决多个问题的趋势作斗争。

于 2009-02-12T09:58:15.017 回答
3

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

1 - 是的。回归测试是值得的。当您破坏了曾经可以工作的东西时,当客户回来找您时,作为开发人员,您会感到非常尴尬。确保所有曾经工作的东西仍然有效,这始终是一个好主意。

4 - Oracle 有一个叫做闪回的东西,它可以让你在数据库中创建一个还原点。完成测试后,您可以直接跳回到这个还原点。您也可以编写脚本来使用它FLASHBACK DATABASE TO TIMESTAMP (FEB-12-2009, 00:00:00);,等等

于 2009-02-12T09:44:23.537 回答
3

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

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

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

于 2009-02-12T13:27:13.547 回答
3
  1. 这值得么?

大概。设置和维护测试可能是一项艰巨的工作,但是当您拥有它们时,可以非常轻松且一致地执行测试。如果您的项目正在发展,那么某种测试套件会非常有帮助。

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

我会说正确的 DUnit 测试套件是更好的第一步。然而,如果你有一个不是为测试而设计的大型代码库,那么设置功能测试比设置 GUI 测试更痛苦。

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

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

  1. testcomplete 有没有办法为 exe 指定命令行参数?

是的。

于 2009-02-13T08:01:03.010 回答
0

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

每次测试都是通过恢复到“启动数据库”来启动的,因为这样的话,一组已知的数据,就可以使用了。

于 2009-02-12T10:24:52.160 回答
0

我需要设置一个测试数据库来进行所有自动化测试,是否有一种简单的方法可以自动重新设置测试数据库?

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

推荐阅读:

http://xunitpatterns.com/

于 2009-03-21T18:15:12.957 回答