2011-09-28 3 views
0

현재 LoadRunner 시나리오를 생성하고, 테스트를 실행하고, 결과를 수집하고, 환경을 복구하고, 다른 시나리오 변수를 사용하여 사이클을 다시 반복하는 Perl 스크립트를 작성하고 있습니다.LoadRunner Automation API의 작업 스크립트가 있습니까?

새로운 시나리오를 생성하고, 생성기를 추가하고, 2 개의 그룹 + 스크립트 + 런타임 설정을 추가하는 데 문제가 없습니다. 하지만 문제가 있습니다 :

  1. "시나리오"에서 "그룹"으로 시나리오 일정을 설정합니다. 그룹

이 코드의 조각 당

  • 설정 일정 :

    use strict; 
    use v5.10; 
    use Win32::OLE; 
    use Win32::OLE::Enum; 
    use Win32::OLE::Variant; 
    use Data::Dumper; 
    use Win32::OLE::Const 'LoadRunner Automation Library'; 
    use constant False => Variant(VT_BOOL,''); 
    use constant True => Variant(VT_BOOL,1); 
    
    my $lrEngine = Win32::OLE->new('wlrun.LrEngine') or die "oops\n"; 
    my $lrScenario = $lrEngine->Scenario(); 
    my $rc = $lrScenario->new(0, 1); # do not save previous, Regular vusers based scenario 
    if ($rc != 0) { 
        print "Win32::OLE::LastError: ".Win32::OLE::LastError()."\n"; 
        print "lrScenario->new(0, 1):rc: $rc\n"; 
    } 
    # snip-snipped - add generator 
    # snip-snipped - add @groups definition 
    foreach my $group (@groups) { 
        print "scriptName: $group->{scriptName}\n"; 
        my $scriptLocation = $group->{scriptLocation}; 
        my $scriptName = Variant(VT_BSTR|VT_BYREF, $group->{scriptName}); 
    
        { # add $group->{scriptName} script 
         $rc = $lrScenario->Scripts->Add($scriptLocation, $scriptName); 
         if ($rc != 0) { 
          print "Win32::OLE::LastError: ".Win32::OLE::LastError()."\n"; 
          print "lrScenario->Scripts->Add($scriptLocation, $scriptName):rc: $rc\n"; 
         } 
        } 
        ############################################################################# 
        my $groupName = Variant(VT_BSTR|VT_BYREF, $group->{groupName}); 
        { # add $group->{groupName} group 
         $rc = $lrScenario->Groups->Add($groupName); 
         if ($rc != 0) { 
          print "Win32::OLE::LastError: ".Win32::OLE::LastError()."\n"; 
          print "lrScenario->Groups->Add:rc: $rc\n"; 
         } 
         $rc = $lrScenario->Groups->Item($groupName)->AddVusers($scriptName, $hostname, 3); 
         if ($rc != 0) { 
          print "Win32::OLE::LastError: ".Win32::OLE::LastError()."\n"; 
          print "lrScenario->Groups->Item($groupName)->AddVusers:rc: $rc\n"; 
         } 
        } 
        ############################################################################# 
        # snip-snipped - change group script run time setting 
    } 
    
    my $scheduleName = Variant(VT_BSTR|VT_BYREF, 'Schedule123'); 
    my $lrManualScheduleData = $lrScenario->ManualScheduler->AddSchedule($scheduleName, lrGroupSchedule); # Scenario schedule mode 
    if (!$lrManualScheduleData) { 
        say "Win32::OLE::LastError: ".Win32::OLE::LastError(); 
        say "lrScenario->ManualScheduler->AddSchedule:rc: $rc"; 
    } 
    $rc = $lrScenario->ManualScheduler->SetCurrentSchedule($scheduleName); 
    if ($rc != 0) { 
        say "Win32::OLE::LastError: ".Win32::OLE::LastError(); 
        say "lrScenario->ManualScheduler->SetCurrentSchedule:rc: $rc"; 
    } 
    print "\$lrScenario->ManualScheduler->SetScheduleMode($scheduleName, lrGroupSchedule):"; 
    $lrScenario->ManualScheduler->SetScheduleMode($scheduleName, lrGroupSchedule); 
    #LrManualScheduleMode -> lrGroupSchedule = 1, lrScenarioSchedule = 0 
    say "Win32::OLE::LastError: ".Win32::OLE::LastError(); 
    
    $lrManualScheduleData->{'InitAllBeforeRun'} = 'True'; 
    $lrManualScheduleData->{'DurationMode'} = 1; 
    $lrManualScheduleData->{'Duration'} = 60 * 60; 
    $lrManualScheduleData->{'RampupBatchSize'} = 1; 
    $lrManualScheduleData->{'RampupMode'} = lrRampupByGroupBatches; 
    $lrManualScheduleData->{'RampupTimeInterval'} = 5; 
    $lrManualScheduleData->{'RampdownBatchSize'} = 1; 
    $lrManualScheduleData->{'RampdownMode'} = lrRampupByGroupBatches; 
    $lrManualScheduleData->{'RampdownTimeInterval'} = 5; 
    
    $rc = $lrScenario->ManualScheduler->{'ScenarioStartTimeMode'} = 0; # Start scenario without delay 
    
    #test 
    say "$scheduleName: ".$lrScenario->ManualScheduler->Schedule($scheduleName)->{'Duration'}; # returns 300 
    
  • 답변

    1

    나는 같은 문제가 있습니다. 이러한 속성을 설정 한 다음 setschedulemode 또는 setcurrentschedule을 호출해도 작동하지 않는 것 같습니다. 내가 발견 한 유일한 해결 방법은 XML에서 전달하는 setscheduledata 메서드를 사용하는 것입니다. scheduled 데이터에 대한 현재 xml을 가져온 다음 xml을 변경하고 수정 된 xml을 setscheduledata 메소드로 전달해야합니다. 희망적으로 도움이 됨

    lrManualScheduleData data = engine.Scenario.ManualScheduler.get_Schedule("Schedule 1"); 
    
    String scheduleXML,errStr; 
    
    int returncode = data.getScheduleData(out scheduleXML, out errStr); 
    
    // Manipulate the XML to set whatever schedule you want 
    
    data.SetScheduleData(scheduleXML, out errStr);