玩转浏览器自动化(7)Playwright 自动化测试

软件测试是软件项目开发中不可或缺的一环。它的主要目的是评估软件应用程序的功能,以确保开发的软件能够满足指定的要求,并且无缺陷,从而生产出高质量的产品。在软件测试中,我们可以使用各种测试技术,例如手动测试、自动化测试等等,来确保软件的质量和安全性。

软件测试的重要性不容忽视,因为任何一个软件错误的成本可能非常昂贵,甚至可能会带来严重的安全风险。例如,如果销售产品的Web应用程序搜索查询输出错误的信息,人们可能会失去对网站或公司的信任。因此,使用软件测试可以带来许多好处,如:.

  • 高性价比: 软件测试的最重要的好处之一是成本效益。在软件开发过程中,及早发现和解决问题可以节省资金和时间,而软件测试可以在早期阶段帮助我们发现错误,从而降低修复成本。
  • 安全性: 软件测试可以确保我们的应用程序在各种环境下都能正常工作。这有助于减少风险和问题,确保产品的安全性和稳定性。
  • 产品质量: 软件测试是确保产品质量的基本要求。通过测试,我们可以确保交付的产品是高质量的,符合客户的要求和期望。
  • 客户满意度: 产品所有者的最终目标是提供最好的客户满意度。为了实现这一目标,我们需要对软件进行测试,确保产品的功能和性能都能够满足客户的需求和期望。这样,我们就可以获得可靠的客户,从而带来长期的商业价值。

手动测试 vs 自动化测试

在软件测试领域中,手动测试和自动化测试是两种主要的测试类型,它们之间的主要区别在于测试人员的角色。手动测试需要测试人员亲自进行测试,而自动化测试则由测试脚本或工具自动执行测试。

手动测试的可靠性相对较低,因为人为错误的风险很高,而自动化测试则更可靠,因为它是由工具或脚本执行的。另外,手动测试可以提高客户体验,因为测试人员可以人为观察并改善用户体验,而自动化测试则无法保证用户体验。

手动测试需要耗费大量时间和人力资源,而自动化测试则比手动测试快得多。此外,自动化测试可以批量执行,而手动测试则不行。虽然自动化测试需要更大的初始支出,但从长远来看,投资回报率较高。

手动测试不需要编程知识,但需要产品知识,而自动化测试则需要编程知识。测试结果的可见性方面,手动测试通常记录在 Excel 或 Word 中,测试结果不容易访问,而自动化测试可以自动生成测试报告。

为了避免手动执行操作的繁琐过程,应该尽量使用自动化工具进行替代。

测试金字塔

测试金字塔是一种非常实用的测试策略,它由敏捷大师Mike Cohn在他的书《Succeeding with Agile》中提出。测试金字塔包括单元测试、服务测试和用户界面测试,这些测试形成了一种金字塔结构,越往上的测试越接近用户,越往下的测试越接近代码。其中,单元测试是基于代码的测试,服务测试是基于接口的测试,而用户界面测试则是基于用户的测试。

需要注意的是,用户界面测试和UI测试并不是同一个概念。用户界面测试主要目的是验证被测试系统及其组件的集成和数据完整性,而UI测试则是基于用户界面的测试。因此,金字塔的顶部一般被称为端到端测试(End-to-End Testing,E2E),用于测试应用程序是否从头到尾完美运行。

玩转浏览器自动化(7)Playwright 自动化测试

在使用Playwright进行端到端测试时,我们需要注意,Playwright只是一个浏览器自动化工具,无法实现测试的相关功能,比如执行测试前置条件、测试后置条件,比对预期结果和实际结果,检查程序的状态,生成测试报告等。因此,我们需要一个测试框架来完善测试流程。

测试框架

测试框架是测试领域中的一个重要概念,它是一组用于创建和设计测试用例的“指导方针”,可以让我们编写出可维护、可扩展、可复用的测试代码。具体来说,测试框架包括组织测试、测试数据的管理、测试的隔离、测试的执行、测试的调试、断言和测试报告等功能。

在 C# 编程语言中,常用的测试框架有 MSTest、NUnit 和 xUnit.NET。其中,MSTest 是 Visual Studio 附带的默认测试框架,NUnit 最初是从 JAVA 版本的测试框架 JUnit 移植而来,现已完全重写并支持各种 .NET 平台,而 xUnit.NET 则是一个轻量级的测试框架,具有出色的可扩展性。

虽然 Playwright 不需要绑定到特定的测试框架,但官方推荐使用 NUnit 作为测试框架。因此,我们将使用 NUnit 作为我们的测试框架。

创建第一个测试项目

接下来,我们将一步步创建一个 Playwright for .NET 测试项目,以测试百度首页的页面标题是否为“百度一下,你就知道”。

创建测试项目

首先,在 Visual Studio 中创建一个新项目,选择“NUnit 测试项目”作为应用类型。在配置新项目的窗口中,输入项目名称和位置,然后点击“创建”按钮。

接下来,我们需要添加 Playwright 依赖。在 Visual Studio 的“解决方案资源管理器”中,右键单击项目名称并选择“在终端中打开”,然后运行以下命令:

dotnet add package Microsoft.Playwright

编写测试代码

现在,我们可以开始编写测试代码了。在代码编辑器中,删除默认的 UnitTest1.cs 代码,然后替换成以下代码:

玩转浏览器自动化(7)Playwright 自动化测试

using Microsoft.Playwright;

namespace TestProject1
{
[TestFixture]
public class Tests
{
[Test]
public async Task NavigateToBaidu_TitleIsIsCorrect()
{
var playwright = await Playwright.CreateAsync();

        await using var browser = await playwright.Chromium.LaunchAsync();  

        var page = await browser.NewPageAsync();  

        await page.GotoAsync("https://www.baidu.com");  

        var title = await page.InnerTextAsync("title");  

        Assert.That(title, Is.EqualTo("百度一下,你就知道"));  
    }  
}  
}

这段代码的作用是创建一个测试类和一个测试方法,用于测试百度首页的页面标题是否为“百度一下,你就知道”。

运行测试

现在,我们已经完成了测试代码的编写,可以运行测试了。在 Visual Studio 的“解决方案资源管理器”中,右键单击项目名称并选择“在终端中打开”,然后运行以下命令:

dotnet test

测试完成后,你会在开发者 PowerShell 窗口中看到测试结果。

玩转浏览器自动化(7)Playwright 自动化测试

总结

在本章中,我们不仅了解了自动化测试的基本概念和原理,还学习了如何创建测试项目。通过创建测试项目,我们可以更好地组织和管理测试用例,提高测试效率和质量。

在下一章中,我们将详细学习如何使用 Playwright + NUnit 进行自动化测试。