首页 文章

赛普拉斯利用Gitlab变量

提问于
浏览
1

我目前正在使用Cypress作为我的测试工具,并且在gitlab ci上运行它时遇到了一些小问题 .

问题

我的赛普拉斯测试的一部分目前使用敏感的信用卡信息,因此当我将其上传到gitlab存储库时,我不得不尝试找出一种方法来阻止任何人查看所述“敏感信息” . 最终,我试图利用Gitlabs方便的“秘密变量”功能 .

在设置了我需要保持隐藏的所有变量之后,我进入了我的gitlab-ci.yml文件并进行了设置,以便.gitlab-ci.yml文件创建一个名为“cypress / support / PaymentCredentials”的新文件 . js“,在该文件中,所有敏感支付信息都将存储为javascript变量(如下所示)

image: bahmutov/cypress-image
# caching node_modules folder
# https://about.gitlab.com/2016/03/01/gitlab-runner-with-docker/
cache:
  paths:
  - node_modules/
before_script:
  - cypress verify
  - "echo -e \"export default {CARDHOLDER_NAME: '$CARDHOLDER_NAME', CARD_CC: '$CARD_CC', CARD_CC_MONTH: '$CARD_CC_MONTH', CARD_CC_YEAR: '$CARD_CC_YEAR', CARD_CC_CCV: '$CARD_CC_CCV'}\" > cypress/support/PaymentCredentials.js"
stages:
  - build
  - test
build-specs:
  stage: build
  script:
    - npm install
  artifacts:
    paths:
      - cypress/integration
.job_template: &e2e_test_definition
  script:
    - echo $CARDHOLDER_NAME
    - export $CARDHOLDER_NAME
    - cypress ci --spec "cypress/integration/$CI_BUILD_NAME.js"
Test_Project:
  <<: *e2e_test_definition

所以在赛普拉斯我设置Integration文件就像这样:

describe('Test', function(){

  afterEach(function(){

  })
  beforeEach(function(){

  })
  //The entire job
  context('Test - Full Functionality Test', function(){
    it('Front-end Walkthrough', function(){
    /*This is going to go through the first step on Test*/
    stepOne()
    /*This is going to go through the Second step on Test*/
    stepTwo()
    /*This is going to go through the Third step on Test*/
    stepThree()
    /*Page loads very slowly, needed some buffer*/
    cy.wait(5000) 
    /*This is going to go through the Fourth step on Test*/
      cy.then(function(){
        cy
        .get('[name=method]').select("CC") //select CC
        .get('#name').type(CARDHOLDER_NAME)
        .get('#number').type(CARD_CC)
        .get('#month').select(CARD_CC_MONTH)
        .get('#year').select(CARD_CC_YEAR)
        .get('#ccv').type(CARD_CC_CCV)
        .get('[type=checkbox]').check({force: true})
        .get('#scoreboard-enroll-form').submit()
      })
    })
  })
})

当我运行管道时,我仍然收到一条错误,指出"CARDHOLDER_NAME"尚未定义:Gitlab ci build report

对于这种情况,是否有任何建议的方法?我得到了一些荒谬的错误吗?

无论哪种方式,我感谢任何帮助!

1 回答

  • 2

    There are multiple ways to pass a secret variable to a Cypress test.以下是一些可以做到这一点的方法:

    Environment Variables in CLI

    • 将秘密变量传递给 cypress ci 命令作为参数以创建赛普拉斯环境变量 .
    cypress ci --env CARDHOLDER_NAME=$CARDHOLDER_NAME,CARD_CC=$CARD_CC
    
    • 稍后在测试中,访问赛普拉斯环境变量 .
    Cypress.env('CARDHOLDER_NAME')
    Cypress.env('CARD_CC')
    

    Export as CYPRESS_*

    • 您可以按照尝试的方式导出秘密变量,但是您需要将 CYPRESS_ 附加到变量以使其在测试中可访问 .
    export CYPRESS_CARD_CC=$CARD_CC
    
    • 稍后在测试中,访问导出的变量 .
    Cypress.env('CARD_CC')
    

    cy.exec()

    • 使用赛普拉斯' exec 获取秘密变量的内联 .
    cy.exec("echo $CARDHOLDER_NAME").its("stdout").then(function(stdout){
       cy.get('#name').type(stdout)
    })
    

相关问题