작년 많은 프론트엔드 컨퍼런스에서, 시각적 회귀테스트 관련 세션들이 유독 많이들 등장했다. 이는 유닛테스트, 통합테스트 등등으로 해결되지 않았던 UI의 안정성 확보를 위해 좋은 서비스를 유저들에게 전달하기 위해서 제일 말단에 있는 테스트인 시각적 회귀테스트를 진행함으로써 렌더링된 UI 이미지들을 캡쳐하고 또 비교함으로써 프로덕을 안정성있게 유지해 나가는데에 필요했을 것이라고 생각이 들었다.
이러한 시각적 회귀테스트는 처음엔 개념이 생소했기 때문에 여러가지 알아본 내용들을 글에 적어보려한다.
여러 포스팅 글들을 살펴보았을때 많은 이유들이 있었지만, 아래 3가지 정도로 압축해보았다.
functional vs design 관점
Visual Changelog 관점
e2e 테스트와 비교 관점
시각적 회귀테스트의 과정을 설명한 그림이 있었는데 이는 아래와 같고, 요약하면 아래와 같다.
그리고 이러한 시각적 회귀테스트는 로컬디바이스에서 수행시 폰트 혹은 세세한 UI들이 다를수 있기 때문에 동일한 환경에서 테스트를 하는게 좋기 때문에 jenkins 같은 CI server를 연동해 많이들 테스트한다고 한다. 또 이러한 ci server를 연동하며, 아래와 같은 파이프라인을 카카오에서는 구축했다고도 한다.
시각적 회귀테스트를 구축하는 방법에는 크게 두가지 방법이 있었는데, 시각적회귀테스트의 core한 기능들을 지원하는 오픈소스를 활용해 자체 파이프라인을 구축하는방법과, 시각적 회귀테스트의 모든 파이프라인은 제작되어있고 이를 적용만 하면 되는 솔루션들을 활용하는 방법이 있었다.
오픈소스
대부분 cypress를 활용하거나 storybook을 활용하거나의 둘중 하나로 갈리는듯 하였다. 따라서 이러한 라이브러리들을 기존에 사용하고 있었다면 모르겠지만, 플러그인 활용을 위해 cypress, storybook등의 라이브러리를 다시 설치해야하는것에 대한 부담은 있을 것 같다는 생각이 들었다.
아래 오픈소스들은 이미지 캡쳐,비교정도 해주는것이 대부분이라 아래 오픈소스들을 활용하더라도 위에 공유한 이미지에 해당하는 시각적 회귀테스트 파이프라인은 알아서 구축을 해야할듯 싶었다. 물론 그에 비해 아래 소개할 솔루션들에는 이러한 파이프라인들이 이미 만들어져있고, 적용만 하면 되었다.
그리고 이러한 오픈소스들에 대한 간략한 설명을 해보면 아래와 같고, 더 자세히 알아보려면 깃헙 repo에 들어가 보는것을 추천한다.
BackstopJS (garris/BackstopJS)
Loki (oblador/loki)
cypress
https://docs.cypress.io/plugins/#visual-testing 시각적 회귀테스트들을 위한 여러 플러그인들이 존재했고 옆 링크를 가면 확인이 가능하다. 그중 대표적인 것은 아래 두가지 정도인듯 하였다.
storybook
storybook도 시각적 회귀테스트를 위한 플러그인들이 존재했고 그중 대표적인 것이 아래와 같다.
돈 내야하는 솔루션 (Free plan도 있음)
Percy
Chromatic (storybook maintainer가 만든것)
[chromatic 과 percy 비교]
위에 소개한 솔루션들을 비교한글도 있었는데 참고용으로 링크를 올리면 아래와 같다.
https://www.chromatic.com/compare/percy
그리고 이러한 시각적 회귀테스트를 하기위해 생길수 있는 고민들 혹은 고려해야 할것들이 있을것 같아 생각해서 정리를 해보았는데 이는 아래와 같다.
고민들
고려해야 할 것들
그리고 아래는 시각적 회귀테스트들을 구축하며 알려진 known issue들이다.
시각적 회귀테스트를 통해, 코드로 작성되는 UI레벨의 제일 마지막 단계에서의 프로덕 안정성을 확보할수있는 유효한 테스트라는 생각이 많이 들었다. 다만 무작정 도입하는게 아니라, 여러가지들을 고려하며 구축,운영에 들어가는 노력 대비 테스트가 유효한지 충분한 고민이 필요하고, 유효한 테스트 시나리오들을 생각하고, 또 이러한 파이프라인을 잘 구축해야 이러한 효과들을 크게 얻을수 있을거라는 생각이 들었다.