pipeline { agent { label 'linux' } parameters { string( name: 'NETWORK', description: 'Name of test network to use', defaultValue: 'ropsten', ) string( name: 'APK_NAME', description: 'Filename of APK uploaded to SauceLabs (base for upgrade, usually release build)', ) string( name: 'APK_NAME_UPGRADE', description: 'Filename of APK of upgraded application (installed on top of base)', ) } options { disableConcurrentBuilds() } stages { stage('Setup') { steps { script { dir('test/appium') { sh 'pip3 install --user -r requirements.txt' } } } } stage('Test') { steps { withCredentials([ usernamePassword( credentialsId: 'test-rail-api', usernameVariable: 'TESTRAIL_USER', passwordVariable: 'TESTRAIL_PASS' ), usernamePassword( credentialsId: 'sauce-labs-api', usernameVariable: 'SAUCE_USERNAME', passwordVariable: 'SAUCE_ACCESS_KEY' ), string( credentialsId: 'etherscan-api-key', variable: 'ETHERSCAN_API_KEY' ), ]) { dir('test/appium/tests') { sh """ python3 -m pytest -m upgrade \ -n24 --rerun_count=2 \ --testrail_report=True \ --network=${params.NETWORK} \ --apk=${params.APK_NAME} \ --apk_upgrade=${params.APK_NAME_UPGRADE} """ } } } } } post { always { script { sauce('sauce-labs-cred') { saucePublisher() } } } success { script { junit( testDataPublishers: [[$class: 'SauceOnDemandReportPublisher', jobVisibility: 'public']], testResults: 'test/appium/tests/*.xml' ) } } } }