0

現在、LoadRunnerシナリオを作成し、テストを実行し、結果を収集し、環境を回復し、さまざまなシナリオ変数を使用してサイクルを繰り返すPerlスクリプトを作成しています。

新しいシナリオの作成、ジェネレーターの追加、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
4

1 に答える 1

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);
于 2012-01-05T20:01:44.513 に答える