情况

我需要开始为具有成千上万用户的大型Web应用程序构建自动回归。无法从已知状态开始,甚至无法确保输入到应用程序中的数据将保存到已知状态。该应用程序是一个薪资输入系统,在该系统中,只有当薪资尚未开始时,所有数据才被读取,并且具有大量的配置选择。

该应用程序不能在具有以下条件的本地数据库上运行本地设置:它需要多个互锁的Web服务(使用-不要问我为什么-系统注册表来确定将结果提交到何处),并且不实用进行重置(数据库刷新可能需要一整天的时间)。多个用户可以访问测试沙箱环境,并以完全改变系统预期行为的方式更改配置。在进行大型项目时,开发沙箱环境经常会停顿几天。

我认为可行的策略

我正在考虑的潜在策略考虑的是:



先设置我的初始条件---有点复杂。我将需要进行几个数据库查询或做一些屏幕快照,以确定公司是否已更改其配置,是否需要启动工资核算运行,将配置更改回应有的状态,然后提交false在使用正确的配置开始全新运行之前运行。这也将使测试结束检查复杂化,因为我将需要查找并丢弃初始提交文件,以便使用我的测试实际输入的数据检查该提交文件的有效性。从好的方面来说,在提交之前保存到待处理事务表中的值以及提交文件的内容将符合预期。

动态结果检查-我的意思是根据我测试时激活的配置标志来检查结果所需的编码要复杂得多,无论它们是否是我期望看到的。我在这里看到的优点是,我无需尝试强制将系统设置为开始时的设置,而我将通过倾斜检查来确定仅在启用某些配置标志时才显示某些字段。另一方面,正确地编写代码要复杂得多,结果也更容易出错。

混合方法-我在其中设置某些键值,但让其余键执行任何操作有人将它们设置为。这将给我每种方法的一些弊端,但可以使我将额外的复杂性限制在无论如何都倾向于移动目标的区域。

其他一些注意事项

