如何为R Shiny应用实现自动化测试以支撑持续交付流程?
R Shiny应用持续交付流程实现方案
前置准备
- 给主应用仓库、测试用例仓库、生产环境仓库配置拥有读写权限的Personal Access Token(PAT),需开启仓库读写、Workflow触发权限,将PAT存入主应用仓库的Secrets配置项中
- 主应用仓库提前配置R依赖声明文件(如
DESCRIPTION、renv.lock),确保测试运行时依赖版本可复现 - 测试用例仓库整理所有测试脚本,统一执行入口为
run_tests.R,注意测试不通过时脚本需要返回非0退出码,才能被流水线识别为失败
核心配置(基于GitHub Actions)
在主应用仓库下创建.github/workflows/cd.yml配置文件,内容如下:
name: R Shiny CD Pipeline # 触发规则:推送到指定分支时自动执行 on: push: branches: [ main ] # 替换为你需要触发流水线的分支名 jobs: delivery: runs-on: ubuntu-latest steps: # 步骤1:拉取主应用代码 - name: Checkout main app repo uses: actions/checkout@v4 with: path: shiny-app token: ${{ secrets.PAT }} # 对应你提前存入仓库Secrets的PAT变量名 # 步骤2:拉取独立测试用例仓库代码 - name: Checkout test case repo uses: actions/checkout@v4 with: repository: 你的GitHub用户名/测试用例仓库名 # 替换为实际测试仓库地址 path: test-suite token: ${{ secrets.PAT }} # 步骤3:配置R运行环境 - name: Setup R environment uses: r-lib/actions/setup-r@v2 # 步骤4:安装应用依赖 - name: Install app dependencies working-directory: shiny-app run: | install.packages("renv") renv::restore() shell: Rscript {0} # 步骤5:执行全量测试用例 - name: Run all tests working-directory: shiny-app run: Rscript ../test-suite/run_tests.R # 步骤6:测试通过后同步代码到生产仓库 - name: Sync to production repo if: success() # 仅所有前置步骤执行成功时运行 working-directory: shiny-app run: | git config --global user.name "CD Bot" git config --global user.email "cd-bot@local.dev" git remote add production https://${{ secrets.PAT }}@github.com/你的用户名/生产仓库名.git git push production main:main
效果验证
- 向主应用仓库推送测试变更,查看Actions运行日志,确认测试失败时流水线自动终止,不会同步到生产仓库
- 测试通过时,确认生产环境仓库对应分支已自动更新为最新代码
内容的提问来源于stack exchange,提问作者TechWorksLAB
相关产品推荐
相关产品推荐

