如何处理异步 request/response 作为 Gitlab CI/CD 测试的一部分
How to handle an asynchronous request/response as part of a Gitlab CI/CD test
我希望从 Jenkins 迁移到 GitLab CI/CD。我们目前使用 Jenkins 的 BlazeMeter 插件对 Blazemeter 进行 运行 GUI 功能测试,作为 Jenkins 工作的一部分。
不幸的是,BlazeMeter 没有 GitLab 的插件,但他们有一个简单的 JSON API 来开始测试。
因为测试可能很长-运行Blazemeter API 是异步的。一个 cUrl 端点用于启动测试,另一个用于轮询和获取结果(传递在第一次调用中返回的 ID)。
作为 GitLab CI 管道作业的一部分处理此异步过程的最佳方法是什么?示例 gitlab yaml 是什么?
general solution是使用shell/cmd脚本来管理gitlab的循环-ci.
build:
stage: runBlazeMeter
script:
- echo "START test run"
echo "use curl to initiate test"
COUNT=0
while
COUNT=$((COUNT + 1))
echo "use curl to query test completion"
RES=$(curl --silent https://jsonplaceholder.typicode.com/users/${COUNT} | wc -c)
[ $RES -gt 3 ]
do :; done
echo "END test run"
GitLab 具有 webhook 或管道触发器功能,您可以从任何地方调用它。 blazemeter 也有通过 webhooks 的通知。通过结合这两者将解决您的问题 而无需长时间 运行 一项工作 直到测试完成。
test-trigger:
stage: test
script:
- # curl command to invoke test
except:
- triggers
test-completion:
stage: test
script:
- # reporting script
only:
- triggers
以下资源将帮助您入门。
您可以使用两个阶段来实现这一点,方法是使用工件将 ID 从一个阶段复制到下一个阶段
start-test:
stage: test
artifacts:
untracked: true
script:
- curl http://run/the/test > testid.json
test:
stage: test
dependencies:
- start-test
script:
- TESTID=`cat testid.json`
while
sleep 1000
RES=$(curl https://test/status/${TESTID} | grep "COMPLETE")
[ $RES -gt 0 ]
do :; done
echo "TEST COMPLETE"
我希望从 Jenkins 迁移到 GitLab CI/CD。我们目前使用 Jenkins 的 BlazeMeter 插件对 Blazemeter 进行 运行 GUI 功能测试,作为 Jenkins 工作的一部分。
不幸的是,BlazeMeter 没有 GitLab 的插件,但他们有一个简单的 JSON API 来开始测试。
因为测试可能很长-运行Blazemeter API 是异步的。一个 cUrl 端点用于启动测试,另一个用于轮询和获取结果(传递在第一次调用中返回的 ID)。
作为 GitLab CI 管道作业的一部分处理此异步过程的最佳方法是什么?示例 gitlab yaml 是什么?
general solution是使用shell/cmd脚本来管理gitlab的循环-ci.
build:
stage: runBlazeMeter
script:
- echo "START test run"
echo "use curl to initiate test"
COUNT=0
while
COUNT=$((COUNT + 1))
echo "use curl to query test completion"
RES=$(curl --silent https://jsonplaceholder.typicode.com/users/${COUNT} | wc -c)
[ $RES -gt 3 ]
do :; done
echo "END test run"
GitLab 具有 webhook 或管道触发器功能,您可以从任何地方调用它。 blazemeter 也有通过 webhooks 的通知。通过结合这两者将解决您的问题 而无需长时间 运行 一项工作 直到测试完成。
test-trigger:
stage: test
script:
- # curl command to invoke test
except:
- triggers
test-completion:
stage: test
script:
- # reporting script
only:
- triggers
以下资源将帮助您入门。
您可以使用两个阶段来实现这一点,方法是使用工件将 ID 从一个阶段复制到下一个阶段
start-test:
stage: test
artifacts:
untracked: true
script:
- curl http://run/the/test > testid.json
test:
stage: test
dependencies:
- start-test
script:
- TESTID=`cat testid.json`
while
sleep 1000
RES=$(curl https://test/status/${TESTID} | grep "COMPLETE")
[ $RES -gt 0 ]
do :; done
echo "TEST COMPLETE"