끊임없이 작동하는 테스터(소프트웨어와 하드웨어의 만남)
Making Automation Tester who never be tired. - KimKitae
절대 지치지 않는 테스터 만들기
백엔드에서는 매일 두 번 이상 배포를 진행하며, 배포마다 주문부터 결제 완료까지의 모든 결제 수단을 확인해야 합니다. 각 PG사에서 제공하는 화면의 가상 키보드는 암호화되어 있고, 매 화면 랜딩 시마다 숫자 배열이 랜덤으로 바뀝니다. 화면 캡처 보호 기능이 적용된 경우, 일반적인 캡처 시 해당 영역이 검은색으로만 표시됩니다. 따라서, GPU가 화면에 그리기 위해 메모리에 저장한 정보를 추출해야 합니다.
이때 테스트 프레임워크는 높은 CPU와 메모리 자원을 소비합니다. (우리 시스템은 3GHz 8코어 Intel XeonE5, 64GB 메모리를 사용합니다) 시스템 모니터링에서 CPU 90% 이상, 메모리 200GB(Swap) 사용량을 확인 할 수 있었고, 리소스 사용을 분배하여 최소화하기 위해 추가적인 하드웨어로 각자의 업무를 주어 API통신으로 동작하도록 해봅니다.
구현해보기
알리익스프레스에서 판매하는 XY 플로터 기성제품(아두이노 및 커스터마이징 가능한 제품)을 구매하고, 아두이노 또는 라즈베리파이에 카메라 모듈을 연결합니다.
Appium으로 앱 실행 및 오브젝트 확인:
- Appium을 사용하여 앱을 실행하고, 특정 오브젝트가 있는지 확인합니다.
라즈베리파이에서 카메라를 이용해 화면 확인:
- 라즈베리파이에 연결된 카메라를 이용하여 실시간으로 화면을 캡처하고, 오브젝트를 식별합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from flask import Flask, request, jsonify
import serial
import time
app = Flask(__name__)
# 시리얼 포트 설정
ser = serial.Serial('/dev/ttyUSB0', 9600)
@app.route('/click', methods=['POST'])
def click():
data = request.get_json()
x = data['x']
y = data['y']
# 좌표를 아두이노로 전송
ser.write(f"{x},{y}\n".encode())
# 로봇팔이 동작을 완료할 때까지 대기
time.sleep(2) # 로봇팔이 동작하는 데 걸리는 시간 (필요에 따라 조정)
return jsonify({"status": "clicked"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
아두이노 로봇팔로 좌표 전달:
- 라즈베리파이가 식별한 오브젝트의 좌표를 아두이노 로봇팔로 전달합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <Servo.h>
Servo servoX;
Servo servoY;
void setup() {
Serial.begin(9600);
servoX.attach(9); // X 축 서보 핀
servoY.attach(10); // Y 축 서보 핀
}
void loop() {
if (Serial.available() > 0) {
String coords = Serial.readStringUntil('\n');
int commaIndex = coords.indexOf(',');
int x = coords.substring(0, commaIndex).toInt();
int y = coords.substring(commaIndex + 1).toInt();
// 좌표에 따라 서보 위치 설정
servoX.write(x);
servoY.write(y);
// 클릭 동작 (예: 서보를 특정 위치로 이동 후 원위치)
delay(500); // 클릭 유지 시간
servoX.write(90); // 원위치로 복귀
servoY.write(90); // 원위치로 복귀
}
}
로봇팔로 오브젝트 클릭:
- 아두이노 로봇팔이 전달받은 좌표를 따라 움직여 오브젝트를 클릭합니다.
Appium에서 클릭 확인:
- Appium을 통해 오브젝트가 정상적으로 클릭되었는지 확인합니다.
이와 같이 하드웨어만 만들어놓고 소프트웨어 구현을 마무리하지는 못했지만, 시간이 된다면 마무리하고 싶습니다. 또한, 단말의 다양한 사이즈에 사용할 수 있는 크기의 XY 플로터를 만들어 1개의 단말에 1개의 플로터를 연결하여 24/7 내내 각 BDD 형태로 시나리오를 계속 동작하게 하고자 합니다. (주로 비즈니스 로직 동작 여부를 체크)
관심이 있거나, 혹시 이런 프로젝트를 진행하고 계신 분들은 언제든지 많은 조언 부탁드립니다. 같이 한 번 완성해보아요!