데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      MetaMask를 쓰는 Web3 프론트엔드 어플리케이션의 end-to-end 테스트

      ingee.kim 23.07.20
      1,837 10 2

      Web3 세상에서는 중앙 서버가 해체되어 존재하지 않게 됩니다 (Decentralized).

      Web3 세상은 중앙 서버가 아니라 P2P 프로토콜에 의해 지탱됩니다.

      Web3 세상에서는 웹 브라우저가 플랫폼 역할을 수행할 것이라고 생각합니다.

      그래서 웹 프론트엔드 기술이 중요해질 것이라고 생각합니다.

      그런 맥락에서 Web3 프론트엔드 어플리케이션의 e2e 테스트에 대해 소개합니다.

      Cypress 와 Synpress 두 단어만 기억하시면 성공입니다.


      e2e 테스트가 필요한 순간

      • TDD (Test Driven Development) 방식으로 Web3 어플리케이션을 개발하고 있었음

      • 터미널 한쪽 구석에 Unit Test를 실행시켜 놓고 소스 파일을 수정할 때마다 모든 Unit Test를 통과하는지 확인하며 개발했음

      • 하지만, 모든 Unit Test를 통과했음에도 버그가 발생하는 상황을 겪음

      • 서버, 네트워크, 브라우저 애드온 같은 모든 컴포넌트가 참여하는 상황에서만 확인 가능한 버그가 있었음

      e2e 테스트가 필요한 순간


      e2e 테스트 도구, Cypress

      • 현재 많이 쓰이는 e2e 테스트 도구는 Cypress와 Selenium

      • Cypress는 브라우저 안에서 일어나는 거의 모든 일을 JavaScript로 확인 가능한 개발자 친화적 도구

      • 반면 Selenium은 QA 엔지니어 친화적 도구


      Web3 어플리케이션 테스트를 위한 Cypress 플러그인, Synpress

      • Web3 어플리케이션은 MetaMask 브라우저 애드온이 있어야 동작

      • MetaMask 브라우저 애드온이 개입하는 사용자 시나리오를 테스트하기 위해 Synpress가 필요

        (MetaMask 활성화 시나리오, MetaMask wallet-connect 승인 시나리오, MetaMask TX 승인 시나리오, ...)


      Cypress & Synpress 테스트 팁

      • Cypress 테스트 구문은 query-assert 또는 query-command 형태

        • Cypress 구문은 assert나 command로 마무리 짓는 것이 Good Practice (assert나 command 이후에 query를 덧붙이지 않는다)

      • 이더리움 메인넷을 타겟으로 하는 테스트는 Synpress의 task setupMetamask 단계에서 실패함

        • Synpress가 MetaMask 애드온을 설정하고 나서 설정 성공 여부를 판정하기 위해 mainnet 문구를 찾지만,

          한글 브라우저에서는 메인넷이라고 표시되기 때문에 문자열 불일치로 인한 assertion fail이 발생한다

        • 메인넷 대신 테스트넷을 타겟으로 테스트 시나리오를 작성하는 편이 좋다


      그래서 e2e 테스트는?

      • 모든 컴포넌트가 참여하는 상황에서만 확인할 수 있는 버그가 있음. 이를 잡아내는 것이 e2e 테스트

      • Unit Test 수행 시간은 msec 단위, e2e 테스트 수행시간은 min 단위 (테스트 비용이 크다)

      • 테스트 피라미드가 제시하는 바대로 e2e 테스트는 아껴 써야 함

      프론트엔드 테스트 피라미드

      출처: "Testing Vue.js Applications"/ Edd Yerburgh 지음/ Manning Publications 펴냄


      e2e 테스트 실행화면


      Ref.

      별 4개급 참조 문서

      별 3개급 참조 문서

      (끝)

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      ingee.kim 님의 최신 블로그

      더보기
      동영상 기고하기