前言

在前面的文章中,我们已经介绍过 ​​Playwright for .NET​​,它常用于自动化测试已经部署好的 Web 应用。

其实,开发人员也可以使用它在 ASP.NET Core 应用程序中进行功能测试。

功能测试

功能测试是从用户角度编写,用于基于其要求验证系统的正确性。由于功能测试在系统级别运行,所以可能需要一定程度的UI自动化。

目前常用的实现方式[1],是验证给定的路由(比如"/")是否返回预期的成功状态代码和 HTML 输出,例如:

[Fact]
public async Task ReturnsHomePageWithProductListing()
{
// Arrange & Act
var response = await Client.GetAsync("/");
response.EnsureSuccessStatusCode();
var stringResponse = await response.Content.ReadAsStringAsync();

// Assert
Assert.Contains(".NET Bot Black Sweatshirt", stringResponse);
}

测试案例

但是,这样测试不能保证用户交互后是否返回预期的输出。

例如,我们需要测试,点击“Privacy”链接,显示正确的页面数据,如下图:

使用 Playwright 对 ASP.NET Core 应用执行功能测试_后端

这时,我们就可以使用 Playwright for .NET 来编写功能测试。

编写代码

在 WebApplication1 解决方案中添加 XUnit 项目,引用 nuget 包​​Microsoft.Playwright​​。

像普通自动化测试那样,编写测试用例代码:

const string BaseURL = "http://localhost:5000";

[Fact]
public async Task Test1()
{
var playwright = await Playwright.CreateAsync();
var browser = await playwright.Chromium.LaunchAsync();

var page = await browser.NewPageAsync();
await page.GotoAsync(BaseURL);

await page.ClickAsync("a[href='/Privacy']");

var handle = await page.WaitForSelectorAsync("h1");
var text = await handle.InnerTextAsync();
Assert.Equal("Privacy Policy", text);
}

启动应用

现在测试还不能正常执行,因为我们是在解决方案中进行测试,并没有真正启动应用,导致 Playwright 无法浏览 BaseURL。

因此,我们需要在测试代码顶部启动应用。

实现方式也很简单,直接调用Program.cs的​​CreateHostBuilder​​方法启动站点:

public async Task Test1()
{
await WebApplication1.Program.CreateHostBuilder(new string[] { $@"--urls={BaseURL}" }).Build().StartAsync();

这里有个小技巧,我们传递--urls参数,指定了应用默认地址。

现在,功能测试可以正常执行,并通过测试了。

结论

功能测试可以确保应用程序的前端按预期运行,使用 Playwright for .NET 保证了用户交互也是按预期执行。