我完全同意 Torbjorn 的回答,但想补充几点:
从小处着手
页面对象模式是简化测试的好方法,但您会发现需要很长时间才能正确进行抽象。首先抽象出你需要的东西,然后随着时间的推移慢慢添加。
增加价值
不要过分尝试编写端到端回归测试。相反,专注于编写增加价值的测试。例如,证明应用程序启动时没有错误的单个测试非常有用,并且可以为您的构建过程提供早期反馈。从那里干出来。
平衡“深”与“浅”
测试用户界面有几种不同的理念。在它们之间建立一个组合。
显而易见的方法是使用类似生产的设置来测试应用程序,以证明应用程序“从前端”工作。这些是“深度”集成测试,可以运行代码的所有部分并且很有用。它们也可能非常缓慢,因为它们通常依赖于外部服务等。通常,为了可靠,应用程序必须在测试运行之间重新启动以确保有效的环境。
对该方法稍作修改是使用已删除的服务(假产品目录、假身份验证提供程序等)测试应用程序。这些是“浅层”测试,证明用户界面在集成在一起时可以正常工作。它们通常运行得更快一些,因为它们不会有相同的物理限制,例如要考虑的网络延迟。您可以更多地关注演示细节和其他边缘案例。
进一步的修改是隔离部分用户界面并在测试工具中运行它们。这些测试将比以前的方法运行得更快,因为它们不会有启动整个应用程序的相同开销。使用这些测试来断言颜色和高度专业化的表示问题。
稳定时迭代
如果您打算编写功能测试来代替手动回归测试,您可能会发现最好等到开发稳定该功能后再为其编写自动化。如果您在开发过程中开始编写自动化,您将不断地重写测试。如果您想在开发过程中实现自动化,请记住:从小处着手。
获得早期反馈
UI 的自动化测试(也称为功能测试)很有用,但它可能非常非常慢。(我见过运行需要几个小时才能完成。)如果您每天运行一次整个测试套件,您会发现反馈循环太长,这会导致误报、维护问题等。
如果可能,尝试将功能测试集成到构建过程中。如果测试套件花费的时间太长,请找到一种方法来集成一些测试,以便您的构建管道可以将重要的测试作为构建的一部分进行验证。