[Spec] Spec class-based-scenarios.rst is implemented
Change-Id: If50cc5a341029b72ff92eeac41b1fc4559c6974b
This commit is contained in:
parent
011fbbe813
commit
f9b55363a4
113
doc/specs/implemented/class-based-scenarios.rst
Normal file
113
doc/specs/implemented/class-based-scenarios.rst
Normal file
@ -0,0 +1,113 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
..
|
||||
This template should be in ReSTructured text. The filename in the git
|
||||
repository should match the launchpad URL, for example a URL of
|
||||
https://blueprints.launchpad.net/heat/+spec/awesome-thing should be named
|
||||
awesome-thing.rst . Please do not delete any of the sections in this
|
||||
template. If you have nothing to say for a whole section, just write: None
|
||||
For help with syntax, see http://sphinx-doc.org/rest.html
|
||||
To test out your formatting, see http://www.tele3.cz/jbar/rest/rest.html
|
||||
|
||||
|
||||
===================================
|
||||
Class-based Scenario Implementation
|
||||
===================================
|
||||
|
||||
Introduce scenarios implementation as classes, not methods.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Current scenario implementation transforms method to class at runtime,
|
||||
so this overcomplicates the code.
|
||||
|
||||
Method-based extensions mechanism is not a common practice in frameworks,
|
||||
so this is a bit confusing.
|
||||
|
||||
Most Rally plugins like Context, SLA, Runner, OutputChart (except Scenario)
|
||||
are implemented as classes, not methods.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
Add an ability to implement scenarios as classes, keeping full backward
|
||||
compatibility with existing code.
|
||||
|
||||
This means that class represents single scenario which is actually implemented
|
||||
in method *Scenario.run()*.
|
||||
|
||||
So input task can contain scenario names that does not have method part
|
||||
splitted by dot from class part.
|
||||
|
||||
For example, here we have two scenarios, first one is in old manner
|
||||
and another is class-based:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
{
|
||||
"Dummy.dummy": [
|
||||
{
|
||||
"runner": {
|
||||
"type": "serial",
|
||||
"times": 20
|
||||
}
|
||||
}
|
||||
],
|
||||
"another_dummy_scenario": [
|
||||
{
|
||||
"runner": {
|
||||
"type": "serial",
|
||||
"times": 20
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Class AnotherDummyScenario should have method run():
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from rally.task import scenario
|
||||
|
||||
@scenario.configure(name="another_dummy_scenario")
|
||||
class AnotherDummyScenario(scenario.Scenario):
|
||||
|
||||
def run(self):
|
||||
"""Scenario implementation."""
|
||||
|
||||
Modules *rally.task.engine* and *rally.task.processing* should be modified to
|
||||
make them working with class-based scenarios.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
None
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
|
||||
Alexander Maretskiy <amaretskiy@mirantis.com>
|
||||
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
- Update task.engine and task.processing for class-based scenarios
|
||||
- Transform all Dummy scenarios into class-based implementations as first
|
||||
stage of usage class-based scenarios.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
Loading…
Reference in New Issue
Block a user