【问题标题】:Automated testing in web applicationsWeb 应用程序中的自动化测试
【发布时间】:2016-08-30 15:55:36
【问题描述】:

我们正在使用 C# 和 JavaScript 开发一个非常大的 Web 应用程序。我们代码中的大部分调用都是在前端使用 JavaScript 处理的,唯一真正的后端工作是 SQL 服务器,它检索相关数据集并将其作为 JSON 对象返回,然后再次使用 JavaScript 处理。

我们目前正在与我们的测试人员手动进行所有测试,他们根据设计规范验证页面功能,以确保软件按预期工作。

我希望能够为应用程序添加一些自动化测试。我研究了单元测试,如果您有很多带有输入和输出的 C# 方法,并且易于跟踪和验证它们是否正常工作,那么它似乎工作得更好。

我们可以使用哪些标准方法来验证整个应用程序(或至少大部分应用程序)是否正常工作?

我要检查的事情是:

  1. 我们有一个输入页面,可让您创建用户。这个输入页面应该更新,比如说,数据库中的 5 个表。我正在添加 10 个不同的页面,允许我在应用程序中创建用户,我如何验证所有这些页面都正确插入并正常工作?

  2. 我有一个页面,我可以在其中单击一个按钮,将一行插入数据库。如何检查它在应该输出的所有不同位置是否正确输出?

在我的脑海中,我想不出我需要检查的所有不同情况,但它们的数量很多。据我了解,任何视觉错误只能由手动测试的用户测试。

我正在寻找一些关于最佳方法是什么以及如何将它们应用于我们的应用程序类型的反馈。

【问题讨论】:

  • 听起来大部分业务逻辑都在前端,但您提到单元测试是 c# 的事情。有很多 javascript 测试框架可能更适合您的需求
  • @aw04 是的,你可能是对的,我对自动化测试的了解非常少,所以我希望能更好地理解它。从我目前所读的内容来看,它似乎非常关注具有输入/输出方法的 C# 类型逻辑,也许我需要更多地研究 javascript 测试框架,我想看看人们在使用什么以及最好的东西是使用
  • 你使用什么 javascript 框架? angularJS 为 javascript 单元测试提供了一个非常干净的模式,也是在量角器中进行完整 e2e 测试的出色工具。您也可以在没有 angularJS 的情况下使用量角器,但请记住,e2e 测试不一定要完全覆盖您应用程序中的所有代码。无论您在 javascript 中做什么,关键是遵循与其他方式相同的可测试性模式... DI、SRP 等。
  • @stephen.vakil 我们没有使用 javascript 框架。我们主要使用jQuery库编写
  • 您没有在后端使用 Web API 和/或 MVC 吗?如果是这样,如果你编写得当,你的控制器将是高度可测试的。

标签: javascript c# unit-testing testing automated-tests


【解决方案1】:

将任何测试(单元、集成、UI 等)添加到从未考虑过测试的现有应用程序中始终是一个挑战,但这是我希望采用的方法。

首先与测试人员交谈,确定应用程序中测试时间最长的前 5 个区域,并将这些区域作为开始添加测试的基础。

我假设您没有测试或测试很少,如果是这种情况,我建议首先添加自动化 UI 测试,我们使用 selenium 和 specflow。通常这些将是您编写的最后一个测试,因为它们是最脆弱和最慢的 (http://martinfowler.com/bliki/TestPyramid.html)。

我建议首先执行这些操作的原因是,当您考虑在解决方案中添加单元/集成测试时,您可能需要重构代码,零单元测试重构代码可能会导致缺陷,自动化测试会给出您有一定程度的信心,您没有在重构过程中引入回归。

然后我会在你的 C# 服务层添加单元和集成测试,你提到创建用户函数更新 5 个表,而不是 100% 知道你的系统是如何架构的,你可以使用调用“CreateUser”的集成测试来测试它如果此调用要返回新创建的用户的 id,那么您可以使用 id 调用“GetUser”来验证返回的实体,正如预期的那样,用户在 5 个表中增加的事实是隐藏的并且与测试无关。

除非你的公司有很好的 JavaScript 实践,纯粹使用 jquery 作为你的 UI 框架将是一个测试挑战(我已经看到并且是许多混乱的 jquery javascript 项目的原因)。如果你真的想测试,我会考虑使用 javascript 框架,有很多可供你查看评估。除此之外,还有大量的 javascript 单元测试框架。

总而言之,在理想情况下,这将是我对 SPA 应用程序的测试策略(听起来就像你所拥有的那样)。

端到端 UI 测试

  • 这些测试应用程序的整个流程 (selenuiim)

Javascript

服务层(Web API/WCF 或类似)

  • 单元测试 - 测试小块功能

  • 集成测试 - 跨边界测试,例如验证输入实际上保存在数据库中。

需要考虑的事项

  • 如前所述,很难将测试引入现有的 应用程序,您可能需要将努力出售给更广泛的 团队,但这是非常值得的。一旦你有一个全面的 测试套件到位有很多优势,更快的发布节奏, 更少的缺陷,更多的时间花在交付新功能上,更快的失败 等等等等

祝你好运!

【讨论】:

    猜你喜欢
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2015-11-15
    相关资源
    最近更新 更多