2017-12-26 12 views
2

테스트 목적으로 Perl 6에서 텍스트 터미널 인터페이스를 노출시키는 명령 줄 프로그램과의 상호 작용을 자동화하는 방법은 무엇입니까?Perl 6 : 터미널 기반 프로그램의 자동화 된 테스트

+0

프로그램 콘솔 프로그램을 테스트하기 위해 Perl 6을 사용한다는 것을 의미합니까? – piojo

+1

사용자 상호 작용이있는 메소드를 제공하는 Perl 6 모듈을 테스트 ('use test')합니다. –

답변

5

콘솔 응용 프로그램의 실행 또는 테스트를 자동화하기 위해 Perl 6을 사용하려면 NativeCall을 사용하여 expect 라이브러리와 상호 작용할 것입니다. expect가 설치되면 설명서에 액세스하는 방법 (예 : 맨 페이지 이름)이 패키지 배포마다 다를 수 있지만 man libexpect에 API 설명서가 표시됩니다.

Expect에는 프로그램을 시작하고 (에뮬레이트 된) 콘솔에 텍스트가 표시 될 때까지 기다렸다가 (텍스트를 "예상"하기 위해) 콘솔에 텍스트를 보낼 때까지 기다리는 API가 있습니다 (입력을 에뮬레이션하기 위해). 가장 일반적인 사용 사례는 암호 입력이 필요한 프로그램을 자동화하는 것입니다. Expect는 종종 인터프리터 인 스크립트로 작성되었지만 더 높은 수준의 프로그래밍 언어에서는 사용하지 않을 이유가 없습니다.

편집 : 다소 잘못된 질문에 답변했습니다. OP는 Perl 6 모듈을 Perl 6로 테스트하는 데 관심이 있습니다. 즉,이 모듈을 사용하는 두 번째 Perl 6 인터프리터를 시작할 수 있다는 기대는 여전히 가장 강력하고 엄격한 응용 프로그램 테스트 방법입니다. expect가 거의 모든 모듈과 호환되어야하기 때문에 모듈이 사용하는 터미널 라이브러리의 유형을 알 필요가 없습니다. 하위 프로세스의 STDIN 파이프로 텍스트를 전송할 수는 있지만 기대했던 것에서 얻을 수있는 하위 프로세스 (콘솔) 통신만큼 강력하지는 않습니다. 모듈이 사용하는 터미널 라이브러리를 도용하여 직접 사용하는 방법이 있는지 모르겠습니다.

+0

@raiph 콘솔 응용 프로그램을 구동하는 데 주로 사용되는 자동화 도구입니다. 그러나 당신이 그런 식으로 사용하기를 원한다면 테스트를 위해서도 도움이 될 것입니다. – piojo

1

일반 인터페이스 인 경우 프로그램을 run 개만 입력하면 출력을 수집 할 수 있습니다. 현재 실험중인 Testo module의 루틴은 is-run입니다. 직접 사용하거나 실험 상태가 불편한 경우 guts of it을 자신의 도우미 루틴으로 복사하십시오.

관련 문제