Showing results for 
Search instead for 
Did you mean: 

CSV Parameter trickery in keywordtests

Occasional Contributor

CSV Parameter trickery in keywordtests

 Hi *,


- I'm working with a data driven loop, connected to a csv file.

- The file holds scenario data organized in the form scenario;device_name;input1;input2;...;expected1;expected2;...

- The scripted test (in python) has the parameters def test(scenario, device, **kwargs).


**kwargs should take a dynamic numer of key-value-pairs, the input and expected values. But the kwargs-part is not shown in the keywordtest as valid parameter to be filled with values.


With *args which resembles a dynamic list of pararameter values it is a little bit different, because the argument is shown, but I can only address a single value to the list. And it does something very weird with the Operations Parameters order: if i have scenario, device, *args it presents scenario, args, device and even when I connect the correct values it switches the order. When I omit the astersik, everything is as it should.



I have to accept TestComplete does not really support these typical pythonic constructs **kwargs and *args as Operation Parameters in keyword tests that call scripted code.


What to do now? I do not want to name every possible field in the parameter list of the script because this is ugly, not pythonic and worst of all: the number of fields may change in the (near) future


So there must be a way in the data driven loop to tell TestComplete that it takes a whole row and adresses it to a single variable, whatever format. Does anyone have an idea?









Occasional Contributor

Re: CSV Parameter trickery in keywordtests

This is funny ... I'm thinking about things and do not have a clue and in the moment I've asked the community I have a possible solution in mind 🙂


I want to show what I think is a possible (but somewhat ugly) solution to the described problem:


The local or project variable that holds the csv row is of type DB Table. If I hand over this one I can extract the values into a dictionary and everything is fine.


test(scenario, device, db_table):

  values = dict()

  for i in range(0, db_table.ColumnCount):

     name = db_table.ColumnName[i]

     values[name] = db_table.Value[name]



Feel free to comment/modify











New Here?
Join us and watch the welcome video:
Join TechCorner Challenge!
Want a fun and easy way to learn TestComplete? Try solving weekly TechCorner challenges and get into the Leaderboard!

Challenge Status

Changing options from outside of TestComplete


How to execute remote test and obtain results via Test Runner REST API


Comparing content of HTML table with Excel file data


Compare HTML table with Excel file and correct data in the file

Top Kudoed Authors