Louie NRT Story

[안드로이드] UI 테스트 - 02 본문

전기차충전기

[안드로이드] UI 테스트 - 02

hyeok0724.kim@gmail.com 2021. 8. 18. 09:53
반응형

작성일: 21년 8월 18일

PS. 개발중인 제품에 사용자가 터치할 수 있는 디스플레이 임베디드 보드가 "안드로이드"로 운영되고 있음.

     제품의 품질 향상을 위해 UI 어플이 정상 동작하는지 테스트 하고자 함.

 

 

Index

1. 파이썬 설치

2. 파이썬 라이브러리 설치

3. 화면 터치 좌표

4. 코드 설명

5. 동작 수행

 

 

1. 파이썬 설치

- 파이썬 공식 홈페이지에서 운영체제에 맞추어 다운로드함

※ 필자의 경우  windows 64bit 를 다운로드함. 저번에 windows 32bit 설치 했더니 라이브러리 사용할때 제약사항이 있었음.

https://www.python.org/downloads/windows/

- 설치파일 다운로드 후 설치 할 때 CMD 창에서 바로 "python" 명령어를 사용하기 위해선 환경설정을 해야 하는데

아래 내용을 체크 해주어야 자동으로 해줌

 

 

2. 파이썬 라이브러리 설치

 - 파이썬에서 안드로이드를 제어하는 구조로는 pure-python-adb가 위의 adb command 처럼 adb server에 접속하여 명령어를 전달함

 

- 코드에서 adb 명령어를 사용하기 위해 라이브러리 설치

python -m pip install pure-python-adb

 

 

3. 화면 터치 좌표

- 터치 좌표를 알고하는 화면을 캡쳐함

- 캡쳐 명령어

screencap -p /sdcard/Download/scan_01.png

 

- 캡쳐된 화면을 "그림판"으로 띄운 후 알고자 하는 좌표 위에 마우스를 가져다 놓으면 좌표값을 알 수 있음. ㅋ

 

 

4. 코드 설명

1) 매크로

 - 단순하게 해당 좌표를 누르면서 진행하며 제대로 동작했는지 화면을 한번 캡쳐함

import time
from ppadb.client import Client as AdbClient

def connect():
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037
    devices = client.devices()

    if len(devices) == 0:
        print('No devices')
        quit()

    device = devices[0]
    print(f'Connected to {device}')
    return device, client


if __name__ == '__main__':
    device, client = connect()

    pst_init = '512 315'

    pst_chrgr_type = '724 359'
    pst_full_chrgr = '851 355'
    pst_member = '285 363'
    pst_terminate_chrgr = '843 474'
    pst_terminate_chck = '701 395'

    pst_skip_card_tag = '895 476'

    while True:
        print('Start Charger')

        device.shell(f'input tap {pst_init}')
        time.sleep(3)

        device.shell(f'input tap {pst_chrgr_type}')
        time.sleep(3)

        device.shell(f'input tap {pst_full_chrgr}')
        time.sleep(3)

        device.shell(f'input tap {pst_member}')
        time.sleep(15)

        #device.shell(f'input tap {pst_skip_card_tag}')
        #time.sleep(10)

        now = time.localtime()
        scan_name = "scan_%s-%s_%s:%s" %(now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min)
        device.shell(f'screencap -p /sdcard/Download/scan_{scan_name}.png')
        print('Saved screenshot!')
        time.sleep(3)

        device.shell(f'input tap {pst_terminate_chrgr}')
        time.sleep(3)

        device.shell(f'input tap {pst_terminate_chck}')
        print('Terminate Charger')
        time.sleep(20)

 

2) 안드로이드 리소스 저장

 - 60초 주기로 해당 프로세스의 CPU와 Memory를 확인하고자 로그를 찍도록 함

import time
from ppadb.client import Client as AdbClient

def connect():
    client = AdbClient(host="127.0.0.1", port=5037) # Default is "127.0.0.1" and 5037
    devices = client.devices()

    if len(devices) == 0:
        print('No devices')
        quit()

    device = devices[0]
    print(f'Connected to {device}')
    return device, client


if __name__ == '__main__':
    device, client = connect()

    while True:
        print('Logging Start')

        device.shell(f'ps -p $(pidof com.speel.SerialTester) -o etime,NAME,%CPU,%MEM >> /sdcard/Download/res_log.txt')
        time.sleep(60)

※ 리소스 참고 명령어

 - ps -ef | grep com.speel.SerialTester | grep -v grep

 - top -H -p $(ps -ef | grep com.speel.SerialTester | grep -v grep)

 

5. 동작 수행

- 충전기 자동화 충전 테스트

 

- 로그 결과

 

 

Referece:

https://ichi.pro/ko/python-eulo-android-gigileul-jeeohaneun-bangbeob-76706691277408

 

Python으로 Android 기기를 제어하는 ​​방법

소개 얼마 전에 친구들에게 몇 분 동안 메시지를 스팸으로 보내서 짜증을 낼 수있는 방법을 생각하고 있었는데, 조사를하다가 Android 디버그 브리지를 발견했습니다. 이 빠른 가이드에서는 Python

ichi.pro

https://github.com/LouieKim/android_ui_autotest

 

GitHub - LouieKim/android_ui_autotest: Android Display Automatic Test Tool

Android Display Automatic Test Tool. Contribute to LouieKim/android_ui_autotest development by creating an account on GitHub.

github.com

https://pypi.org/project/pure-python-adb/

 

pure-python-adb

Pure python implementation of the adb client

pypi.org

 

반응형
Comments