극작가, NUnit, 페이지 개체 모델 및 종속성
12577 단어 testdevplaywright
신선하고 깨끗한
Playwright 데모를 본 기억이 나고 그것이 우리에게 적합한지 조사하기 시작했습니다. C# 개발자로서 깔끔한 Async 구현과 명확한 설명서 페이지에 만족했습니다. Azure DevOps의 호스팅된 에이전트에서 신속하게 헤드리스 테스트를 실행하는 작업 파이프라인을 포함하는 데모를 만든 후 TA 담당자는 도구를 탐색할 수 있었습니다.
지침을 따르십시오
공식 문서에서 대부분의 작업을 수행하는 방법을 볼 수 있습니다. documentation에서 언급한 것은 NUnit을 사용하는 것입니다. 개발자로서 저는 일반적으로 XUnit을 사용하지만 문서에 몇 가지 문제가 있다고 명시되어 있으므로 한 번만 고집하지 말자.
[Parallelizable(ParallelScope.Self)]
public class Tests : PageTest
{
[Test]
public async Task ShouldAdd()
{
int result = await Page.EvaluateAsync<int>("() => 7 + 3");
Assert.AreEqual(10, result);
}
}
데모는 간단합니다...
팀이 실제 시나리오를 구현한 후 구성, 비밀 및 다른 API에 대한 연결과 같은 생각이 조금 더 필요했습니다. 우리는 그것을 신선하고 깨끗하게 유지하고 싶었다는 것을 기억하십시오! ASP.NET Core 설정에 매우 익숙한 개발자로서 이러한 문제 중 일부에 대한 답은 분명합니다.
구성
이전 프로젝트는 .NET Framework를 기반으로 했으며 여전히 System.Configuration.Configurationmanager를 사용하고 있었습니다. 테스트 클래스 내에서 구성 값을 빠르게 가져오기 위해 ConfigurationBuilder를 사용했습니다.
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json") //make sure the file is copied to output
.AddEnvironmentVariables()
// Add any other configuration sources
.Build();
비밀
실제 테스트에서는 아마도 테스트 사례별로 다른 계정을 사용하여 로그인할 것입니다. 우리는 구성 파일의 암호와 같은 비밀을 정말로 원하지 않았고 파이프라인에서 비밀 변수를 사용할 수 있지만 로컬 개발을 위해 해결하지 못했습니다. 또한 여기서도 '정상적인' 개발 작업에서와 동일한 솔루션을 구현했습니다. 이는 Azure Key Vault를 의미할 뿐만 아니라 관리 ID와 함께 사용됩니다. Azure Cli로 로그인하고 Key Vault에 액세스할 수 있는 경우 다음 예제가 마술처럼 작동합니다.
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
// ---
var keyVaultUri = new Uri(configuration["keyvaultUrl"]);
var tokenCredential = new DefaultAzureCredential();
var secretClient = new SecretClient(keyVaultUri, tokenCredential);
var secret = await secretClient.GetSecretAsync("SomeSecretName");
페이지 개체 모델
테스트 자동화의 경우 POM 구조를 사용하여 페이지별로 상호 작용을 분리하고 그룹화하는 것이 일반적입니다. 이는 실제 단위 테스트에서 구현을 숨기고 일부 재사용성을 생성하기 위해 페이지당 클래스를 생성함을 의미합니다. 이것은 테스트 코드가 POM 내부에 필요한 모든 것을 전달하는 새로운 명령문으로 뒤덮이는 효과를 가질 수 있습니다.
종속성
예, 그렇게 부르셨습니다. 여기서 일종의 종속성 관리를 해야 하지 않나요? 이를 깨끗하게 유지하려면 필요할 때 모델, 구성 및 비밀 클라이언트와 같은 항목을 가져오면 됩니다.
우리는 다음과 같은 모양의 테스트를 진행했습니다.
[Test]
public async Task CheckPlatforms()
{
await Page.GotoAsync(Configuration["BaseUrl"]);
var homePage = GetService<HomePage>();
await homePage.OpenPlatformPopup();
var platFormPopUp = GetService<PlatformPopUp>();
Assert.IsTrue(await platFormPopUp.HasSpotify());
}
이를 설정하는 방법에는 여러 가지가 있습니다. 다음 예제에서는 실제 테스트 클래스가 PageTest 대신 TestStartup을 상속할 수 있도록 PageTest를 상속하는 TestStartup이라는 기본 클래스를 만듭니다. IConfiguration 및 GetService 메서드를 노출하고 서비스(POM 및 기타 종속성)가 TestStartup 클래스 내부의 ServiceCollection에 추가됩니다.
TestStartup.cs
public class TestStartUp : PageTest
{
private IServiceProvider _serviceProvider;
private IConfiguration _configuration;
private TokenCredential _tokenCredential;
public TestStartUp()
{
_configuration = BuildConfiguration();
_serviceProvider = BuildServices();
_tokenCredential = new DefaultAzureCredential();
}
private IConfiguration BuildConfiguration()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.dev.json", optional: true);
return builder.Build();
}
private IServiceProvider BuildServices()
{
var services = new ServiceCollection();
services.AddSingleton(_configuration);
services.AddSingleton<SecretClient>(s =>
new(new Uri(_configuration["keyvaultUrl"]), _tokenCredential));
services.AddTransient(page => Page);
services.AddTransient<HomePage>();
services.AddTransient<PlatformPopUp>();
return services.BuildServiceProvider();
}
public IConfiguration Configuration => _configuration;
public T GetService<T>() => _serviceProvider.GetService<T>() ?? throw new NullReferenceException("Do not forget to register the service.");
}
자원
oscarvantol.nl
Reference
이 문제에 관하여(극작가, NUnit, 페이지 개체 모델 및 종속성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/oscarvantol/playwright-nunit-page-object-models-and-dependencies-5ac1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)