이전 포스트에 이어서 테스트 자동화를 예제와 곁들이면서 살펴보도록 하겠다. 이전 글에서는 테스트 자동화 도입에 앞서 고려할 점을 알아보았다.
예제와 함께하는 테스트 자동화
길동이는 고객들이 유니콘을 특별 주문 제작 할 수 있는 웹 사이트를 만들었다.
일반적으로 예상되는 워크플로는 다음과 같다.
- 계정 만들기
- 자신만의 유니콘 꾸미기
- 장바구니에 추가
- 장바구니 결제
- 리뷰 남기기
위와 같은 작업을 수행하는 하나의 셀레니움 스크립트(코딩)를 만드는 것에 대한 유혹을 느낄 것이고 많은 사람들이 실제로 그렇게 할 것이다. 하지만 이러한 유혹을 물리쳐야 한다. 왜냐하면 이러한 방법은 시간이 오래 걸리고, 페이지 렌더링 타이밍 문제와 관련된 몇 가지 일반적인 문제가 발생하며, 실패하더라도 무엇이 잘못되었는지 진단하기 위한 간결하고 "자각 가능한" 방법을 제공하지 않는 테스트 결과가 되기 때문이다.
위 시나리오를 테스트하기 위해서는 하나의 큰 테스트 보다는 각각 독립적인 여러 개의 작은 테스트로 분해하는 것이 좋다. 당연히 각각의 테스트는 자신만의 특별한 목적이 있어야 한다. 이러한 전략은 테스트를 독립적이고 신속하게 테스트할 수 있게 해 준다.
예를 들어 두 번째 단계인 유니콘 꾸미기를 테스트하고 싶다고 가정해보자. 그렇다면 다음 작업을 수행해야 한다.
- 계정 만들기
- 자신만의 유니콘 꾸미기
나머지 단계는 건너뛰고 있다는 것을 유의하도록 하자. 이 단계를 마친 후 다른 소규모 개별 테스트 케이스에서 나머지 워크플로우를 테스팅하도록 하자.
테스트를 시작하려면 계정을 만들어야 한다. 계정을 만들기 위해서 고려해야 할 몇 가지 옵션이 있다.
- 기존 계정을 사용하는지?
- 새 계정 생성할 것인지?
- 유니콘 꾸미기에 앞에서 고려해야 할 사용자의 특별한 속성이 있는지?
위 질문에 답변은 그리 중요하지 않다. 중요한 것은 무엇을 선택하든 그것이 테스트의 "데이터 설정" 부분에 포함돼있어야 한다는 것이다. 길동이가 사용자 계정을 만들고 업데이트할 수 있는 공개된 API가 있다면 API를 사용하여 이 질문에 답하면 된다. 가능하면 로그인만 할 수 있는 자격 증명을 가진 사용자가 있는 경우에만 브라우저 테스트를 시작하는 것이 좋다.
각 워크플로우에 대한 테스트가 사용자 계정 생성으로 시작되면 각 테스트의 실행에 많은 시간이 소비된다. "헤드리스(headless)"는 API를 호출하여 데이터베이스로부터 응답을 받는 것이 브라우저를 열고 올바른 페이지로 이동하는 뜻한다. 헤드리스는 양식을 제출하기를 기다리는 상대적으로 비싼 프로세스가 필요가 없기 때문에 빠른 작업을 할 때 선호한다.
이상적으로는 이 설정 단계를 한 줄의 코드로 해결할 수 있다. 이 설정은 브라우저가 실행되기 전에 실행된다.
// 일기 전용 권한이 있는 사용자를 생성하여 유니콘을 꾸밀수 있다.
// 그러나 결제 정보를 설정하지 않았고 어드민 권한도 주지 않았다.
// 사용자가 생성될 때 해다 이메일 주소와 비밀번호는 무작위로 생성되어 알고 잇지 않아도 된다.
User user = UserFactory.createCommonUser(); //This method is defined elsewhere.
// 위 유저로 로긴한다.
// 로그인 후에는 "내 계정" 화면으로 도착한다
// 따라서 AccountPage 오브젝트가 리턴되고, 이 오브젝트를 사용하여 "내 계정"
// 필요한 행동을 할 수 있다.
AccountPage accountPage = loginAs(user.getEmail(), user.getPassword());
UserFactory는 createAdminUser()와 createUserWithPaymnet()와 같은 다른 메서드를 제공하고 있다고 생각할 수 있다. 요점은 이 두줄의 코드는 유니콘을 꾸미기에 대한 테스트의 궁극적인 목적으로부터 집중할 수 있게 해 준다는 것이다.
to be continue....
다음 3편에서는 "AccountPage"와 같은 Page Object (페이지 객체)에 관한 설명과 사용하는 예제 코드를 소개하면서 테스트 자동화 주제에 관해서 마무리하도록 하겠다.
'무료정보' 카테고리의 다른 글
셀레니움 - 테스트의 종류 (0) | 2022.01.28 |
---|---|
셀레니움 - 테스트 자동화 3편 (0) | 2022.01.27 |
셀레니움 - 테스트 자동화 1편 (0) | 2022.01.26 |
셀레니움 시작 하기 (0) | 2022.01.25 |
Selenium 셀리니움 - HTML 원소 위치 찾기 (0) | 2022.01.25 |