赛普拉斯利用 Gitlab 变量
Cypress utilizing Gitlab Variables
我目前正在使用 Cypress 作为我的测试工具,当 运行 在 gitlab ci.[=14= 上 运行 时遇到了一个小问题]
问题
我的 Cypress 测试的一部分目前使用敏感的信用卡信息,所以当我将它上传到 gitlab 存储库时,我不得不尝试找出一种方法来阻止任何人查看 "sensitive information"。最终,我尝试利用 Gitlabs 方便的 "Secret Variable" 功能。
设置完所有我需要隐藏的变量后,我进入我的 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
所以在 Cypress 中,我将集成文件设置为如下所示:
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
是否有针对这种情况的建议方法?我是不是搞错了什么可笑的事?
无论如何,我很感激ci得到任何帮助!
There are multiple ways to pass a secret variable to a Cypress test.您可以通过以下几种方式进行操作:
CLI 中的环境变量
将秘密变量作为参数传递给 cypress ci
命令以创建 Cypress 环境变量。
cypress ci --env CARDHOLDER_NAME=$CARDHOLDER_NAME,CARD_CC=$CARD_CC
稍后在您的测试中,访问 Cypress 环境变量。
Cypress.env('CARDHOLDER_NAME')
Cypress.env('CARD_CC')
导出为 CYPRESS_*
您可以像您尝试的那样导出秘密变量,但您需要将 CYPRESS_
附加到变量以使其在测试中可访问。
export CYPRESS_CARD_CC=$CARD_CC
稍后在您的测试中,访问导出的变量。
Cypress.env('CARD_CC')
使用 Cypress' exec
获取秘密变量的内联。
cy.exec("echo $CARDHOLDER_NAME").its("stdout").then(function(stdout){
cy.get('#name').type(stdout)
})
我目前正在使用 Cypress 作为我的测试工具,当 运行 在 gitlab ci.[=14= 上 运行 时遇到了一个小问题]
问题
我的 Cypress 测试的一部分目前使用敏感的信用卡信息,所以当我将它上传到 gitlab 存储库时,我不得不尝试找出一种方法来阻止任何人查看 "sensitive information"。最终,我尝试利用 Gitlabs 方便的 "Secret Variable" 功能。
设置完所有我需要隐藏的变量后,我进入我的 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
所以在 Cypress 中,我将集成文件设置为如下所示:
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
是否有针对这种情况的建议方法?我是不是搞错了什么可笑的事?
无论如何,我很感激ci得到任何帮助!
There are multiple ways to pass a secret variable to a Cypress test.您可以通过以下几种方式进行操作:
CLI 中的环境变量
将秘密变量作为参数传递给
cypress ci
命令以创建 Cypress 环境变量。cypress ci --env CARDHOLDER_NAME=$CARDHOLDER_NAME,CARD_CC=$CARD_CC
稍后在您的测试中,访问 Cypress 环境变量。
Cypress.env('CARDHOLDER_NAME') Cypress.env('CARD_CC')
导出为 CYPRESS_*
您可以像您尝试的那样导出秘密变量,但您需要将
CYPRESS_
附加到变量以使其在测试中可访问。export CYPRESS_CARD_CC=$CARD_CC
稍后在您的测试中,访问导出的变量。
Cypress.env('CARD_CC')
使用 Cypress'
exec
获取秘密变量的内联。cy.exec("echo $CARDHOLDER_NAME").its("stdout").then(function(stdout){ cy.get('#name').type(stdout) })