У кого-нибудь есть рабочий скрипт API автоматизации LoadRunner? - PullRequest
0 голосов
/ 28 сентября 2011

В настоящее время я пишу сценарий Perl, который создает сценарий LoadRunner, выполняет тест, собирает результат, восстанавливает среду и повторяет цикл снова с другими переменными сценария.

У меня нет проблем с созданием новогосценарий, добавление генератора, добавление 2 групп + скрипт + настройки времени выполнения.Но у меня проблема с:

  1. Настройка расписания сценария от "Сценарий" до "Группа".
  2. Настройка расписания для группы

Этофрагмент кода:

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 Ответ

1 голос
/ 06 января 2012

У меня такая же проблема.Установка этих свойств и последующий вызов setchedulemode или setcurrentschedule, похоже, не работают.Единственный обходной путь, который я нашел, - это использование метода setscheduledata, передаваемого в xml.Вам нужно будет получить текущий 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);
...