1

J'utilise actuellement Cypress comme outil de test, et j'ai rencontré un léger problème lors de son utilisation sur gitlab ci.Cypress utilisant les variables Gitlab

Le problème

Une partie de mon test de Cypress utilise actuellement des informations sensibles de carte de crédit, alors quand j'uploadé dans un dépôt de gitlab ce que je devais essayer de trouver un moyen pour empêcher quiconque de jamais regarder dit « des informations sensibles ". Finalement, j'ai essayé d'utiliser la fonctionnalité "Secret Variable" de Gitlabs. Après avoir configuré toutes les variables dont j'avais besoin pour rester caché, je suis allé dans mon fichier gitlab-ci.yml et l'ai configuré pour que le fichier .gitlab-ci.yml crée un nouveau fichier appelé "cypress/soutien/PaymentCredentials.js », et dans ce fichier toutes les informations de paiement sensibles seront stockées sous forme de javascript variables (ci-dessous)

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 

donc à Cypress je configurer le fichier d'intégration à agir comme comme celui-ci:

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

Lorsque j'ai exécuté le pipeline, je reçois toujours une erreur sta ting que le « CARDHOLDER_NAME » n'a pas été défini: Gitlab ci build report

Existe-t-il des approches suggérées à prendre pour ce scénario? Est-ce que j'ai eu quelque chose de ridicule?

De toute façon, j'apprécie toute aide!

Répondre

2

There are multiple ways to pass a secret variable to a Cypress test. Voici quelques façons dont vous pouvez le faire:

Variables d'environnement dans CLI

  • passe dans les variables secrètes à la commande cypress ci comme argument pour créer une variable d'environnement Cypress .

    cypress ci --env CARDHOLDER_NAME=$CARDHOLDER_NAME,CARD_CC=$CARD_CC 
    
  • Plus tard dans vos tests, accédez à la variable d'environnement Cypress.

    Cypress.env('CARDHOLDER_NAME') 
    Cypress.env('CARD_CC') 
    

Exporter CYPRESS_ *

  • Vous pouvez exporter les variables secrètes que vous essayez de faire, mais vous devrez ajouter CYPRESS_ à la variable d'avoir accessible dans tes tests.

    export CYPRESS_CARD_CC=$CARD_CC 
    
  • Plus tard dans vos tests, accédez aux variables exportées.

    Cypress.env('CARD_CC') 
    

cy.exec()

  • Utilisez Cypress exec pour obtenir la ligne de la variable secret.

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