前言
在前面的文章中,我们已经介绍过 Playwright for .NET,它常用于自动化测试已经部署好的 Web 应用。
其实,开发人员也可以使用它在 ASP.NET Core 应用程序中进行功能测试。
功能测试
功能测试是从用户角度编写,用于基于其要求验证系统的正确性。由于功能测试在系统级别运行,所以可能需要一定程度的UI自动化。
目前常用的实现方式[1],是验证给定的路由(比如"/")是否返回预期的成功状态代码和 HTML 输出,例如:
[Fact]
public async Task ReturnsHomePageWithProductListing()
{// Arrange & Actvar response = await Client.GetAsync("/");response.EnsureSuccessStatusCode();var stringResponse = await response.Content.ReadAsStringAsync();// AssertAssert.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