如何在python bdd场景中使用“actor”?

时间:2018-03-19 14:39:14

标签: python bdd actor python-behave

我想为我的bbd场景创建“actor”,有没有简单的方法在使用behave用Python编写的测试中使用“actors”?我发现Pykka是一个演员模型的Python实现,但我如何连接Pykka?

1 个答案:

答案 0 :(得分:0)

我建议使用Python的Thespian actor而不是Pykka,以获得更完整和功能更全面的实现(http://thespianpy.com,免责声明:我是该软件包的作者)。

使用Thespian,您可以进行如下测试:

Scenario something
   Given a running actor system
     ...
    Then it completes successfully

在您的实施中

@given('a running actor system')
def step_impl(context):
    ActorSystem('simpleSystemBase')

@then('it completes successfully')
def step_impl(context):
    asys = ActorSystem()
    asys.createActor(TestActor)
    response = asys.ask(testActor, 'test data', 5)
    assert response == 'data is valid'

class TestActor(Actor):
    def receieveMessage(self, msg, sender):
        if msg == 'test data':
            self.send(sender, 'data is valid')

    def after_all(context):
        ActorSystem().shutdown()

这将允许单个测试访问actor,您还可以使用其他actor系统库增加并行性:

@given('a running multi-process actor system')
def step_impl(context):
    ActorSystem('multiprocTCPBase')

不幸的是,基于对行为的快速回顾,核心运行器不可扩展,因此行为本身可能会连续运行您的测试;如果有一种方法可以在一个单独的actor中运行每个测试,这将进一步增加并发性,超出当前支持的行为。