在为CodeBuild编写Python Boto3单元测试时,是否可以先start_build()然后再等待()完成构建,然后再评估我的测试是否通过?通常,我只使用一个服务员,但据我所知,CodeBuild没有任何服务员(我做了client.waiter_names并有一个空错误,并且Boto3文档没有列出CodeBuild客户端的任何服务员)。
我找到了this (duplicate) question,但是答案并没有解决如何真正解决等待问题-它只是说明了如何检查构建状态。如果我能以某种方式wait()直到状态更改为某个值,那将很有用。
答案 0 :(得分:1)
我最终没能找到一个好的解决方案,所以我做了一个循环,将轮询状态直到完成。
client = boto3.client(service_name='codebuild', region_name='us-east-1')
new_build = client.start_build(projectName='fooProject')
buildId = new_build['build']['id']
buildSucceeded = False
counter = 0
while counter < 10: #capped this, so it just fails if it takes too long
time.sleep(5)
counter = counter + 1
theBuild = client.batch_get_builds(ids=[buildId])
buildStatus = theBuild['builds'][0]['buildStatus']
if buildStatus == 'SUCCEEDED':
buildSucceeded = True
break
elif buildStatus == 'FAILED' or buildStatus == 'FAULT' or buildStatus == 'STOPPED' or buildStatus == 'TIMED_OUT':
break
self.assertTrue(buildSucceeded)