Set variable in groovy based on parameter from Jenkins
I have a groovy script in my tests which takes the user input to set the environment and project variables. I'm trying to integrate the tests with jenkins, and want to create a parameterized build for the two parameters.
So, if someone chooses env as "QA" and project as "testing" in Jenkins, I want the groovy script to read those values, and run the tests accordingly.
I tried finding something related to this in the community but was unable to find it. Anyone has any ideas how this can be achieved?
Hello,
-----------------------
In Jenkins......Fill out desired Jenkins parameters
=========== Jenkins "This project is parameterized" ================
Choice ParameterName ACCOUNT
Choices development
integration
production
Choice ParameterName PROJECT
Choices prjX
prjY
prjZ
...Use parameters in your command line interface for launching SoapUI/ReadyAPI within Jenkins
=========== Jenkins Build Execute shell ================
# clean up temporary script dir
rm -rf bin# create a temporary script dir
mkdir bin
cd bin# create a temporary script
touch tmp-test-runner.sh
chmod 755 tmp-test-runner.shSOAPUI_TESTRUNNER=/var/lib/jenkins/SmartBear/SoapUI-5.3.0/bin/testrunner.sh
SOAPUI_PROJECT=soapui/{your full project file name goes here. (i.e. readyapi-or-soapui-project.xml)}echo "echo Running tests against the $ACCOUNT account" > tmp-test-runner.sh
echo "echo Running tests against the $PROJECT project" >> tmp-test-runner.sh
echo "$SOAPUI_TESTRUNNER -a -I -j -f output -Pact=$ACCOUNT -Pprj=$PROJECT $SOAPUI_PROJECT" >> tmp-test-runner.sh
export DEBUG=false# return to base directory
cd ../# execute tmp script somehow or however you are doing it now
bin/tmp-test-runner.sh-----------------------
In SoapUI/ReadyAPI...
SoapUI can be launched from Jenkins. Whatever '-P' properties you supply to the command line can be used during the run of your project. They override whatever you have defined in your project.
Above the -P "act" and -P "prj" properties are set to whatever was picked in Jenkins build request.Review the command line options from Smartbear website. I have had success with Jenkins using -P command line option for project level properties. You could also use -D for system properties or -G for global properties if you like to use those instead.
In any groovy script within your project, you can reference what was passed in that property using code such as:
def accountNameEnvironment = context.expand( '${#Project#act}' ).toLowerCase();
def projectName = context.expand( '${#Project#prj}' ).toLowerCase();Then use as needed with groovy code inside your project:
if (accountNameEnvironment == 'development') {
endPoint = 'https:\\something a';
};
if (accountNameEnvironment == 'integration') {
endPoint = 'https:\\something b';
};
if (accountNameEnvironment == 'production') {
endPoint = 'https:\\something c';
};
log.info 'project from Jenkins=' + projectName;You will have to code your projects with command line parameters input in mind. Jenkins will execute everything that is not disabled top down in functionality testing. You can do all of this locally on your computer to simulate what Jenkins will do by running SoapUI or ReadyAPI from command line interface from a shell script of your operating system. If it works from your command line, it is easy to port to Jenkins.