TestNG
),以便仅在第一个测试成功时才执行第二个测试。也就是说,第二种方法不是依赖于第一个测试,而是需要在执行之前将系统置于正确的状态。为此,第二个测试可能会调用一些通用方法,这些方法将执行与第一个相同的操作。我看到的这种方法的问题是执行重复。执行第一个测试。然后执行“独立”第二项测试(或者可以在第一项测试之前执行,因为没有执行顺序),该测试实质上会执行与第一项测试相同的操作,以使系统返回到秒可以执行。因此,这将花费更多的时间。
您是否编写独立的测试?如果是这样,您如何应付执行时间?
#1 楼
我将自动化分为两种不同的类。我有1个班级,用于测试实际需求。这些测试独立于其他任何测试,并分解为故事。对于需要行业合规的项目(SOX,PCI等),这些也可以作为我的测试证据。我不能说我太担心它们的执行时间。第二个类在我的回归套件中。尽管它们中的任何一个都不需要在它们之前运行单独的测试用例,但是其中一些已经足够深入到Web应用程序中,因此如果没有与先前测试相同的步骤,它们将无法运行(例如,我无法如果登录功能不起作用,则登录页面后面的任何内容)。这些中也会有一些重复,但是这是最小的。尽管我不再在其中使用相同的“测试”,但是在将其达到所需状态时确实使用了一些相同的功能。但是,如果编码以减少重复(即使系统进入正确状态的快乐路径),可以将其减少到最小。
#2 楼
您也可以使用从属测试。使它们保持独立的主要原因是防止一个故障隐藏第二个故障。如果第二项测试在执行其实际测试方案之前确实在运行第一项测试,那么无论如何您都不会获得这种好处。#3 楼
使用开源工具和虚拟化功能,自动测试的横向扩展现在便宜很多,因此我用它来解决“花费更多的执行时间”问题。两次运行相同的测试,如何才能更有效。我可能会做的就是尝试提出一个场景,其中您的测试的A部分现在使用相同的功能,但是使用例如不同的测试数据来测试该空间中的不同事物或代码路径。 >现在我有更多的时间,并且我可以应用不同的数据,我可以更有效地利用自动化来覆盖越来越多的测试扫描方法。然后重复该循环并继续进行更多工作,还有更多测试,因为总有另一种场景可以考虑并添加。
评论
布鲁斯(Bruce)谈到使用虚拟化来扩大自动化程度,您如何准确地实现它?不要在这个线程中没有这个问题,如果是这样,请打开一个新线程并对此进行详细说明。
– Rakesh Prabhakaran
2011年5月10日下午2:42
我使用了三种不同的模型,最好的模型有一个中央服务器和Web服务,客户端调用这些服务以请求下一个测试运行,然后将结果推回服务器。第二个方法是使用TFS测试代理之类的东西,然后以这种方式将工作推给客户端。第三种技术含量较低的解决方案是建立每台机器的测试列表,然后手动启动每台机器,然后收集并合并结果。客户主要是WatiN,安装或许可费用为零。
–布鲁斯·麦克劳德(Bruce McLeod)
2011年5月10日在2:58
#4 楼
实际测试期间的失败并不是相关测试用例的唯一问题。例如,您在检查阶段可能会失败,从而可能导致您的相关测试用例出现问题。您可能还会遇到零星的问题,该问题只影响第一个测试用例的二十个用例中的一个。如果您的案例是独立的,则即使第一个测试案例失败,您仍有95%的机会仍然可以成功收集第二个结果。我还希望独立测试可以更轻松地连续重复多次-例如测试人员在尝试重现偶发性错误时会这样做-尽管这可能取决于您的测试框架。在需要大量执行时间的情况下,这些参数可能不够充分,但它们是需要考虑的其他因素。有时,良好的产品设计和可测试性功能可以帮助缩短执行时间,尤其是在验证基本页面元素(例如Button X调用函数Y)时,到达那里的过程和过程中的状态是比最后一步重要。例如,在Web应用程序中,仅通过地址栏而不是通过UI导航到页面会很有帮助,良好的设计可以在更多情况下实现。但是,您仍然需要进行一些端到端测试。
我当时看到的基本方法是优先级划分和并行化。优先级只是运行最有可能频繁发现最多数量的高优先级bug的测试用例,而仅偶尔运行其余的测试。应该优先考虑的情况是那些最有可能受当前代码更改影响的情况,以及那些覆盖其执行时间最多的情况。并行化意味着让多台机器同时运行测试用例,并且通过虚拟机(不适用于所有程序,但对于使用GUI的许多应用程序来说是一个不错的选择)和云服务(如Amazon Web Services)变得越来越可能。通常,比起让测试人员投入大量精力进行超高效的测试(尤其是可以将这些工作投入发现新的错误!),通常要花更多的钱来工作。
#5 楼
正如塔伦(Tarun)所说,即使我也遵循TestNG为硒测试提供的依赖方法。但是我从来没有遇到过像布鲁斯所指出的那样,任何一个失败都会掩盖另一个失败的情况。
我认为这可能永远不会发生,因为我所依赖的每个案例都将始终需要先前的测试案例。成功运行以启动第二个测试,否则测试用例或测试步骤之间几乎没有任何依赖。
例如,我们有两个测试,例如,测试T1是登录测试,而T2是登录测试。登录后需要做的事情。让T2依赖于T1。
在这里,当我将测试配置为通过TestNG配置文件运行时,我将测试T1和T2分别称为两个测试。
我需要1.登录测试和
2.登录后进行了一些tat测试
,所以我发现我的依赖测试非常友好并且测试速度非常快。
评论
考虑您的登录测试断言,登录用户看到
–塔伦
16年5月30日在9:51
#6 楼
是的,我也编写彼此独立的测试,因为这是测试的基本原则。由于我使用硒进行测试,因此通常会重新分解代码,从而至少减少代码重复。例如,我有2个测试可验证a)登录请求b)更新请求。现在,由于b依赖于a,所以我通常在函数中编写代码,并同时从a和b调用它。当然会花费一些时间,但是有一些方法可以并行执行测试,在硒中,我可以通过Selenium Grid进行。当您只想测试一项功能时,这将很有帮助。希望这会有所帮助!!!!
评论
“测试的基本原理”这一说法使我感到恐惧:-|以及如果您没有网格之类的东西怎么处理
–塔伦
2011年5月4日下午5:58
Selenium网格只是并行运行测试的一个辅助工具。没有它,我们可能仍然需要串行运行测试。
– Ashish
2011年5月5日16:08
#7 楼
我编写独立的测试,以便可以选择独立运行它们。如果一个测试依赖于另一个测试,则可能是因为前一个测试设置了从属测试所需的某些内容。某些测试框架(例如JUnit)可以让指定的设置登录名针对一组测试只运行一次,无论该测试集中有多少个测试。您可能可以重构测试以利用该功能。审问。例如,如果您的设置涉及以某种方式填充数据库,则可能要添加“设置完成”表,该表仅在设置成功后才包含一行。
评论
因此,存在一种针对场景的测试方法,然后针对同一场景存在另一种测试方法,具有所谓的“幸福之路”以达到另一测试的期望状态。这对我来说似乎是重复的。我读错了吗?
–塔伦
2011年5月4日在6:07
为了使系统达到所需的状态,幸福的路径是最短的一系列动作。当然有一些重复,但是正如我所说的那样,请尽量减少重复。在可能的情况下,将各个操作分解为不在任何测试本身中的方法,而是从测试方法中调用这些方法,以允许更多的重用性并提高可维护性。当“测试A”调用这些方法时,可以在该测试中使用更多方法进行其他日志记录或检查。希望有道理。
– Lyndon Vrooman
2011年5月4日6:34
确实有..
–塔伦
2011年5月4日下午6:38