我(在使用该系统六个月之后)对系统在何处与Web服务交互(这些都是在-房子,但往往不会得到很大的发展。它们通常也可以从Web应用程序中调用或轮询Web应用程序数据库,因此,在此阶段不单独进行测试。在某种程度上,Web服务是系统不可或缺的,无法仅测试Web应用程序。

编写的应用程序是经典的ASP。没有办法将前端和业务逻辑分开。由于它不是可单元测试的,所以未进行单元测试。虽然有计划用更好的工程系统代替它,但我将对该系统进行至少2年的测试,甚至可能更长。

鉴于这些“有趣的”复杂性,我应该采用哪种方法为该应用程序构建自动回归?

术语更新
响应@ user246,要求澄清我使用的一些术语:



提交错误的运行-我的意思是提交工资单,该工资单只包含配置设置更改,而我实际上不在乎发送什么。

提交文件-这有点复杂。所有计算逻辑和检查生成逻辑都发生在我无权访问的后端服务器中。我到后端服务器的唯一接口是固定长度格式的文本文件:提交文件。使用定义的命名约定为每个工资单提交生成此文件。如果在短时间内为给定客户提交了多个工资单,则很难找到包含我感兴趣的信息的工资单。

待定交易表-在开始之间在进行工资核算运行并提交运行之后,所有发生的事情都会记录到许多数据库表之一中。它们被称为挂起的事务表,因为对配置,工资单和人员数据的更改直到在Web应用程序和后端服务器之间进行了所有同步之后才是最终的。在提交工资核算之前,更改不是永久性的,并且取决于所涉及的逻辑,更改只能存在于挂起的事务表中。


评论

凯特(Kate),请确保我理解这个问题,能否详细说明一下“提交错误运行”,“提交文件”和“待处理事务表”的含义。

@ user246-我将使用该信息更新问题

您可以要求一些测试钩吗?您是否可以提出Web服务请求以恢复状态,还是可以请求一个?我绝对希望处于可以预先设置的已知状态,但是我可以想到一种情况,即我读入该状态(然后以数据驱动的测试方法将其传递给该状态),并在我的自动化系统中建立逻辑处理所有各种配置。我构建了较小的辅助函数,并用较大的端到端函数包装了这些函数,然后将其传递给配置,并使其足够聪明,可以根据传入的配置执行正确的操作。

不幸的是,没有...还有很多事情要做,所以给我测试钩子要比优先级列表低得多。

@KatePaulk-您确定不能在您的控制下为您提供隔离的测试系统和数据库吗?即使问得很好?

#1 楼

尽管整个系统不受您的控制(这显然是更好的选择),但系统的某些部分仍可能由您控制。

您说这是一个薪资系统。

您可以创建一个其他所有人都同意独自离开的“测试公司”吗?
您可以创建一个其他所有人都同意独自离开的“测试公司”吗?

在我必须共享系统的情况下,这就是我采用的方法。

每个测试人员(手动或自动)都有自己的系统子集供其专用。在命名对象时,我们会在它们前面加上测试人员的姓名缩写。

我的“公司”将是“ JSS Corporation”。
我的“员工”将具有类似“ JSS Smith”的名称, “ JSS Jones”等。

我的自动化通常是从建立这些公司和员工开始,这些公司和员工具有我需要的属性(一些单身,一些已婚,一些全职,一些兼职等),然后继续执行我需要测试的其他功能步骤。

评论


这是我可以做的事情-公司设置实际上不是我可以访问的事情,但是我可以要求为我创建公司,以便我可以按照测试所需的方式配置员工和其他项目。

–凯特·保罗(Kate Paulk)
13年9月30日在11:35

@KatePaulk-最好是您自己建立测试公司,以便它成为自动回归测试的一部分。但是,如果不能这样做,至少可以由一个“专属”人员来帮助您。

–乔·斯特拉泽(Joe Strazzere)
13年9月30日在11:37

#2 楼

从您的问题出发,这些是与应用程序相关的信息/挑战


非常大的Web应用程序,具有成千上万的用户
仅当工资单尚未开始且具有疯狂的编号时才读取数据的配置选择
需要连接到远程数据库/数据库
多个互锁的Web服务
写的是经典的ASP
无法分离前端和业务逻辑

/>这是一个非常特定于应用程序的特定需求,但是我可以就在类似情况下为我解决的问题分享一些想法。


(环境清理,填充/设置所需的最低配置)。初步清理后,对数据库的先决条件设置对我来说很有效

业务逻辑验证的选项#1


验证案例,这些案例可以单独处理通过在可能的情况下调用存储的proc / web服务
在数据库中预填充所需的数据,以尽可能减少UI交互

用于业务逻辑验证的选项#2


运行您的初始数据库设置
使用Selenium记录并回放所需的操作。该应用程序执行的UI操作将通过硒处理。我没有尝试自动化ASP应用程序。我希望ID可用并且可以应用。

用于业务逻辑验证的选项#3


运行初始数据库设置
创建可以调用/执行UI功能的存根定制方法。您需要复制代码。在我看来,这很难维护

其他选项是,您可以将UI自动化用于


运行Db先决条件/设置
验证元素在UI级别
使用Selenium在UI级别运行端到端流
在UI级别,我们可以自动处理优先级案例(并非所有案例都可以处理)

我建议尝试一个原型,以评估在每个阶段有效的方法/确定挑战/障碍。最好接一个可行的电话

评论


我喜欢您的原型建议,西瓦。我不确定数据库设置是否可以执行-这非常复杂,而且涉及的许多规则在任何地方都没有明确标出。更有趣的是,很多元素无法通过ID调用,因为它们要么没有ID,要么没有唯一ID。

–凯特·保罗(Kate Paulk)
2013年9月25日上午11:38

是的,Prototype能够识别挑战,识别可以自动化的可能用例。尝试-确定障碍-寻找替代方案-继续前进。

–西瓦
2013年9月25日14:32在

我在一个被扔进去的系统上做过类似的事情,非常疯狂,而且我几乎不了解,所以我要做的就是吃点东西。该数据库是最长的数据库,对我的学习最大的好处,它花了一段时间才建好,所以我了解了我需要的最准系统的DB,我将还原它并从那里开始。尽管还有其他所有优先事项,但无论如何,您似乎都将陷入漫长的困境。它们给您的选择很少,例如我如何通过有限的选择来获得想要的结果来处理我2岁的孩子。

– MichaelF
2013年9月27日在20:03

@MichaelF-这是非常正确的。我是他们聘用的第一位测试专家,所以对如何做事情有很多感觉。在数据库方面,由于任何地方都没有数据库字典,因此我一直在“空闲”时间内创建一个字典-这很有帮助。

–凯特·保罗(Kate Paulk)
13年10月2日在11:23

#3 楼

我的首选绝对是使自动化成为控制配置的一种,并根据配置测试应用程序的预期行为。如果您采用“动态检查结果”方法,那么根据配置,您会遗漏有关应用程序行为的大部分测试范围。考虑到这一点,我可以尝试以下几种选择来尝试构建这种情况:


而不是检查配置是否已更改,为什么不启动每个用配置更改关闭测试集以强制其进入要测试的状态?我可以看到许多使用不同设置方法的测试类,这些设置方法会更改配置,然后针对该特定配置进行测试。如果我在安装程序中执行此操作,则尝试创建一种直接发送http流量而不通过UI的设置方法,因为这样做会更可靠,更快捷。
请求设置自动测试沙箱环境在有限的权限下,您可以保证将其保持在干净的已知状态。
当您说“测试沙箱”环境可以被多个用户访问时,他们是谁?您公司的其他人吗?另外,更改配置时,配置系统是整个系统还是在单个系统上设置了许多“客户”,每个客户都有自己的配置?如果有多个客户,您是否可以在测试沙箱环境中创建一个专门用于自动化的客户,并围绕它创建一个基本上等同于-不要碰这个客户-仅用于自动化的流程?

这真的是您要通过技术解决方案解决的非技术问题吗?我可能会改用游说/政治模式来获得我真正需要的东西,而不是试图绕过这些限制。只有当我确定自己已经走到尽头时,我才开始考虑其他技术选择,并且我会大声疾呼它如何影响我自己和我的团队。

希望有所帮助。

评论


政治/技术问题混合存在:上面Joe的建议对于基础设置最可行。开发团队中的每个人都定期访问测试沙箱环境,而公司中的其他人则很少访问。

–凯特·保罗(Kate Paulk)
13年9月30日在11:39

#4 楼

我同意这似乎是组织和技术问题的混合。在不涉及技术部分的情况下,我将建议以下内容:


我将首先考虑所有可能解决问题的方法,并写下来。即使您由于某种原因认为解决方案一开始就无法解决,也请写下来而不进行评估。进行头脑风暴会议对于此步骤将是很好的。
如果您有解决方案的列表,请尝试考虑每种解决方案的优点和缺点(您已经为某些解决方案做了
技术替代方案)并将其记录下来。
考虑并估算每种解决方案所需的资源:
基础架构(硬件),人员,实施解决方案的时间,成本。
使用加权标准评估每个解决方案。因此,
每个解决方案的选择都得到评分。

可能需要一段时间才能找到您满意的列表。当您在办公室时,选择最重要的两三个候选人,并与您的老板或管理层讨论以下问题:
解释/说明每个替代方案,它们的优缺点,所需的资源,并向他们推荐最佳的替代方案在您看来。

也许您可以建议为两种选择做一个小的原型实现,收集经验,然后决定其中一种。

从技术上讲,我认为应该进行测试您所控制的环境(即没有人在使用它)应该成为解决方案的一部分。不必全部使用新硬件,但您可以协商专用于现有测试环境的时间表。当然,您需要在每个时间段的开始时根据需要配置和刷新环境。
例如,尝试每周获取一些工作日,以专用于实施和测试自动化。还可以花一些晚上或周末进行一些测试,测试时间会更长一些。

也许您以前已经考虑过所有这些,或者这对您来说是不言而喻的,但希望您能从中找到一些帮助我的答案。

评论


@Joe Strazzere对于这个答案,我感到惊讶。我可以得出结论,您很有可能做到了。如果是,您为什么这样做?

– prockel
13-10-4在8:22