为系统制作自动化测试用例,无需手动从数据库中删除记录即可保存唯一数据

时间:2013-09-20 16:39:32

标签: testing coded-ui-tests

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

  1. 注册农场[RMH-22]
  2. 在这个农场注册两栋房屋[H-1,H-2]
  3. 点击系统中的搜索按钮,然后搜索[RMH-22]
  4. ,确保它们已保存在数据库中

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

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

    在回放测试用例之前,是否有任何解决方案可以自动执行此类测试用例而无需手动删除数据库记录?

2 个答案:

答案 0 :(得分:2)

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

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

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

有关名称压缩的更新。

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

答案 1 :(得分:0)

我在为我所使用的医疗保健软件产品构建的CodedUITest系统中出现了同样的情况。基本上它会在第一次测试成功完成并且第二次测试启动后抛出异常,其余所有内容都会失败。

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

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