์๋์ด๊ฐ ์ด๋ฐ ํ ์คํธ ์๋ํ ํ๋ก๊ทธ๋จ์ด ์๋ค๋ ๊ฑธ ์๋ ค์ค์ ์ ํ๊ฒ ๋์์ต๋๋ค. ์ฒ์ ํด๋ณด๋ ๊ฒ์ด๋ผ์ ๋ฏ์ค์์ง๋ง, ๋ค๋ฅธ ์ธ์ด๋ค์ฒ๋ผ ์ฒซ ์ ํ ๋ง ์ํด๋ณด๋ฉด ๋ค ๋น์ทํ๊ณ ๊ฒฐ๊ตญ์ python์ผ๋ก ์ฝ๋ฉ ๋ช ์ค์ ํ๋ฉด ๋์ผํ ๋์์ ๋งคํฌ๋ก์ฒ๋ผ ์๋ํํ ์ ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์ ๋ ํ ์ผ์ผ์ ๊ณ ํต๋ฐ๋ค๊ฐ ์ด์ ์ต์ํด์ง ์ํฉ์ ์กฐ๊ธ์ด๋๋ง ์ ๋ฆฌํด๋ด ๋๋ค.
๋ชฉ์
์นด์นด์ค๋ทฐ๊ฐ ๋ ์ด์ ์น์์ ๋ง์ด๋ทฐ๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ PC๊ฐ ์๋ ๋ชจ๋ฐ์ผ์์ ์๋ํ๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ๋ง ํ์ต๋๋ค. ์ ๋ ๊ณผ๊ฑฐ์ ์๋๋ก์ด๋ ์ฑ์ ์ ๊น ๊ฐ๋ฐํ๊ณ ์ ๋ฎฌ๋ ์ดํฐ๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ ์ ์ ์์ง๋ง, ํ
์คํธ๋ฅผ ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํด๋ณธ ์ ์ด ์์ด์ ์ด๋ฐ ์๋น์ค๊ฐ ์๋์ง ๋ชฐ๋์ต๋๋ค. ์๋์ด๋ 2017๋
์ ์ ๊น ํ์๋ค๊ณ ํ๋๋ผ๊ตฌ์. ์์ฆ ์๋๋ก์ด๋ ๊ฐ๋ฐ์๋ ๋๋ถ๋ถ ์๊ณ ์๋ค๊ณ ํฉ๋๋ค.
appium์ ํ์ฌ์์ ๊ฐ๋ฐํ ์ฑ์ ํ
์คํธ ์๋ํ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ง์ง๋ง ๊ฒ์ ๋งคํฌ๋ก๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด ํ์๋ ๋ถ๋ค๋ ์๋ค๋ ๊ฑธ ์์๋ต๋๋ค. ์ฌํํผ ์ ๋ ์นด๋ทฐ ๋ชจ๋ฐ์ผ ์๋ ์ฌ์ฉ์ ์ํด ์ด์ฉํ๋ ์๋น์ค(?)๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค.
์ฌ์ฉ ํด
- ์๋๋ก์ด๋ ์คํ๋์ค ์ ์๋๋ก์ด๋ ์ ๋ฎฌ๋ ์ดํฐ ๋๋ ์ค๋ฌผ ์๋๋ก์ด๋ ๋๋ฐ์ด์ค(๋ ์ค์ ํ 1)
- Appium Server(๋๋ฐ์ด์ค์ ํต์ ํ ์๋ฒ), Appium Inspector(์น์ฒ๋ผ Xpath๋ฅผ ์๊ธฐ ์ํด์ ํ์)
- pure apk์์ ํ์ํ ์ฑ์ ๋ค์ด๋ก๋ํ์ฌ ์ฌ์ฉ (ex. ์นด์นด์คํก ๋ฑ)
- ์์ดํฐ (= iOS(ipa)) ์ฑ ํ์ผ์ ์ค์ ์ธ์ฆ( = ์ฌ์ด๋?) ํ ์ ์์ด์ ์์ฒด ๊ฐ๋ฐ ํ ์ฑ์ด ์๋๋ฉด ์ฌ์ฉ์ด ์ด๋ ค์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ง์ฝ ํ ์ฑ์ ํ ๊ฒฝ์ฐ ํ์ฌ์ ์ฌ์ด๋ ์๋ ํ์ผ์ ์์ฒญ๋ฐ์์ ์์ ์ ํด์ผ ํ์ง ์์๊น ์ถ์ต๋๋ค.
* ๊ธฐํ : adb ์ค์น๊ฐ ํ์ํ๋ฉด ํด์ผ ๋ฉ๋๋ค. python ์ค์น ํ selenium ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น๋ ํ์์
๋๋ค. ์ธ์ด๋ nodejs ๋ก๋ ๊ฐ๋ฅํ๊ณ java๋ก๋ ๊ฐ๋ฅํฉ๋๋ค.
* mac์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ง๊ณ ํ ๊ฒฝ์ฐ ์๋๋ก์ด๋ ๊ธฐ๊ธฐ ์ฐ๊ฒฐ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ samsung smart switch ํ๋ก๊ทธ๋จ๋ ์ค์นํด์ผ ํฉ๋๋ค. ( ๋งํฌ : https://www.samsung.com/sec/apps/smart-switch/)
์๋๋ก์ด๋ ์คํ๋์ค๋ฅผ ์ค์นํด์ ์ ๋ฎฌ๋ ์ดํฐ๋ฅผ ๋๋ ค์ ๊ฐ์ ์๋๋ก์ด๋๋ฅผ ํ ์๋ ์์ง๋ง, ์๋ฌด๋๋ ์นด์นด์คํก์ ์ฌ์ฉํด์ผ ํ๋ค ๋ณด๋ ์ ๋ ์ค์ ๊ฐ์ง๊ณ ์๋ ํฐ์์ ํ๋ ๊ฒ ํธ๋ฆฌํ์๋ต๋๋ค.
๋ง๋ณด๊ธฐ ํ๋ฉด
appium GUI Server
์ ๋ง์ ๋ง๊ฒ ๊ตฌํ๋ ๊ฐ๋ฅํ์ง๋ง ์ผ๋จ ์๋ฒ๋ ์ ๊ณตํด์ฃผ๋ ์๋น์ค๋ฅผ ์ด์ฉํ์ต๋๋ค.
appium GUI Inspector
์ฒ์์ ์๋ฒ๋ง ๋ค์ด๋ก๋ํ๊ณ ์ด๋ป๊ฒ ํ ์ง ๋ชฐ๋ผ ์ด๋ ค์ ๋๋ฐ, inspector๊ฐ ํ์ํ ๊ฑธ ์๊ฒ ๋ผ์ ๋ค์ด๋ก๋ํ์ฌ ์ฌ์ฉ๋ฒ์ ๊ฐ ์ก๊ฒ ๋์์ต๋๋ค. ๋ค์ด๋ก๋ํ๋ฉด ๋๊ฒ ๊ฐ๋จํ ์์ฉํ๋ก๊ทธ๋จ์ ๋๋ค. ์ด๋ ๊ฒ ํ์ํ ์ค์ ๊ฐ์ ์ ๋ ฅํ๋ฉด json ํ์ผ๋ก ๊ตฌ์ฑ๋๊ณ start session ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋๋ฐ์ด์ค์ ์๋ฒ๊ฐ ์ฐ๊ฒฐ๋์ด ํ ์คํธํ ์ฑ์ ์คํํ ์ ์์ต๋๋ค.
์คํ์ ํ๋ฉด ์๋์ ๊ฐ์ด ๋ชจ๋ฐ์ผ ์ฑ์ UI xpath ๊ฐ์ ์ ์ ์์ต๋๋ค.
์๋๋ก์ด๋ ์คํ๋์ค
์๋๋ก์ด๋ ์คํ๋์ค๋ฅผ ์ค์นํ๋ฉด ์๋์ ๊ฐ์ด ๊ฐ์ ์ ๋ฎฌ๋์ดํฐ(๊ฐ์ ํฐ)๋ฅผ ์ค์นํ์ฌ ์คํํ ์ ์์ต๋๋ค. ์๋๋ก์ด๋ ์๋ ๊ฒฝ์ฐ์๋ ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ์ข๊ธฐ๋ ํ๋ฐ, ๋ฉ๋ชจ๋ฆฌ ๋ง์ด ์ก์๋จน์ด์ ์กฐ๊ธ ์ฌ์ ์ข์ ์ปดํจํฐ์์ ์ฌ์ฉํ์๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
ADB๋ก ์ฑ ์ ๋ณด ํ์ธํ๊ธฐ
adb ์ค์น ํ ์๋ฒ๋ฅผ ์คํ์์ผ์ ๊ฐ๋จํ ๋ช ๋ น์ด๋ก ์ฌ์ฉํ๋ ์ฑ์ ํจํค์ง ๋ช ๊ณผ MainActivity ์ด๋ฆ์ ๊ฐ์ง๊ณ ์ฌ ์ ์๋ค.
1. ํจํค์ง๋ช : adb shell pm list packages -f ๋ช ๋ น์ด ์ ๋ ฅ -> ์ฐพ์ผ๋ ค๋ ์ฑ ๋ช ๊ฒ์
2.๋ฉ์ธ Activity๋ช : adb shell pm dump ํจํค์ง๋ช ๋ช ๋ น์ด ์ ๋ ฅ -> android.intent.action.MAIN ๊ฒ์
๋ง๋ณด๊ธฐ ์์
์ค์ ๋๋ฐ์ด์ค์์ ๊ตฌ๋ํ ๊ฒ์ ๋ณด์ฌ๋๋ฆฌ๋ ค๊ณ ํฉ๋๋ค. ์กฐ๊ธ ํ๋ฆฟํ๊ฒ ์ดฌ์ํ์ต๋๋ค. ํธ๋ํฐ์ ๋น์น ์ ๋ชจ์ต์ด ์กฐ๊ธ ์ฐฝํผํ๊ตฐ์. ์ด๋ ๊ฒ ์๋ฒ๋ฅผ ๋์๋๊ณ python์ ๊ฐ๋จํ ์ฝ๋ ์ ๋ ฅ ํ ๋๋ฒ๊น ์ ํ๋ฉด ์นด์นด์คํก์ด ์ด๋ฆฐ๋ต๋๋ค. ์น์์ key ์ด๋ฒคํธ๋ฅผ ์ค์ ๋์ํ๊ฒ ํ๋ฉด, ๋ชจ๋ฐ์ผ์์๋ ํธ๋ฆฌํ๊ฒ ์๋ํํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ด์ผ๋ถํฐ๋ ์๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ์งค ์์ ์ ๋๋ค
๋ค์ ๊ธ์์๋ appium ์ด๊ธฐ ์ค์ ๋ฐฉ๋ฒ์ด๋ ๋์์ ํ์ํ value์ ๋ํด ์ฐจ๊ทผ์ฐจ๊ทผ ์ฝํ
์ธ ๋ฅผ ์์ฑํ๋๋ก ํ๊ฒ ์ต๋๋ค. ์นด๋ทฐ๊ฐ ์น์์ ์ง์ ์ข
๋ฃ๊ฐ ๋์ด ์์ฌ์ ๋๋ฐ, ๋น ๋ฅธ ์์ผ ๋ด์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์์ ๋งค์ฐ ๊ธฐ๋ถ์ด ์ข์์ต๋๋ค.
Appium ์ค์ ๊ฐ์ด๋ ์์
Appium ์ด๊ธฐ ์ค์ ๊ฐ์ด๋ ์์์
๋๋ค. ์์ผ๋ก ๋ ์ข์ ์ฝํ
์ธ ๋ก ์ฐพ์์ค๊ฒ ์ต๋๋ค. ์ ํ๋ธ ๊ตฌ๋
์ข์์ ์ค์ ๋ถํ๋๋ ค์.
๋๊ธ