<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>q____.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Tue, 06 May 2025 08:49:46 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>q____.log</title>
            <url>https://velog.velcdn.com/images/q____/profile/9e86efa7-e05e-46da-adbc-ac125ed59bde/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. q____.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/q____" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Amazon Device Farm 으로 테스트 정해진 시간 자동 실행이 가능할까? (with AWS CLI)]]></title>
            <link>https://velog.io/@q____/Amazon-Device-Farm-%EB%A1%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A0%95%ED%95%B4%EC%A7%84-%EC%8B%9C%EA%B0%84-%EC%9E%90%EB%8F%99-%EC%8B%A4%ED%96%89%EB%B0%B0%EC%B9%98...%EC%9D%B4-%EA%B0%80%EB%8A%A5%ED%95%A0%EA%B9%8C-with-AWS-CLI</link>
            <guid>https://velog.io/@q____/Amazon-Device-Farm-%EB%A1%9C-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A0%95%ED%95%B4%EC%A7%84-%EC%8B%9C%EA%B0%84-%EC%9E%90%EB%8F%99-%EC%8B%A4%ED%96%89%EB%B0%B0%EC%B9%98...%EC%9D%B4-%EA%B0%80%EB%8A%A5%ED%95%A0%EA%B9%8C-with-AWS-CLI</guid>
            <pubDate>Tue, 06 May 2025 08:49:46 GMT</pubDate>
            <description><![CDATA[<h2 id="aws-cli-로-테스트-실행">AWS CLI 로 테스트 실행</h2>
<p>: AWS 콘솔로 Device Farm을 실행하던 중, CLI 등으로 매일(혹은 매주..) 테스트를 자동 실행하도록 예약하면 효과적일 것 같아 해당 방법을 찾아보게 됐습니다. 우선 AWS CLI로 테스트를 실행해보았습니다.</p>
<h4 id="1-aws-cli-설치">1. AWS CLI 설치</h4>
<p>: <a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html">공식 페이지</a> 를 참고하여 AWS CLI 설치합니다.</p>
<pre><code>$ curl &quot;https://awscli.amazonaws.com/AWSCLIV2.pkg&quot; -o &quot;AWSCLIV2.pkg&quot;
$ sudo installer -pkg AWSCLIV2.pkg -target /
</code></pre><h4 id="2-aws-console-에서-iam-액세스-키-생성-후-자격증명">2. AWS Console 에서 IAM 액세스 키 생성 후 자격증명</h4>
<p>: AWS Console ➔ IAM ➔ 사용자 ➔ DeviceFarm 페이지(<a href="https://us-east-1.console.aws.amazon.com/iam/home?region=us-east-2#/users/details/DeviceFarm/create-access-key">링크</a>) 에서 Device Farm 접근 권한이 있는 IAM 액세스 키를 생성합니다. 
이때, 비밀 액세스 키는 생성 시에만 확인할 수 있으니 적어둡니다.</p>
<p><img src="https://velog.velcdn.com/images/q____/post/49775ca9-41c6-487a-baee-52fac1230289/image.png" alt=""></p>
<h4 id="3-aws-cli-자격증명">3. AWS CLI 자격증명</h4>
<p>: 아래 명령어로 AWS CLI 액세스 키/비밀 액세스 키를 등록합니다.
등록 내역은  <code>~/.aws/credentials</code> 파일에서 확인할 수 있습니다.</p>
<pre><code>$ aws configure 
AWS Access Key ID [None]: {액세스 키}
AWS Secret Access Key [None]: {비밀 액세스 키}
Default region name [None]: us-west-2
Default output format [None]:
</code></pre><h4 id="4-aws-cli로-device-farm-테스트-실행">4. AWS CLI로 Device Farm 테스트 실행</h4>
<p>AWS CLI로 Device Farm의 테스트를 실행하는 방법은 공식 페이지에 자세하게 나와 있습니다. (<a href="https://docs.aws.amazon.com/ko_kr/devicefarm/latest/developerguide/how-to-create-test-run.html#how-to-create-test-run-cli">공식 페이지</a>)</p>
<p>위의 공식 페이지 안내사항을 따라서 실행 후 마지막 실행 상태를 확인(<code>aws devicefarm get-run --arn ARN</code>)하면 아래와 같이 테스트 결과를 확인할 수 있습니다. 
아래 상태는 테스트 150 중 150개를 모두 실행(100개 pass, 50개 fail) 후 완료되기 직전 상태입니다.</p>
<p><img src="https://velog.velcdn.com/images/q____/post/27ea0e0a-57c1-48ea-82a9-121bc0909517/image.png" alt=""></p>
<br>

<hr>
<br>


<h2 id="aws-cli로-실행-시작-시간-예약">AWS CLI로 실행 시작 시간 예약</h2>
<p>: 이렇게 AWS CLI로 테스트를 실행하다 보면, 실행 시작 시간을 예약해서 쉽게 테스트를 실행할 수 는 없을까? 하는 생각이 듭니다. 특히나, 테스트 실행 명령어가 <code>schedule-run</code> 이고, 공식 페이지에도 <code>6단계: 테스트 실행 예약</code> 으로 나와 있어, 실행 시작 시간 예약이 당연히 되지 않을까? 하는 생각이 듭니다. 
하지만...</p>
<br>


<ol>
<li>아래 AWS CLI/API의 테스트 실행 명령어/API 공식 문서를 확인하면, 별도의 <strong>실행 시작 시각 예약 지정은 할 수 없습니다</strong>.</li>
</ol>
<ul>
<li>CLI(<code>shedule-run</code>): <a href="https://docs.aws.amazon.com/cli/latest/reference/devicefarm/schedule-run.html#schedule-run">https://docs.aws.amazon.com/cli/latest/reference/devicefarm/schedule-run.html#schedule-run</a></li>
<li>API(<code>ScheduleRun</code>): <a href="https://docs.aws.amazon.com/cli/latest/reference/devicefarm/schedule-run.html#schedule-run">https://docs.aws.amazon.com/cli/latest/reference/devicefarm/schedule-run.html#schedule-run</a></li>
</ul>
<ol start="2">
<li>Device Farm 명령어에서 별도의 실행 예약이 불가능하므로, 정해진 시각에 테스트를 실행하기 위해서는 서버에 배치를 등록하여 실행해야 합니다.
API를 주기적으로 실행하도록 설정하거나(Postman 등으로 실행) <code>Cron</code> 명령어로 위의 AWS CLI 명령어를 실행하도록 하는 것입니다. (크론 명령어로 배치 등록은 생략하도록 하겠습니다. 관련 사항은 구글 등에서 cron batch 로 검색하면 쉽게 접근할 수 있을 겁니다.)</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[Amazon Device Farm / Appium Java TestNG 기반 테스트 자동화 (with AWS 콘솔)]]></title>
            <link>https://velog.io/@q____/Amazon-Device-Farm-Appium-Java-TestNG-%EA%B8%B0%EB%B0%98-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9E%90%EB%8F%99%ED%99%94</link>
            <guid>https://velog.io/@q____/Amazon-Device-Farm-Appium-Java-TestNG-%EA%B8%B0%EB%B0%98-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%9E%90%EB%8F%99%ED%99%94</guid>
            <pubDate>Sat, 22 Mar 2025 08:59:57 GMT</pubDate>
            <description><![CDATA[<h3 id="개발-환경">개발 환경</h3>
<h4 id="step-1">Step 1</h4>
<p>: 초기 테스트 환경 구성은 Java + Appium + Simulator(혹은 실단말) 로 API와 Mobile APP 테스트를 진행하는 것입니다.</p>
<ul>
<li>Java (+TestNG) / Eclipse</li>
<li>Appium (+Node)</li>
<li>Test Application (Flutter, Oracle Cloud)</li>
</ul>
<h4 id="step-2">Step 2</h4>
<p>: 테스트 환경을 구성하면서 확인해보니, Amazon Device Farm 환경을 구축하고 테스트를 진행해보는 것도 좋을 것 같아, 해당 환경에서 테스트를 진행해보았습니다.</p>
<ul>
<li>Amazon Device Farm</li>
</ul>
<br>




<h3 id="개발-목적">개발 목적</h3>
<ul>
<li>범용적인 테스트 자동화 프로젝트 제작 (다른 어플리케이션에 쉽제 적용 가능한 테스트 자동화 샘플)</li>
<li>API 테스트 자동화 &amp; UI 테스트 자동화 동시에 진행</li>
<li>Amazon Device Farm을 활용한 테스트</li>
</ul>
<br>





<h3 id="테스트-타겟">테스트 타겟</h3>
<p>: 많이 사용하는 기본 어플리케이션(구글, 유투브 등..)의 테스트 자동화 프로젝트를 진행하려 했으나, 그럴 경우 API 자동화를 진행하지 못해 샘플 어플리케이션(주소록 어플리케이션)을 제작하여 해당 어플리케이션의 테스트 자동화를 진행하였습니다.</p>
<ul>
<li>주소록 어플리케이션(<a href="https://velog.io/@qwer_q/%EC%A3%BC%EC%86%8C%EB%A1%9D-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98">Link</a>): iOS, Android Mobile APP</li>
</ul>
<br>


<hr>
<h3 id="프로젝트-구조">프로젝트 구조</h3>
<ul>
<li>Control:  <ul>
<li>드라이버 등 기본 환경 세팅 클래스 </li>
<li>클릭, 스크롤 등의 사용자 정의 함수 클래스.</li>
</ul>
</li>
<li>Business: 테스트 중 특정 페이지에서만 사용되는 별도의 함수가 필요할 경우 존재하는 클래스들</li>
<li>Test: 테스트 클래스들</li>
</ul>
<br>




<h3 id="amazon-device-farm">Amazon Device Farm</h3>
<p>   Amazon Device Farm의 공식 문서(<a href="https://docs.aws.amazon.com/ko_kr/devicefarm/latest/developerguide/test-types-appium-integrate.html">링크</a>) 에는 굉장히 친절하게 테스트를 구동하는 방법이 나와 있지만... 여러 오류들 때문에 많은 시행착오를 했습니다. 
   주 원인은 프로젝트 구조가 <code>testng.xml</code> 파일을 시작으로 테스트를 수행하는 구조여서 maven으로 테스트에 필요한 압축 파일을 빌드하는 데 많은 시행착오를 겪었습니다(*아래 별첨 참고).</p>
<p><img src="https://velog.velcdn.com/images/qwer_q/post/9144ea49-d3ff-4b6a-8d74-ccef1e57b9d4/image.png" alt=""> </p>
<p>아래는 Android 테스트 결과 비디오(*아래 별첨)와 테스트 성공 로그입니다. 주소록 어플리케이션의 검색 기능 중 아래 사항의 테스트 3개를 Pass했습니다. (iOS 테스트 결과도 아래와 유사하게 나왔습니다)</p>
<ul>
<li>특정 검색어 API 응답 결과 확인</li>
<li>특정 검색어 어플리케이션 UI 결과 확인</li>
<li>위의 API/UI 결과 비교</li>
</ul>
<p><img src="https://velog.velcdn.com/images/qwer_q/post/9bfa303a-a841-4da5-af72-3d063e71d861/image.png" width="400"> <img src="https://velog.velcdn.com/images/qwer_q/post/9d4661ea-b102-4105-97fe-67f7d6111164/image.png" width="400"></p>
<h4 id="amazon-device-farm-장점">Amazon Device Farm 장점</h4>
<ul>
<li>동영상 녹화 등 테스트 실행 시 설정할 수 있는 옵션이 있어, 자동으로 동영상 녹화를 해줍니다
: 해당 기능은 로컬 환경에서 테스트를 진행할 때 라이브러리를 사용하여 구현할 수 있지만, 테스트 시간과 용량 때문에 대체로 많이 사용하지 않았었는데, 클라우드 환경에서는 간편하게 사용이 가능했습니다.</li>
<li>여러 단말을 한꺼번에 테스트 진행할 수 있다. 
: 이 부분도 로컬 환경에서도 구축 가능하지만, 로컬 환경에서는 테스트 타겟과 무관한 이슈들이 있을 수 있는데 - 네트워크 이슈, 특정 설정 등 - 이러한 단점들을 클라우드 환경은 여러모로 보완해주고 있었습니다.</li>
<li>Fuzz Test 를 지원하여, 테스트 수트를 구성하지 않았다면 임의로 테스트를 진행해볼 수 있다.</li>
<li>Java, Python, Instrumentation.. 등 다양한 테스트 수트를 실행 가능합니다.</li>
</ul>
<br>




<h3 id="프로젝트-완료-후-아쉬운-점">프로젝트 완료 후 아쉬운 점</h3>
<ul>
<li><p>샘플 어플리케이션의 아쉬움: Flutter로 AI를 사용해 엉성하게 만들었기 때문에 여러 기능이나 실제 어플리케이션처럼 데이터가 많지 않아 테스트를 폭넓게 진행하지 못했습니다. 기초적인 뼈대를 만들었다는 데에 의의가 있는 테스트 진행이었습니다.</p>
</li>
<li><p>Amazon Device Farm 운용: 다양한 기능이 있는데, 일부 기능만을 사용하여 아쉬움이 남았습니다.</p>
</li>
</ul>
<br>



<hr>
<h3 id="참고사항">참고사항</h3>
<p>** 위에 잠깐 언급했던, <code>testng.xml</code> 파일로(혹은 여러 xml파일들로) TestNG 테스트들을 실행해온 경우 아래와 같은 문제들이 있었습니다.</p>
<ol>
<li>프로젝트가 Java Application에서 구동된 적이 없어, maven 으로 빌드 불가능 (이 부분은 TestNG나 JUnit으로 테스트 클래스만을 실행하는 프로젝트들의 공통 문제일 것으로 생각됩니다.)</li>
<li><code>testng.xml</code> 파일이 maven으로 빌드한 압축파일에 추가되지 않음 ➔ 이로 인해서 <code>testng.xml</code>로 작동하는 테스트 클래스들(모든 테스트 클래스들..)이 maven으로 빌드한 압축파일에 추가되지 않음</li>
</ol>
<br>  

<p>위 문제들은 아래와 같이 해결했습니다.</p>
<ol>
<li><p><code>testng.xml</code> 파일을 실행하는 main 클래스를 생성하여 Java Application으로 실행 후 maven 빌드
<img src="https://velog.velcdn.com/images/qwer_q/post/5d281409-a5be-4091-a60c-0d6e06d989a8/image.png" alt=""></p>
</li>
<li><p><code>src/test/resource</code> 에 <code>testng.xml</code> 를 추가 후 <code>pom.xml</code>의 경로에 해당 파일 추가
<img src="https://velog.velcdn.com/images/qwer_q/post/6e9ca154-5572-49a0-b1be-83bcffc5b0b1/image.png" alt=""></p>
</li>
</ol>
<p>** 테스트 실행 비디오
용량 등을 고려하지 않고 테스트 실행 영상이 녹화되는 것은 Amazon Device Farm의 장점 중 하나라고 생각합니다.</p>
<p><img src="https://velog.velcdn.com/images/qwer_q/post/4b4d8a1c-0812-4f39-8350-0ade5e5960e8/image.gif" alt=""></p>
<p><img src="https://velog.velcdn.com/images/qwer_q/post/1b6be843-fe45-47ac-97e9-b7375f27f5d5/image.gif" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[주소록 어플리케이션 (with AI)]]></title>
            <link>https://velog.io/@q____/%EC%A3%BC%EC%86%8C%EB%A1%9D-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-with-AI</link>
            <guid>https://velog.io/@q____/%EC%A3%BC%EC%86%8C%EB%A1%9D-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-with-AI</guid>
            <pubDate>Sat, 22 Mar 2025 08:59:12 GMT</pubDate>
            <description><![CDATA[<h3 id="개발-목적">개발(?) 목적</h3>
<ul>
<li>테스트 자동화를 구축할 때 샘플로 사용할 어플리케이션 제작</li>
<li>API 사용, UI 테스트 가능</li>
<li>iOS, Android (+Web/Mobile Web) 모두 테스트 가능</li>
<li>범용적인 기능이 있는(다른 어플리케이션에 쉽게 적용 가능한) 어플리케이션</li>
</ul>
<br>

<h3 id="ai-사용">AI 사용</h3>
<ul>
<li>AI 사용 부분: Flutter 어플리케이션<ul>
<li>사용 AI: Deepseek</li>
</ul>
</li>
<li>AI 미사용 부분: 서버 구현 (Oracle Cloud)
<img src="https://velog.velcdn.com/images/qwer_q/post/3ecdfce0-e6b4-4ec2-b280-b6dadec2b2f6/image.png" alt=""></li>
</ul>
<br>

<h3 id="개발-어플리케이션">개발 어플리케이션</h3>
<p>: Flutter 기반의 주소록 어플리케이션</p>
<ul>
<li>검색 기능(주된 테스트 타겟) 존재</li>
<li>주소록의 인물 API 존재</li>
<li>iOS/Android Mobile APP</li>
<li>기능:<ul>
<li>주소록의 사람 검색</li>
<li>주소록의 사람 상세 페이지</li>
<li>주소록의 사람 삭제</li>
<li>주소록의 사람 정보 수정</li>
</ul>
</li>
</ul>
<br>  



<h3 id="결과물-시뮬레이션">결과물 시뮬레이션</h3>
<p>(iOS/Android)</p>
<p>: 주소록 인물 검색 ➔ 인물 상세 페이지 ➔ 인물 정보 수정 ➔ 인물 삭제</p>
<div>
<img src="https://velog.velcdn.com/images/qwer_q/post/c84ef0f1-35cb-4c60-9aad-e7e0fc97853a/image.gif" width="200"><img src="https://velog.velcdn.com/images/qwer_q/post/26f3e9c8-e517-43fe-a65d-f0b59a5c0dd0/image.gif" width="200"> 
</div>

]]></description>
        </item>
    </channel>
</rss>