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

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 Playwright 对 ASP.NET Core 应用执行功能测试相关的知识,希望对你有一定的参考价值。

前言

在前面的文章中,我们已经介绍过 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 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 保证了用户交互也是按预期执行。

想了解更多内容,请关注我的个人公众号”My IO“

参考资料

[1]

实现方式: https://docs.microsoft.com/zh-cn/dotnet/architecture/modern-web-apps-azure/test-asp-net-core-mvc-apps#functional-testing-aspnet-core-apps

以上是关于使用 Playwright 对 ASP.NET Core 应用执行功能测试的主要内容,如果未能解决你的问题,请参考以下文章

C# EF6 使用 Unity 对一个上下文进行多次异步调用 - Asp.Net Web Api

解释 Asp.net 中的滑块代码

IIS 7.5、ASP.NET、模拟和访问 C:\Windows\Temp

python+playwright 学习-6.截图使用

c#asp.net网站用MediaElement播放mp3文件

在 asp.net 中使用 c++ dll - 异常:无法加载文件或程序集