0

我想使用 Coded UI Test 为系统制作 UI 自动化测试用例。并且测试用例具有较长的生命周期,例如:

  1. 注册农场 [ RMH-22 ]
  2. 在这个农场注册两间房子 [ H-1 , H-2 ]
  3. 单击系统中的搜索按钮并搜索[RMH-22],确保它们已保存在数据库中

当我播放此测试用例时,它无法正常工作,因为系统在录制期间已将此农场 [RMH-22] 保存在数据库中。

考虑到系统为农场保存了唯一的代码。

在回放测试用例之前,是否有任何解决方案可以在不手动删除数据库记录的情况下自动化此类测试用例?

4

2 回答 2

2

据我了解,问题在于测试是使用农场和房屋的固定名称记录的,因此这些名称被输入到数据库中。当再次运行测试时,这些相同的名称被使用,但它们已经在数据库中。

一种方法是确保在每次测试运行中使用不同的名称。我建议创建一个包含测试运行日期和时间的农场名称和房屋名称。因此,请创建诸如FarmYYYYMMDDHHMMSSH1YYYYMMDDHHMMSS之类的名称H2YYYYMMDDHHMMSS。如果需要,可以很容易地压缩日期和时间以缩短名称。在代码中生成名称,然后将值写入...Params类的字段,就像在数据驱动的编码 UI 测试中所做的那样。

作为替代方案,有些人建议附加序列号(或字母),但这意味着要跟踪已使用的编号。因此,我会避免这种方法。

关于名称压缩的更新。

如果项目和测试需求是短暂的,那么一年中的部分或全部时间可能会被省略。如果您可以保证在 2020 年之后不需要进行测试,那么只需保留十年中的年份(目前为“3”)。您可以使用 1 到 366 范围内的三位数字,而不是YYMM使用一年中的某一天。您可以将日期编码为自某个开始日期以来的天数;该数字不需要完全正确,只需易于计算并给出合适的非重叠值即可。例如(year - 2013) * 366 + day_of_yearHHMMSS您可以使用 0 到 60*60*24 范围内的秒数,即 0 到 86400。而不是使用十进制数字作为名称,您可以使用基数 36(参见http://en.wikipedia .org/wiki/Base_36) 编码。总而言之,这些应该比名称的日期时间部分所需的字符数减半更好。

于 2013-09-20T18:54:48.013 回答
0

我在为我工作的医疗保健软件产品构建的 CodedUITest 系统中也发生了同样的情况。基本上它会在第一个测试成功完成并且第二个测试启动后抛出异常,并且所有其余的最终也会失败。

当它最终成为内存时,一直在谈论线程问题。它最终会在测试结束时构建一个大型而复杂的数据库,我希望我可以再次使用它,但由于这些测试的工作方式,你将不得不擦除整个数据库,不仅如此,还要强制进行垃圾收集整个地图及其内容通过将所有值设置为 null 来标记收集,然后强制收集发生。

这很糟糕,我知道相信我,但在这种情况下,最好只是擦除整个事情并重建你在每次测试中收集的所有数据。

于 2013-09-20T17:10:08.937 回答