但是我可以看到有由于这些更改,我需要在最后一分钟内修复约10个模块。作为解决方案,我声明了这些GUI元素标识符并将其分配为config文件夹中文件中的全局变量,并将其在模块中重用。
我的问题是:有没有更好的方法来解决这个问题?既然有成千上万的工具,有没有什么工具可以有效地维护和组织这些全局变量?
我的解决方案的伪代码:
全局变量声明位于config文件夹中的单独文件中:
public class globalVariable
{
public final String HOME_PAGETITLE = "Welcome to Home page";
.........
}
调用它的模块:
public class module
{
//Instantiate globalVariable class to use it's variables in module
globalVariable test = new globalVariable();
@Test
public void testHome()
{
//Call the global variable declared
String strExpectedPageTitle=test.HOME_PAGETITLE;
//Verify page title
assertEquals(Selenium.getTitle(),strExpectedPageTitle);
}
}
#1 楼
是。 Page Object模式是一种很好的技术,它是通过将重用的逻辑提取到方法中而正朝着的逻辑结论。使用这种模式,您可以为UI中的每个页面创建一个模型。这些页面模型是程序中唯一不了解UI的部分。然后,如果主页标题更改,则只需更新HomePage对象上的GetTitle方法。测试永远不会直接访问标题对象,而只能通过HomePage对象上的方法。这将您需要为逻辑更改而更新的代码量限制为每次更改仅一个类,并且希望只有少数几种方法。请注意,如果您有一个母版页,则需要一个单独的Page对象。您的Page对象还可以使用存储在文本配置文件中的配置值,该值在运行时读取字符串,因此,您无需仅因为标识符已更改而重新编译代码。当一次测试同一网页的两个版本时,这非常有用,因为两个版本之间的标识符可能已更改。
相同的技术适用于其他UI自动化语言;我现在在WatiN中使用这些技术。
#2 楼
听起来好像您在尝试避免自动化测试中的重复。这是一个好习惯,不仅在自动化方面,而且在一般的编程中都是要遵循的。 。问问自己是否在正确的细节水平上进行测试。您正在检查的这数千个字符串(例如页面标题)是某种要求的结果,还是会随心所欲改变?以我的经验,就是后者。如果是这样,您希望通过检查这些值来完成什么?换句话说,如果自动化测试在字符串检查中失败,您将怎么办?如果您的回答是“我将更新测试以反映UI的变化”,则可能您的测试并非旨在查找错误。如果是这样,您可能会问自己自己的测试是否有帮助。
#3 楼
测试的目的是验证“页面标题”还是要使用页面标题来验证状态?如果要验证页面标题匹配,那么我会说自动化甚至不是最佳解决方案是否有很多要验证的“页面标题”。
如果目的是验证状态(例如同步测试),那么您可以考虑进行部分字符串匹配,而不是尝试匹配整个字符串。 (例如,在C#string.Compare()中),但是,您仍然可能会遇到意外的误报。另外,如果您还需要在本地化版本上运行这些测试,那么这种方法也将成为噩梦。通过资源ID归档文件,并与适当的字符串进行比较。
#4 楼
我的一般建议会有所不同,但是在这种情况下,我可能会将内容移动到包含三列的数据库表中:PageName,PageURL和PageTitle。然后,我将构建一些匹配的代码来查找当前页面的url,然后检查标题。然后,代码变为assertTrue(Verification.PageTitleIsCorrect());
您的代码本质上仍是硬编码,因为您仍然在代码中的很多地方都保留了test.HOME_PAGETITLE,您希望将其最小化。从本质上讲,使您的代码可以算出需要自己验证的内容。
评论
同意在许多地方使用test.HOME_PAGETITLE是一个缺点。感谢您指出。恐怕从数据库中检索页面标题可能会使测试用例变慢,并且由于数据库连接而导致开销。请让我知道您对此的想法。
– Aruna
2011年7月7日在2:18
为此,数据库查找足够快,特别是相对于加载还必须执行一个或多个数据库查询的网页而言。
–user246
2011年7月7日在13:19
如果您使用SQLite,则全部存储在内存中且快速
–布鲁斯·麦克劳德(Bruce McLeod)
2011年7月7日在21:09
是的,但是我发现在Spring XML甚至Java / C#类中维护配置比在DB中维护测试数据更容易。
– dzieciou
16-2-28在21:54
评论
感谢您的建议。我将页面标题验证合并到测试代码中,以检查页面是否正确加载。它还可以确保预期的页面可用并可以进行测试。在最后一分钟,我们没有时间检查他们为什么更改页面标题。可能是出于商业原因。最终用户不希望总是看到相同的页面标题,而是希望看到不同的内容
– Aruna
2011年7月7日在2:16