Jenkins没有得到传递的url值,它显示为null [英] Jenkins is not getting the url value passed, it says null

查看:27
本文介绍了Jenkins没有得到传递的url值,它显示为null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Jenkins管道中运行我的测试时,它显示您已将cy.request()url作为null传递。我已经提到了Jenkins中的所有环境变量。有人能告诉我这里有什么问题吗?

错误: CypressError: cy.request()requires aurl. You did not provide a url.

我的.env文件:

CYPRESS_TEST_USERNAME=Test1
CYPRESS_TEST_PASSWORD=BooksTest1234
CYPRESS_BASE_URL=https://my-test-url.com/books/
CYPRESS_API_URL=https://my-test-url.com/api/v1.0/books/

我的Jenkins文件

def channel = '#jenkins-cypress'
def ARTEFACT_DIR=""
pipeline {
  agent any
  stages {
    stage('Clone books-suite') {
        steps {
            dir('books-co') {
                script {
                    checkout([
                        $class: 'GitSCM',
                        branches: [
                            [name: "origin/develop"]
                        ],
                        extensions: [
                            [$class: 'CleanCheckout'],
                            [$class: 'LocalBranch', localBranch: '**'],
                            [$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true, timeout: 10]
                        ],
                        userRemoteConfigs: [[
                            credentialsId: 'fsdf68fs61-esdfsdf56546-92ea-7345bcfsfsdfb3d391',
                            url: 'ssh://git@bitbucket_url_location'
                        ]],
                        doGenerateSubmoduleConfigurations: false,
                        submoduleCfg: []
                    ])
                    ARTEFACT_DIR="${env.WORKSPACE}/artefacts/${BUILD_NUMBER}"
                }
            }
        }
    }
    stage('Run cypress') {
        steps {
            script {
                mattermostSend color: 'good', channel: channel, message: "**STARTING** - Cypress starts (<${env.BUILD_URL}|build ${env.BUILD_NUMBER}>)"
                sh "mkdir -p "${ARTEFACT_DIR}/videos""
                sh "mkdir -p "${ARTEFACT_DIR}/screenshots""
                def baseUrlConfig="-e CYPRESS_baseUrl=https://my-test-url.com/books/"
                def screenshotsFolderConfig="screenshotsFolder=/artefacts/screenshots"
                def videosFolderConfig="videosFolder=/artefacts/videos"
                def config = "--config ${screenshotsFolderConfig},${videosFolderConfig}"
                def cypressArgs = "run --headless --browser chrome ${config} --project /books-suite"
                sh """
                docker run ${baseUrlConfig} 
                  -v "${ARTEFACT_DIR}:/artefacts" 
                  -e CYPRESS_OUTPUT_FILE="/artefacts/report.html" 
                  -e CYPRESS_TEST_USERNAME="Test1" 
                  -e CYPRESS_TEST_PASSWORD="BooksTest1234" 
                  -e CYPRESS_BASE_URL="https://my-test-url.com/books/" 
                  -e CYPRESS_API_URL="https://my-test-url.com/api/v1.0/books/" 
                  
                  cypress:latest 
                    /node_modules/.bin/cypress ${cypressArgs}
                """
                mattermostSend color: 'good', channel: channel, message: "**SUCCESSED** - Cypress CI passed successfully (<${env.BUILD_URL}|build ${env.BUILD_NUMBER}>)"
            }
        }
    }
  }
    post {
        always {
            script {
                USER_ID = get_uid()
                GROUP_ID = get_gid()
                sh """
                    docker run --user ${USER_ID}:${GROUP_ID} 
                      -v "${ARTEFACT_DIR}:/artefacts" 
                      -v "${env.WORKSPACE}/books-co:/books" 
                      -e JSON_DIR="/books/tests/cypress/cucumber-json" 
                      -e OUTPUT_FILE="/artefacts/report.html" 
                      cypress-books-report:latest
                """
            }
            archiveArtifacts artifacts: "artefacts/${BUILD_NUMBER}/**/*", fingerprint: true

            emailext attachmentsPattern: "artefacts/${BUILD_NUMBER}/**/*",
                body: '${FILE, path="' + "artefacts/${BUILD_NUMBER}/report.html" + '"}',
                mimeType: 'text/html',
                to: 'first.lastman@books.com',
                subject: "Cypress Jenkins Build ${currentBuild.currentResult}: Job ${env.JOB_NAME}"

            sh "rm -Rf artefacts/${BUILD_NUMBER}"

            mattermostSend color: 'good', channel: channel, message: "**SUCCESSED** - Cypress CI report generated (<${env.BUILD_URL}|build ${env.BUILD_NUMBER}>)"
        }
        failure {
            mattermostSend color: 'danger', channel: channel, message: "**FAILED** - cypress CI failed (<${env.BUILD_URL}|build ${env.BUILD_NUMBER}> - <${env.BUILD_URL}console|click here to see the console output>)"
        }
    }
}

def get_uid() {
    node('master') {
        return sh(script: "id -u ${USER}", returnStdout: true).trim()
    }
}

def get_gid() {
    node('master') {
        return sh(script: "id -g ${USER}", returnStdout: true).trim()
    }
}

plugins/index.js:

module.exports = (on, config) => {
    on('file:preprocessor', cucumber()),
        on('before:browser:launch', (browser, launchOptions) => {
            console.log("Print browser name: "+browser.name);

            if (browser.name === 'chrome' || browser.name === 'chrome' && browser.isHeadless) {
                launchOptions.args.push('--disable-features=SameSiteByDefaultCookies') // bypass 401 unauthorised access on chromium-based browsers
                return launchOptions
            }

            if (browser.name === 'chrome') {
                // launch chrome using incognito
                launchOptions.args.push(' --incognito')
                return launchOptions
            }

            if (browser.name === 'chrome' && browser.isHeadless) {
                launchOptions.args.push('--disable-gpu');
                return launchOptions
            }
        });

    config = dotenvPlugin(config)                                                                           
    return config

};

Commands.js文件

Cypress.Commands.add("loginReq", () => {
  cy.request({
    method: 'POST',
    url: Cypress.env('BASE_URL'), // baseUrl is prepended to url
    form: true, 
    body: {
      loginUsername: Cypress.env('TEST_USERNAME'),
      loginPassword: Cypress.env('TEST_PASSWORD')
    }
  }).then((response)=>{
    console.log("login success: "+response);
  })
});

推荐答案

当您设置CYPRESS_BASE_URL时,Cypress配置将如下所示:

{
    "baseUrl": "your set base url",
    "env": {

    }
}

您可以在运行cypress open时查看一下,然后转到打开的测试运行器中的"设置"。

问题是Cypress.env()env对象读取变量,其中您的基URL是而不是设置的,因为CYPRESS_BASE_URL设置的是baseUrl属性,而不是env.baseUrl属性。

如果要设置CYPRESS_BASE_URL并从测试中访问它,则必须使用Cypress.config().baseUrl调用它。

但是,您并不真的需要调用(在您的示例中不需要)Cypress.config().baseUrl,因为Cypress会自动为您调用,因此:

cy
  .visit('/');

实际上意味着Cypress会为您预置基本url。cy.request()也是如此,因此在您的示例中,您可以从那里删除它。

这篇关于Jenkins没有得到传递的url值,它显示为null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