1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/vars/gatlingExecuteTests.groovy

97 lines
3.4 KiB
Groovy
Raw Normal View History

import com.sap.piper.ConfigurationHelper
import com.sap.piper.Utils
import static com.sap.piper.Prerequisites.checkScript
import com.sap.piper.GenerateDocumentation
import groovy.transform.Field
@Field String STEP_NAME = getClass().getName()
@Field Set GENERAL_CONFIG_KEYS = []
@Field Set STEP_CONFIG_KEYS = [
/**
* Defines the behavior in case tests fail. When this is set to `true` test results cannot be recorded using the `publishTestResults` step afterwards.
* @possibleValues `true`, `false`
*/
'failOnError',
/**
* Path to the pom.xml file containing the performance test Maven module, for example `performance-tests/pom.xml`.
*/
'pomPath',
/**
* Optional List of app URLs and corresponding Jenkins credential IDs.
*/
'appUrls'
]
@Field Set PARAMETER_KEYS = STEP_CONFIG_KEYS
/**
* In this step Gatling performance tests are executed.
* Requires the [Jenkins Gatling plugin](https://plugins.jenkins.io/gatling/) to be installed.
*/
@GenerateDocumentation
void call(Map parameters = [:]) {
handlePipelineStepErrors (stepName: STEP_NAME, stepParameters: parameters) {
Script script = checkScript(this, parameters) ?: this
Utils utils = parameters.juStabUtils ?: new Utils()
String stageName = parameters.stageName ?: env.STAGE_NAME
Map config = ConfigurationHelper.newInstance(this)
.loadStepDefaults([:], stageName)
.mixinStepConfig(script.commonPipelineEnvironment, STEP_CONFIG_KEYS)
.mixinStageConfig(script.commonPipelineEnvironment, stageName, STEP_CONFIG_KEYS)
.mixin(parameters, PARAMETER_KEYS)
.withMandatoryProperty('pomPath')
.use()
def appUrls = parameters.get('appUrls')
if (appUrls && !(appUrls instanceof List)) {
error "The optional parameter 'appUrls' needs to be a List of Maps, where each Map contains the two entries 'url' and 'credentialsId'."
}
if (!fileExists(config.pomPath)) {
error "The file '${config.pomPath}' does not exist."
}
utils.unstashAll(config.stashContent)
try {
if (appUrls) {
for (int i = 0; i < appUrls.size(); i++) {
def appUrl = appUrls.get(i)
if (!(appUrl instanceof Map)) {
error "The entry at index $i in 'appUrls' is not a Map. It needs to be a Map containing the two entries 'url' and 'credentialsId'."
}
executeTestsWithAppUrlAndCredentials(script, appUrl.url, appUrl.credentialsId, config.pomPath)
}
} else {
mavenExecute script: script, flags: ['--update-snapshots'], pomPath: config.pomPath, goals: ['test']
}
} finally {
gatlingArchive()
}
}
}
void executeTestsWithAppUrlAndCredentials(Script script, url, credentialsId, pomPath) {
withCredentials([
[
$class: 'UsernamePasswordMultiBinding',
credentialsId: credentialsId,
passwordVariable: 'PERFORMANCE_TEST_PASSWORD',
usernameVariable: 'PERFORMANCE_TEST_USERNAME'
]
]) {
List defines = [
"-DappUrl=$url",
"-Dusername=$PERFORMANCE_TEST_USERNAME",
"-Dpassword=$PERFORMANCE_TEST_PASSWORD"
]
mavenExecute script: script, flags: ['--update-snapshots'], pomPath: pomPath, goals: ['test'], defines: defines
}
}