使用 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
IIS 7.5、ASP.NET、模拟和访问 C:\Windows\Temp