Skip to main content

Cycle 2.8 adds the following new Steps for assigning variables from a config file:

I assign values from config file "<path to .conf file>" to variables I assign value of "<entry in conf file>" from config file "<path to .conf file>" to variable "<new variable name>"

The formatting of a .config file that these Steps can interpret can be as simple as key/value pairs:

devcod = RDT001 vehtyp = FORK user = admin pass = 1234 wh_id = WMD1

Comments can also be included in their own lines or at the end of a line using // or #:

// device code devcod = RDT001 vehtyp = FORK // vehicle type user = admin pass = 1234 # change this

warehouse ID

wh_id = WMD1

Utility Feature Use Case

In addition to this, config files can reference other config files. For example, when storing all config files in a directory named “config” which includes a default.conf that looks like:

devcod = RDT001 vehtyp = FORK user = admin pass = 1234 wh_id = WMD1

And two additional files WMD2.conf and WMD3.conf in that directory that include the default.conf:

WMD2.conf

include "default" wh_id = WMD2

WMD3.conf

include "default" wh_id = WMD3

In this case, running I assign values from config file "config/WMD2.conf" to variables would result in a variable “devcod” with a value of “RDT001" which comes from default.conf, but also the new value of “WMD2” for “wh_id”.

New values can also be defined when including another config file. So if the directory also conatins a file WMD2-ClientA.conf like this: include "WMD2" client_id = CLIENT_A devcod = RDT001W The additional variable of client_id would be assigned when running I assign values from config file "config/WMD2-ClientA.conf" to variables, WMD2.conf would pass in the wh_id of WMD2, devcod of RDT001W, and vehtyp of FORK since WMD2.conf is included, which includes default.conf.

This can simplify a utility feature that’s loading environment specific information for a test. It eliminates all the extra Steps that were previously running a loop to read lines from a CSV and create variables from various CSVs.

CI/CD Use Case

Environment variables can also be referenced in config files. So for a more dynamic approach for a device code:

devcod = RDT001 devcod = ${?DEVCOD} vehtyp = FORK user = admin pass = 1234 wh_id = WMD1

In this case, running I assign values from config file "config/default.conf" to variables with no DEVCOD environment variable set prior to running cycle, RDT001 would be used as the value. But if a DEVCOD environment variable is set, that value would be used.

Therefore, by using ths following jenkins file:

    pipeline {
agent none
environment {
DEVCOD = "LXE007"
}
stages {
stage('first') {
agent { label 'master' }
steps {
sh "cyclecli -p project1 login.feature"
}
}
}
}

The feature importing default.conf with the ${?DEVCOD} syntax in it would dynamically get LXE007 as the value when the feature ran.

This can be useful in sticking a password into a jenkins secret and making that available as an environment variable in the pipeline.

(In such a case, it is advisable to include a default value like RDT001 above, for the sake of running the feature from the GUI.)

** Note that if there is a hard-coded value for devcod in a config file which included default.conf, that would override the default.conf value totally, including the environment variable.

Another dynamic use of this is, in the case where there is a default.conf, WMD2.conf, and WMD3.conf, we can create an env.conf in that directory with the following:

conf_file = config/default.conf conf_file = ${?TEST_ENVIRONMENT}

Then a feature can use:

I assign value of "conf_file" from config file "config/env.conf" to variable "conf_path" I assign values from config file $conf_path to variables

Now if running locally with no environment variables set, Cycle would load the default.conf. But in a jenkins pipeline, by setting TEST_ENVIRONMENT to config/WMD2.conf or config/WMD3.conf those values will be used dynamically at run time without having to change any files in the project at all.