소프트웨어 스케일은 커지고 하드웨어 스펙은 다양해짐에 따라 클라이언트 단계의 테스트는 더욱 중요해지고 있습니다. 하지만 클라이언트 단의 테스트를 자동화하는 것이 쉽지는 않습니다. 왜냐하면 클라이언트는 모바일, PC 플랫폼이자 서로 다른 운영체제에 종속돼 있어 자동화하려면 개별적인 추가 작업이 많이 필요하기 때문입니다.

다행히도 해당 플랫폼을 제어하여 테스트를 자동화할 수 있는 appium 같은 훌륭한 툴이 있습니다. 하지만 해당 툴은 local 장비와 연결된 단말기만 제어할 수 있습니다. 그러다 보니 본인 자리에서만 진행되는 테스트 자동화는 조직 개발 프로세스에 반영하기에는 어려움이 있습니다. 물론 모두가 개인 자리에서 단말기를 연결해 테스트를 실행하면 되겠지만 이는 한정된 단말기 자원을 낭비하게 되는 문제가 있습니다. 예로 들어 나는 하루에 10번 테스트 자동화를 실행하나, 누구는 하루에 1번 할까 말까 하는 것들이죠.

단말기를 어떻게 해야 효율적으로 사용할 수 있을지를 생각해 본다면 테스트 자동화만 실행하는 단말기가 모인 인프라 환경을 생각할 수 있습니다. 그리고 우리는 이런 환경을 "device farm"이라 부르기로 하였습니다. device farm은 테스트 자동화 실행을 위해 모인 단말기의 집합인 것입니다.

Device Farm

device farm은 host인 windows, mac 장비와 연결된 device인 android, iOS 구조로 이루어져 있으며, 흔히 CI/CD 서비스를 제공하는 jenkins의 pipeline을 통해 제어를 할 수 있습니다.

Device Farm 구조

device farm이 구축되면 이제 jenkins를 이용해 host에 연결된 device를 제어할 수 있는 구조가 된 것입니다. 하지만 jenkins는 host는 알지만 host에 연결된 device는 알지 못합니다. jenkins에서 제공하는 pipeline이나 shell 등을 이용해 host에서 device를 제어할 수 있도록 별도의 작업이 필요합니다.

또한 device는 host에 종속이 되는 문제가 있습니다. 예로 들어 테스트 스크립트 A를 host에 연결된 모든 device에서 실행하게 한다면 host가 알고 있는 모든 device를 제어하게 한다면 문제가 없습니다만, 만약 device 1 및 device 2에서는 테스트 스크립트 A를 실행해야 하고 device 3는 테스트 스크립트 B를 실행해야 한다면 어떻게 해야 할까요? jenkins는 특정 host가 running, idle 등의 상태를 알 수 있지만 device의 상태는 알 수가 없기 때문에 상태를 알 수 있는 기능을 개발해야 할 것입니다.

테스트 자동화를 진행하다 보면 알 수 없는 오류가 발생하는 경우가 있습니다. 마치 jenkins를 통해 제어하는 host가 간혹 버그가 발생하는 것처럼 말이죠. 이런 경우 원격 제어 프로그램을 통해 host에 접속하여 문제를 확인할 수 있습니다. 하지만 device의 경우 적합한 원격 제어 프로그램을 설치하여 관리하지 않는 이상 device가 있는 장소로 가서 직접 확인해야 할 것입니다.

이런 문제를 해결하기 위해 device를 원격제어할 수 있으며, 테스트도 특정 device에서 실행할 수 있도록 갖춘 인프라인 stf가 있습니다. 하지만 stf는 android 운영체제만 지원하고 iOS는 지원하지 않는 문제가 있습니다.

STF(https://github.com/openstf/stf)

지금까지 살펴본 내용을 정리해 보자면, 온전한 device farm을 구축하는 것은 어려움이 많습니다. 인프라도 대부분 파편화돼 있고 파편화된 인프라를 서로 연결하는 것이 쉽지 않을 뿐만 아니라 유지보수에 어려움도 있습니다. 온전한 device farm을 구축하려면 어떻게 해야 할까요?

저 또한 이러한 문제를 겪었으며 그 결과 테스트 자동화에 특화된 테스트 플랫폼인 Dogu를 개발하게 됐습니다.

GitHub - dogu-team/dogu: Dogu is testing platform for test automation. Includes device farm, workflow, testing report features for test automation.
Dogu is testing platform for test automation. Includes device farm, workflow, testing report features for test automation. - GitHub - dogu-team/dogu: Dogu is testing platform for test automation. I…

Dogu는 jenkins가 host만 알 수 있는 것과 다르게 host와 device를 파악할 수 있습니다. 그렇기 때문에 host, device 상태와 host에 연결된 device 개수 등을 쉽게 파악할 수 있습니다.

Connected Host List
Connected Device List

host만 제어할 수 있는 jenkins pipeline과 달리, Dogu는 host가 아닌 특정한 device를 tag 기반으로 제어할 수 있는 pipeline인 "routine" 기능을 가지고 있습니다.

Routine Editor
Routine Dashboard
Routine Result

또한 Dogu는 android, iOS device를 원격 제어할 수 있는 기능을 제공합니다.

지금까지 jenkins, stf을 이용해 구축한 device farm의 복잡한 문제와 이를 해결한 Dogu에 대해 간략하게 알아봤습니다.

Dogu는 별도의 통합 과정 없이 바로 device farm을 구축하여 사용하실 수 있도록 편의성을 제공하며, 오픈소스로 공개돼 있어 라이선스에 기반하여 무료로 사용하실 수 있습니다. 지금 바로 Dogu를 사용해 보시는 것은 어떠실까요?

GitHub - dogu-team/dogu: Dogu is testing platform for test automation. Includes device farm, workflow, testing report features for test automation.
Dogu is testing platform for test automation. Includes device farm, workflow, testing report features for test automation. - GitHub - dogu-team/dogu: Dogu is testing platform for test automation. I…