1

В настоящее время я использую Cypress в качестве инструмента для тестирования, и у меня возникла небольшая проблема при запуске на gitlab ci.Cypress, использующий переменные Gitlab

Проблема

Часть моего Cypress испытания в настоящее время использует чувствительные данные кредитной карты, поэтому, когда я загрузил его в хранилище gitlab я должен был попытаться выяснить способ держать кого-либо когда-либо просмотра сказал: «секретная информация ». В конце концов, я попытался использовать Gitlabs удобную функциональность «Secret Variable».

После настройки всех переменных, которые мне нужно было скрывать, я зашел в свой файл gitlab-ci.yml и настроил его так, чтобы файл .gitlab-ci.yml создавал новый файл под названием «cypress/поддержка/PaymentCredentials.js», и в этом файле все конфиденциальной информации о платежах будет храниться в виде яваскрипта переменных (как показано ниже)

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() 
     }) 
    }) 
    }) 
}) 

Когда я запустил трубопровод, я все еще получаю сообщение об ошибке sta тин, что «CARDHOLDER_NAME» не был определен: Gitlab ci build report

Существуют ли какие-либо предлагаемые подходы принять для этого сценария? Получил ли я что-то нелепое?

В любом случае, я ценю любую помощь!

ответ

2

There are multiple ways to pass a secret variable to a Cypress test. Вот несколько способов, которыми вы могли бы сделать это:

Переменные среды в CLI

  • Pass в секретных переменных в команде 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') 
    

cy.exec()

  • Использование Кипарис exec, чтобы получить встроенный секретный переменной.

    cy.exec("echo $CARDHOLDER_NAME").its("stdout").then(function(stdout){ 
        cy.get('#name').type(stdout) 
    })