我正在尝试为烧瓶应用程序设置验收测试工具,我正在努力等待应用程序在拨打电话之前启动。
以下构造工作正常:
class SpinUpTests(unittest.TestCase):
def tearDown(self):
super().tearDown()
self.stubby_server.kill()
self.stubby_server.communicate()
def test_given_not_yet_running_when_created_without_config_then_started_on_default_port(self):
self.not_yet_running(5000)
self.stubby_server = subprocess.Popen(['python', '../../app/StubbyServer.py'], stdout=subprocess.PIPE)
time.sleep(1)#<--- I would like to get rid of this
self.then_started_on_port(5000)
我想在stdout上等待:
self.stubby_server = subprocess.Popen([&#39; python&#39;,&#39; ../../ app / StubbyServer.py&#39;],stdout = subprocess.PIPE) time.sleep(1)#&lt; ---我想摆脱这个
- 在http://127.0.0.1:[port]/上运行(按CTRL + C退出)
我试过
for line in self.stubby_server.stdout.readline()
但是readline()
永远不会结束,所以我已经在测试输出窗口中看到了输出。
我是否可以等待烧瓶应用程序启动而无需使用明确的sleep()
?
答案 0 :(得分:1)
使用retry包,这有助于解决您的问题。最后,您设置您想要再次尝试的,您想要重试的异常,并且您可以根据您想要重试的方式设置特定的时序参数。它记录得非常好。
以下是我在here
工作的其中一个项目中解决此问题的示例以下是可以帮助您的代码片段,以防链接不起作用:
@classmethod
def _start_app_locally(cls):
subprocess.Popen(["fake-ubersmith"])
retry_call(
requests.get,
fargs=["{}/status".format(cls.endpoint)],
exceptions=RequestException,
delay=1
)
正如您所看到的,我只是尝试使用get
使用requests
来点击我的端点(fargs
是传递给requests.get
的参数,因为您可以看到它调用返回传递给retry_call
的方法,并根据我期待的RequestException
,我会以1秒的延迟重试。
最后,&#34;假 - 超级匠&#34;是运行服务器的命令,最终是您的命令:'python', '../../app/StubbyServer.py'