Question

I'm trying to keep usernames and passwords for a cucumber project out of version control.

Is there a way to manually pass variables on the command line like usernames and passwords to a cucumber script?

My backup plan was to put them in a YML file and add that file to the gitignore so they aren't put in version control.

Was it helpful?

Solution

So, I saw your comments with the Tin Man, and answer is Yes.

cucumber PASSWORD=my_password

PASSWORD is set as an environment variable and you can use its value by referring to it as ENV['PASSWORD']. For an example, browser.text_field(:id => 'pwd').set ENV['PASSWORD']

Another way is indirect. What I did in past was to pass profile name and that profile will do something that I want. So, for example, I have a profile name as firefox and a firefox profile in cucumber.yml has a variable named BROWSER_TYPE with its value assigned to firefox. And this variable (BROWSER_TYPE) is used by my method that opens the browser. If its value is firefox, than this method opens firefox browser.

So, what I did here was -

  1. Pass a profile. Name of the profile is firefox
  2. firefox profile is defined in cucumber.yml. You can any thing with the profiles, but in this case, I define a variable named BROWSER_TYPE and assign its value as firefox.
  3. Then I have a method that uses BROWSER_TYPE variable and uses its value to open browser.

Code for these steps -

  1. cucumber -p firefox
  2. My cucumber.yml file looks like firefox: BROWSER_TYPE=firefox PLATFORM=beta

  3. My method to open browser looks similar to -

    @browser = Watir::Browser.new ENV['BROWSER_TYPE']

So, ideally you can create a profile that sets an environment variable with password, and pass that profile name to cucumber.

OTHER TIPS

Two thoughts:

1) I've had the same concern, and I created some shell scripts (Mac an Unix) that store credentials in a directory off ~ that are encrypted with machine-specific passwords. I can then use "Given the credentials named blah" in my Cucumber scenarios and then use @username = testcred get #{credname} username @username = testcred get #{credname} password in my step definitions to make this work with no chance that my credentials are ever anyplace they could mistakenly get into a repo. See https://github.com/usethedata/credstore.git for where I've put this into github (early work)

2) Lastpass has a command line version that works. I've also played with sharing my test credentials with a LastPass account that's used for just test credentials. I've used the credstore stuff above to store the lastpass master password for that account (never for my real master password) and then used the lastpass command line to get the usernames and passwords. This has the advantage of when I change the credentials in Lastpass, they get updated automatically everywhere they're used

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top