如何 运行 Maven / JVM(例如 Appium + Saucelabs / Selenium + Browserstack)在 Bitrise 上测试自动化
How to run Maven / JVM (e.g. Appium + Saucelabs / Selenium + Browserstack) Test Automation on Bitrise
是否可以 运行 Java 基于 Bitrise CI/CD 的测试自动化套件?
我将关注的功能:
- Maven 运行时
- 字符串参数传递
- 黄瓜JVM
- 与 Browserstack(web) / Saucelabs(mobile) 等云设备提供商的连接
另外,为了这个目的,我们需要在 Bitrise 上设置什么样的工作
谢谢
Bitrise 确实提供了这些功能,并且可以在您进行项目设置时自动配置或推荐一些解决方案。如果您在此过程中需要任何 help/guidance,请联系 Bitrise 支持(通过现场聊天或电子邮件),他们可以帮助您进行特定设置:)
这可以通过使用脚本步骤来实现,该步骤调用存储库中的脚本:(路径相对于您的存储库)
脚本步骤:
#!/usr/bin/env bash
set -ex
bash ./scripts/bitrise/test_controller.sh
在 test_controller.sh
中,我们有控制其他 bash 脚本执行的逻辑(也可以使用 ruby),然后我们将 运行 maven在:
test_controller.sh
#!/usr/bin/env bash
set -ex
if [[ "$SHOULD_RUN_SPECIFIC_TESTS" == "false" && "$SHOULD_RUN_RELEASE_TESTS" == "false" ]]; then
if [[ $BITRISE_TRIGGERED_WORKFLOW_TITLE == "iOS-Appium" ]]; then
echo "=> Executing run_develop_ios_tests.sh"
bash ./scripts/bitrise/ios/run_develop_ios_tests.sh
exit 0
elif [[ $BITRISE_TRIGGERED_WORKFLOW_TITLE == "Android-Appium" ]]; then
echo "=> Executing run_develop_android_tests.sh"
bash ./scripts/bitrise/android/run_develop_android_tests.sh
exit 0
fi
fi
如果我们不想运行特定的测试,而不是发布,而触发这个运行的工作流是iOS-Appium,那么我们运行 执行 run_develop_ios_tests.sh
:
run_develop_ios_tests.sh
#!/usr/bin/env bash
set -ex
mvn clean test \
-DplatformName=IOS \
-Dsurefire.suiteXmlFiles="${XML_FILES}" \
-DIOS_DEVICE_NAME="${IOS_DEVICE_NAME}" \
-DIOS_PLATFORM_VERSION="${IOS_PLATFORM_VERSION}" \
-DSAUCE_USERNAME="${SAUCE_USERNAME}" \
-DSAUCE_ACCESS_KEY="${SAUCE_ACCESS_KEY}"
测试控制器内部的逻辑由环境变量驱动——引导我们的 mvn clean test
命令的字符串参数也是如此。
由于我们远程连接到 SauceLabs,因此不需要任何特殊代理。只是预安装的 JDK 和 Maven。
是否可以 运行 Java 基于 Bitrise CI/CD 的测试自动化套件?
我将关注的功能: - Maven 运行时 - 字符串参数传递 - 黄瓜JVM - 与 Browserstack(web) / Saucelabs(mobile) 等云设备提供商的连接
另外,为了这个目的,我们需要在 Bitrise 上设置什么样的工作
谢谢
Bitrise 确实提供了这些功能,并且可以在您进行项目设置时自动配置或推荐一些解决方案。如果您在此过程中需要任何 help/guidance,请联系 Bitrise 支持(通过现场聊天或电子邮件),他们可以帮助您进行特定设置:)
这可以通过使用脚本步骤来实现,该步骤调用存储库中的脚本:(路径相对于您的存储库)
脚本步骤:
#!/usr/bin/env bash
set -ex
bash ./scripts/bitrise/test_controller.sh
在 test_controller.sh
中,我们有控制其他 bash 脚本执行的逻辑(也可以使用 ruby),然后我们将 运行 maven在:
test_controller.sh
#!/usr/bin/env bash
set -ex
if [[ "$SHOULD_RUN_SPECIFIC_TESTS" == "false" && "$SHOULD_RUN_RELEASE_TESTS" == "false" ]]; then
if [[ $BITRISE_TRIGGERED_WORKFLOW_TITLE == "iOS-Appium" ]]; then
echo "=> Executing run_develop_ios_tests.sh"
bash ./scripts/bitrise/ios/run_develop_ios_tests.sh
exit 0
elif [[ $BITRISE_TRIGGERED_WORKFLOW_TITLE == "Android-Appium" ]]; then
echo "=> Executing run_develop_android_tests.sh"
bash ./scripts/bitrise/android/run_develop_android_tests.sh
exit 0
fi
fi
如果我们不想运行特定的测试,而不是发布,而触发这个运行的工作流是iOS-Appium,那么我们运行 执行 run_develop_ios_tests.sh
:
run_develop_ios_tests.sh
#!/usr/bin/env bash
set -ex
mvn clean test \
-DplatformName=IOS \
-Dsurefire.suiteXmlFiles="${XML_FILES}" \
-DIOS_DEVICE_NAME="${IOS_DEVICE_NAME}" \
-DIOS_PLATFORM_VERSION="${IOS_PLATFORM_VERSION}" \
-DSAUCE_USERNAME="${SAUCE_USERNAME}" \
-DSAUCE_ACCESS_KEY="${SAUCE_ACCESS_KEY}"
测试控制器内部的逻辑由环境变量驱动——引导我们的 mvn clean test
命令的字符串参数也是如此。
由于我们远程连接到 SauceLabs,因此不需要任何特殊代理。只是预安装的 JDK 和 Maven。