Azure DevOps에서 Selenium을 사용한 시스템 테스트가 오류인 경우 화면 캡처를 보는 방법

Azure DevOps에서 Selenium을 사용한 시스템 테스트가 오류인 경우 화면 캡처를 보는 방법



Selenium을 사용하여 시스템 테스트를 만든 경우 테스트가 오류가 발생하면 해당 시간의 화면 캡처를 볼 수 있습니다. 특히 Azure Devops에서 실행하면 실제 실행 상황을 볼 수 없기 때문에 화면 캡처는 중요한 정보입니다. 결론부터 말하자면 Azure DevOps의 설정은 특히 필요없고 로컬로 할 수 있는 설정을 해 두면, 그냥으로 에러의 경우에 화면 캡쳐를 볼 수 있습니다.

Selenium에서 화면 캡처를 생성하는 방법



먼저 Selenium에서 실행중인 화면의 캡처는 Selenium의 기능으로 찍을 수 있습니다. RemoteWebDriver에 GetScreenshot이라는 메소드가 있으므로, 이 반환값의 class의 메소드로 SaveAsFile에 풀 패스의 파일명을 지정하면 임의의 장소에 그 화면 캡쳐를 생성할 수 있습니다.
var screenshot = Driver.GetScreenshot();
screenshot.SaveAsFile(@"C:\temp\Capture.jpg");

화면 캡처를 원하는 타이밍으로 제한하는 방법



이 화면 캡처는 전체 테스트에서 원하지 않습니다. 성공적인 테스트의 경우는 필요하지 않으므로 제한하려면 테스트 결과를 알아야합니다. 이것은 TestContext를 사용하면 얻을 수 있습니다. TestCleanup에서 TestContext의 CurrentTestOutcome 속성을 보면 테스트 결과도 알 수 있으며 TestName 속성으로 테스트 이름도 취할 수 있으므로 이 이름을 파일 이름으로 하면 자동으로 고유하게 할 수 있습니다. 그냥 MSTest에서 TestContext를 사용하는 경우 조금 버릇이 있습니다.

TestContext 설정



TestContext의 인스턴스는 속성에서 1개, static 필드에서 1개, 합계 2개 있어야 합니다. 그리고 ClassInitialize에서 static 필드의 TestContext에 복사하고 실제로 사용할 때는 아무것도 설정하지 않는 속성의 TestContext를 사용합니다. 프로퍼티의 TestContext 를 사용하지 않고 TestCleanup 로 _testContext 를 체크하면(자) 이 테스트는 몇개 돌려 있어도 모두 같은 테스트명이 와 버립니다. 어쨌든 아무것도 설정하지 않은 속성의 테스트 이름이 업데이트되었습니다. static property 1 개만으로 하면(자) 이번에는 테스트를 실행할 수 없게 됩니다. stackoverflow 에도 써 있었습니다만, 이 2개 가지고 이외의 방법으로는 잘 가지 않았습니다. . .
public TestContext TestContext { get; set; }
private static TestContext _testContext;

[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
    _testContext = testContext;
    //TestContext = testContext;    //x:フィールドには入れずにプロパティだけに入れると何故かテストが実行できない

[TestCleanup]
public void TestCelean()
{
    _testContext.CurrentTestOutcome //x:本来こっちで良い気がするが、このインスタンスは最初のテスト情報しか入らない
    TestContext.CurrentTestOutcome  //〇:本来こっちには何も入れてない気がするが、このインスタンスはその時動いたテスト情報が入る

테스트가 성공하지 못했을 때 화면 캡처를 첨부하는 방법



이제 TestContext에서 테스트 결과를 얻을 수 있게 되었으므로, 나머지는 TestCleanup에서, _testContext.CurrentTestOutcome가 성공하면 return합니다. 성공 「외」의 경우로 하는 것으로, 타임 아웃이나 예외의 경우등도 대상이 됩니다. 이 상태에서 TestContext에 AddResultFile하면 해당 파일을 관련 이미지로 취급 할 수 있습니다.
[TestCleanup]
public void TestCelean()
{
    if (TestContext.CurrentTestOutcome == UnitTestOutcome.Passed) return;
    var screenshot = Driver.GetScreenshot();
    var screenshotFile = Path.Combine(Directory.GetCurrentDirectory(), $"{TestContext.TestName}.png");
    screenshot.SaveAsFile(screenshotFile);
    TestContext.AddResultFile(screenshotFile);
}

이제 실제로 테스트가 실패했을 때 테스트 익스플로러에서 보면 이런 느낌이 듭니다.



Azure DevOps에서 오류가 발생하면 화면 캡처 보기



이 설정을 사용하면 Azure DevOps에서 테스트 작업을 수행하면 자동으로 오류가 발생하면 화면 캡처를 볼 수 있습니다! 실제로 Pipeline에서 이미지를보고 싶을 때는 Pipeline의 결과 화면에서 1.Tests를 클릭. 실제로 오류가 발생한 테스트가 표시되므로 2. 테스트 이름을 클릭하고 3.Attachments를 클릭하면 4에 오류의 경우 화면 캡처가 표시됩니다. 편리!

좋은 웹페이지 즐겨찾기