2012-11-22 2 views
1

정기적으로 iPhone UI 자동화 테스트를 실행하도록 Jenkins를 설정했습니다.Perl이 Jenkins에서 작동하지 않는다고 보냅니 까?

자동화를위한 첫 번째 테스트 스크립트가 실행되면 보안상의 이유로 OS X은 사용자 이름과 암호를 묻는 메시지를 표시합니다.

그래서 Expect에서 명령을 생성하고 사용자 이름과 암호를 보내는 perl 스크립트를 만들었습니다.

어떤 이유로 사용자 이름이 전송되지만 암호는 전송되지 않습니다.

암호가 전송되지만 내 명령이 시간 초과됩니다. 아래

코드 :

my $cmdString = "instruments -t $traceTemplatePath $AppFolder -e UIASCRIPT $escapedTest " . 
    "-e UIARESULTSPATH Logs"; 
if ($isFirst == 1) { 

    $isFirst = 0; 

    $password = `cat /Users/\$USER/.password`; 

    # Actually spawn the command from Expect. 
    my $exp = Expect->spawn($cmdString) 
     or die "Failed to spawn command in Expect: $! \n"; 
    #change delay if necessary 
    $exp->expect(30, [qr/Name .*/]); 
    $exp->send("\n"); 

    $exp->expect(undef, [qr/Password/]); 
    $exp->send("$password\n"); 
} 

내가 뭘 원하는가 테스트 스크립트를 실행되도록 밖으로 내 명령 시간 전에 암호를 보낼 수 있습니다.

+0

은'어떤 수에 undef'에서 두 번째 마지막 줄을 변경해보십시오. –

+0

나는 이미 undef 대신 30, 60, 120을 시도했지만 여전히 패스워드를 보내지 않는다. – stackErr

+1

'$ exp-> expect ($ timeout, [qr/username :/i, sub {my $ self = shift; $ self-> send ("$ username \ n"), exp_continue;}], [qr/password :/i, sub {my $ self = shift; $ self-> send ("$ password \ n"); exp_continue;}], $ shell_prompt);'질의를 결합하고'exp_continue'를 사용하십시오. –

답변

0

봅니다 쿼리를 결합으로 exp_continue 사용 :

$exp->expect($timeout, 
      [ qr/username: /i, sub { my $self = shift; 
             $self->send("$username\n"); 
             exp_continue; }], 
      [ qr/password: /i, sub { my $self = shift; 
             $self->send("$password\n"); 
             exp_continue; }], 
      $shell_prompt); 
관련 문제