Unit testing 组织自动化测试的最佳实践?

Unit testing 组织自动化测试的最佳实践?,unit-testing,testing,automated-tests,Unit Testing,Testing,Automated Tests,我正在为一个应用程序编写一个自动化测试,目前有大约150个测试用例。一切运行正常,但随着测试的不断增长,我不断遇到如何组织测试用例的问题 某些测试将依赖于以前的测试(例如,在打开应用程序之前无法登录,在登录之前无法执行操作)。在运行时,我目前有一个UI,允许用户选择要运行的测试用例,一旦我有了这个列表,就很难对它们进行排序 我觉得为测试用例设置一个预定义的顺序是不值得的,因为不是每次都会运行所有的测试用例,每次添加新测试时我都必须更新这个列表 在自动化测试或一般测试方面有经验的人有什么建议吗 注

我正在为一个应用程序编写一个自动化测试,目前有大约150个测试用例。一切运行正常,但随着测试的不断增长,我不断遇到如何组织测试用例的问题

某些测试将依赖于以前的测试(例如,在打开应用程序之前无法登录,在登录之前无法执行操作)。在运行时,我目前有一个UI,允许用户选择要运行的测试用例,一旦我有了这个列表,就很难对它们进行排序

我觉得为测试用例设置一个预定义的顺序是不值得的,因为不是每次都会运行所有的测试用例,每次添加新测试时我都必须更新这个列表

在自动化测试或一般测试方面有经验的人有什么建议吗

注释:我试图在每个测试中添加一个整数标志,然后以这种方式排序,但是这导致了很多问题,并且每当我在中间添加了一个新的测试时,一些测试必须被移位(这对于150个测试用例来说是一个痛苦)。 编辑


我只想澄清另一个可能相互依赖的测试示例,而不仅仅是登录或打开应用程序。对于此软件,用户可以在应用程序中上载数据。然后他们可以去下载这些数据的报告。显然,如果用户只选择“下载”测试,我无能为力。但是,如果用户选择“上载”和“下载”,我需要一种方法来确保首先执行上载。

测试不应依赖以前的测试来运行。如果只想运行“登录”测试而不运行“打开应用程序”测试,该怎么办。每个测试都应该有自己的设置,该设置将设置测试运行所需的所有内容。如果要测试上载,请测试应用程序是否成功将文件上载到服务器。如果要测试下载,请首先在测试设置中将文件上载到服务器,然后测试是否可以下载服务器中上载的文件


测试不应该关心/依赖之前发生的事情,否则您的测试可能会失败,不是因为您的代码不工作,而是因为您的测试不工作。然后,您将浪费时间试图找出代码失败的原因,而实际上是测试失败了。查看testsetup和testclear,每个测试都会设置它需要运行的任何内容,然后一旦完成,它会在自己之后清除,因此每个测试都会清除其他测试。

测试不应该依赖以前的测试来运行。如果只想运行“登录”测试而不运行“打开应用程序”测试,该怎么办。每个测试都应该有自己的设置,它将设置测试运行所需的所有内容。这是一个非常好的观点,我应该(也将)防止诸如登录和打开应用程序之类的事情,但我编辑了这个问题以澄清一个不同的示例,其中测试可能相互依赖。再次,在编辑之后,测试应该是独立的。如果要测试上载,请测试应用程序是否成功将文件上载到服务器。如果您想测试下载,请首先在测试设置中将文件上载到服务器,然后测试服务器中上载的文件是否可以下载。我理解。我想我太努力了,没有找到一个优化它的方法。您是否建议进行测试(不是实际测试,而是使用几行代码)以确定数据是否已上载?或者,无论测试前后发生了什么,每个测试都应该严格独立。这将是一次巨大的大修,但这是针对公司软件的,我只做了一小部分测试用例,我想保护自己,以便在将来获得最佳的扩展方法。此外,@artm,我非常感谢您的帮助。当我被卡住的时候,它确实把我推向了正确的方向。如果你想整理这些建议并给出问题的答案,我很乐意接受并支持你的答案。我肯定会对整个问题进行重构。现在很痛苦,但肯定会有助于前进。我也可以重构很多东西,例如:一些测试将有一个共享的设置和清晰的,所以有很多可重用性。再次感谢。@McAdam331还可以查看TestFixtureSetup/TearDown和TestSetup/TearDown。一个为类中运行的每个测试设置环境,另一个为单个测试用例设置环境。因此,在TestFixture设置中,您可以创建一个临时文件夹。每个测试都会在该临时文件夹中创建一个文件,并在拆卸时删除该文件。最后,在TestFixture分解中,删除temp文件夹。因此,您不需要在每个测试中创建临时文件夹。重构测试时请记住,还有一件事可以帮助您组织,在许多测试的测试设置过程中,您可能会注意到您有一些常见的步骤。如果恰好是这样,我建议创建一个单独的项目来为您完成这些事情,在您的测试之外,您的测试将调用这些。例如,关于artm所说的测试下载功能,我将在单独的项目中创建一个上传文件的方法,因为这是测试的先决条件,其他测试肯定会重用它。