쉘 스크립트를 사용하여 테스트

쉘 스크립트를 사용하여 테스트

내 프로그램을 테스트하기 위해 쉘 스크립트를 작성하려고 합니다. 이에 대해 몇 가지 기본적인 질문이 있습니다.

  • 목표: 쉘 스크립트는 특정 프로그램을 테스트하고 해당 프로그램이 테스트에 통과하는지 실패하는지 확인할 수 있어야 합니다.

  • 내 접근 방식: 여기서 우리는 두 가지, 즉 프로그램의 입력과 그에 따른 프로그램의 출력을 처리해야 합니다. 이를 위해 mytest.in 및 mytest.out과 같은 I/O 테스트 파일이 있고 이를 테스트에 사용한다고 가정해 보겠습니다.

  • 질문: 내 장애물은 - mytest.in을 프로그램(예: program.c)에 어떻게 전달합니까? 즉, 이 경우 입력 리디렉션을 어떻게 수행할 수 있습니까? 이 작업이 완료되면 어떻게 출력을 얻고 이를 mytest.out의 출력과 비교합니까?

노트:

-> 파일에 제공된 입력은 프로그램이 명령줄을 통해 매개변수를 얻지 못한다고 가정하고 stdin을 통해 제공됩니다.

-> 다음과 같이 쉘 스크립트를 사용한다고 가정합니다.

./testscript tests folder program

이를 증명할 수 있는 예를 들어주시면 좋을 것 같습니다.

답변1

프로그램에 특정 입력이 있습니다.

  • 명령줄( "${inputArgs[@]}")
  • 표준 입력
  • (+가능: 암시적 입력 파일, 시스템 상태)

그리고 일부 출력

  • 반품 상태( $?)
  • 표준 출력
  • 표준 에러
  • (+가능: 암시적 출력 파일, 시스템 상태 변경)

괄호로 묶인 입력 및 출력은 체계적으로 테스트하기가 어렵습니다. 이를 피할 수 있다면 테스트 스위트는 기본적으로 다음을 수행해야 합니다(문자 그대로는 아님).

./program "${inputArgs[@]}" < stdin.txt > stdout.txt 2>stderr.txt; status=$?

if [ "$status" -eq "$expectedStatus" ] && cmp stdout.txt expectedStdout.txt && cmp stderr.txt expectedStderr.txt; then 
    echo OK
else
    [ ! $status -eq $expectedStatus ] && echo "Status $status != $expectedSattus" 
    diff stdout.txt expectedStdout.txt
    diff stderr.txt expectedStderr.txt
fi

관련 정보