TemplatedData is Robot Framework library for dynamically generated test data using robot variables and Jinja templating.
Python 3.6+ and Robot Framework 3.2.1+.
TemplatedData will most likely work on other versions but it's not tested on them.
You can install TemplateData by running:
pip install robotframework-templateddata
You need to import TemplatedData as library first:
*** Settings *** Library TemplatedData
TemplatedData will replace all occurences of robot variables (${var}) in file or variable using current robot context and scopes. All test data in below examples are saved under 'test_data.txt' files
Test data:
my variable is ${var}
Robot code:
${var} Set Variable ${10} ${data} Get Templated Data From Path test_data.txt Log ${data} # it should print `my variable is 10`
If the variable is not found it will be replaced with empty string. You can override that behaviour:
${data} Get Templated Data From Path test_data.txt default_empty=${5} Log ${data} # it should print `my variable is 5`
You can also set default value of variable with : symbol.
Test data:
my variable is ${var} and ${var2:some string}
Robot code:
${var} Set Variable ${10} ${data} Get Templated Data From Path test_data.txt Log ${data} # it should print `my variable is 10 and some string`
Return value can be either text/string (default) or json.
Test data:
{ "key": "${var}" }
Robot code:
${data} Get Templated Data From Path test_data.txt var=value return_type=json Log ${data} # it should print `{ "key": "value" }` and ${data} will be of type json
TemplatedData can also render the Jinja templates using Robot Framework variables. To enable Jinja template pass jinja_template
as argument to
library import or method call:
*** Settings *** Library TemplatedData jinja_template=${True} OR *** Keywords *** Load Data ${data} Get Templated Data From Path data.template jinja_template=${True}
Test data (Jinja template):
{ "accounts": [ { "id": {{ ${account_id:5} }} }, { "id2": "{{ ${account_id2} }}" } ], "users": [ {%- for user, amount in ${users.items()} %} { "name": "{{ user }}", "amount": {{ amount }} }{{ "," if not loop.last }} {%- endfor %} ] }
Robot code:
${data} Get Templated Data From Path data.template jinja_template=${True}
Example data output:
{ "accounts": [ { "id": 10 }, { "id2": "10" } ], "users": [ { "name": "bartek", "amount": 5 }, { "name": "tymoteusz", "amount": 10 }, { "name": "pawel", "amount": -1 } ] }