mirror of
https://github.com/valitydev/yandex-tank.git
synced 2024-11-07 10:49:00 +00:00
fixed instance plans
This commit is contained in:
parent
b311a6732e
commit
3d0e6de745
@ -1,5 +1,4 @@
|
|||||||
from itertools import cycle
|
from itertools import cycle, chain
|
||||||
from load_plan import Composite
|
|
||||||
from util import parse_duration
|
from util import parse_duration
|
||||||
import re
|
import re
|
||||||
|
|
||||||
@ -31,6 +30,34 @@ class Empty(InstanceLP):
|
|||||||
return cycle([0])
|
return cycle([0])
|
||||||
|
|
||||||
|
|
||||||
|
class Composite(InstanceLP):
|
||||||
|
|
||||||
|
'''Load plan with multiple steps'''
|
||||||
|
|
||||||
|
def __init__(self, steps):
|
||||||
|
self.steps = steps
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
base = 0
|
||||||
|
for step in self.steps:
|
||||||
|
for ts in step:
|
||||||
|
yield int(ts + base)
|
||||||
|
base += step.get_duration() * 1000
|
||||||
|
for item in cycle([0]):
|
||||||
|
yield item
|
||||||
|
|
||||||
|
def get_duration(self):
|
||||||
|
'''Return total duration'''
|
||||||
|
return sum(step.get_duration() for step in self.steps)
|
||||||
|
|
||||||
|
def __len__(self):
|
||||||
|
'''Return total ammo count'''
|
||||||
|
return sum(step.__len__() for step in self.steps)
|
||||||
|
|
||||||
|
def get_rps_list(self):
|
||||||
|
return list(chain.from_iterable(step.get_rps_list() for step in self.steps))
|
||||||
|
|
||||||
|
|
||||||
class Line(InstanceLP):
|
class Line(InstanceLP):
|
||||||
|
|
||||||
'''
|
'''
|
||||||
@ -60,7 +87,7 @@ class Ramp(InstanceLP):
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
def __init__(self, instance_count, interval):
|
def __init__(self, instance_count, interval):
|
||||||
self.duration = float(instance_count * interval) * 1000
|
self.duration = float(instance_count * interval)
|
||||||
self.instance_count = instance_count
|
self.instance_count = instance_count
|
||||||
self.interval = float(interval) * 1000
|
self.interval = float(interval) * 1000
|
||||||
|
|
||||||
@ -135,21 +162,20 @@ class StepFactory(object):
|
|||||||
|
|
||||||
def create(instances_schedule):
|
def create(instances_schedule):
|
||||||
'''
|
'''
|
||||||
Generates load plan
|
Creates load plan timestamps generator
|
||||||
|
|
||||||
>>> from itertools import islice
|
>>> from itertools import islice
|
||||||
>>> list(islice(create(['ramp(5, 5s)']), 0, 7))
|
>>> lp = create(['ramp(5, 5s)'])
|
||||||
|
>>> list(islice(lp, 0, 7))
|
||||||
[0, 5000, 10000, 15000, 20000, 0, 0]
|
[0, 5000, 10000, 15000, 20000, 0, 0]
|
||||||
|
|
||||||
>>> list(islice(
|
>>> lp = create(['ramp(5, 5s)', 'wait(5s)', 'ramp(5,5s)'])
|
||||||
... create(['ramp(5, 5s)', 'wait(5s)', 'ramp(5,5s)']),
|
>>> list(islice(lp, 0, 12))
|
||||||
... 0, 12))
|
[0, 5000, 10000, 15000, 20000, 30000, 35000, 40000, 45000, 50000, 0, 0]
|
||||||
[0, 5000, 10000, 15000, 20000, 25000]
|
|
||||||
'''
|
'''
|
||||||
if len(instances_schedule) > 1:
|
if len(instances_schedule) > 1:
|
||||||
steps = [StepFactory.produce(step_config)
|
steps = [StepFactory.produce(step_config)
|
||||||
for step_config in instances_schedule]
|
for step_config in instances_schedule]
|
||||||
else:
|
else:
|
||||||
steps = [StepFactory.produce(instances_schedule[0])]
|
steps = [StepFactory.produce(instances_schedule[0])]
|
||||||
steps.append(Empty())
|
|
||||||
return Composite(steps)
|
return Composite(steps)
|
||||||
|
Loading…
Reference in New Issue
Block a user