有没有人有LoadRunner Automation API的工作脚本?

时间:2011-09-28 07:10:15

标签: perl loadrunner

目前我正在编写Perl脚本,用于创建LoadRunner场景,执行测试,收集结果,恢复环境并使用不同的场景变量重复循环。

创建新方案,添加生成器,添加2组+脚本+运行时设置时没有问题。但是我遇到了问题:

  1. 将场景时间表从“场景”设置为“组”。
  2. 每组设定时间表
  3. 这段代码:

    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 个答案:

答案 0 :(得分:1)

我有同样的问题。设置这些属性然后调用setschedulemode或setcurrentschedule似乎不起作用。我发现的唯一解决方法是使用传入xml的setscheduledata方法。您需要获取scheduledata的当前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);