Data file column restriction

Hi,

We are using excel files for data driven testing and automating for a huge application.

I major screens, there are more than 100 fields which are provided on a single sheet in excel file.

But on mapping the same excel file in data file, 100 column restriction message is shown but we are in need to use the same sheet and data file. And it is a added manual activity that we need to use another data file for mapping the values.

Is there any possibilities to overcome this restriction in katalon studio.

Because adding a data file for a screen is acceptable but for adding a data file for more number of screens is a kind of tedious process.

Kindly help us to overcome this solution to proceed the data driven execution with single data file in katalon.

Possible solution: Just add a configuration for handling the data file usage. This might be helpful for the users using the data file with n number of columns.

Thanks in advance.

I don’t use this myself, but @Andrej_Podhajsky has mentioned this library might help: https://poi.apache.org/

Source: Unable to load large data

Lastly, always try a Search: https://forum.katalon.com/search?q=100%20columns&expanded=true

Ah, yes.

What @Andrej_Podhajsky suggested was:

  • Stop depending on the “Data driven testing” feature of Katalon Studio.
  • Use Apache POI library to read/write Excel files yourself. Your code drivers everything.

In fact, I have done such “hand-written Excel driven testing” often, and just now doing it once more.

1 Like

I did an experiment.

  1. I made a Excel file Book1.xlsx with a sheet with 203 columns > 100.
  2. I opend the file as an entry in the KS’s Data Files. I was warned by a dialog:
    100columnsWarning
  3. I made a test case scrit:
import static com.kms.katalon.core.testdata.TestDataFactory.findTestData

import com.kms.katalon.core.testdata.TestData as TestData
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI


TestData testData = findTestData("Book1")
WebUI.comment("testData.getColumnNumbers()=${testData.getColumnNumbers()}")
WebUI.comment("testData.getColumnNames()=${testData.getColumnNames()}")
List<List<Object>> allRows = testData.getAllData()
WebUI.comment("allRows=${allRows}")

  1. I ran the test case, and got the following output:
2020-05-08 23:27:05.457 INFO  c.k.katalon.core.main.TestCaseExecutor   - START Test Cases/showAllColumns
2020-05-08 23:27:05.783 DEBUG testcase.showAllColumns                  - 1: testData = findTestData("Book1")
2020-05-08 23:27:06.454 DEBUG testcase.showAllColumns                  - 2: comment(testData.getColumnNumbers()=$testData.getColumnNumbers())
2020-05-08 23:27:06.557 INFO  c.k.k.c.keyword.builtin.CommentKeyword   - testData.getColumnNumbers()=203
2020-05-08 23:27:06.558 DEBUG testcase.showAllColumns                  - 3: comment(testData.getColumnNames()=$testData.getColumnNames())
2020-05-08 23:27:06.592 INFO  c.k.k.c.keyword.builtin.CommentKeyword   - testData.getColumnNames()=[1列, 2列, 3列, 4列, 5列, 6列, 7列, 8列, 9列, 10列, 11列, 12列, 13列, 14列, 15列, 16列, 17列, 18列, 19列, 20列, 21列, 22列, 23列, 24列, 25列, 26列, 27列, 28列, 29列, 30列, 31列, 32列, 33列, 34列, 35列, 36列, 37列, 38列, 39列, 40列, 41列, 42列, 43列, 44列, 45列, 46列, 47列, 48列, 49列, 50列, 51列, 52列, 53列, 54列, 55列, 56列, 57列, 58列, 59列, 60列, 61列, 62列, 63列, 64列, 65列, 66列, 67列, 68列, 69列, 70列, 71列, 72列, 73列, 74列, 75列, 76列, 77列, 78列, 79列, 80列, 81列, 82列, 83列, 84列, 85列, 86列, 87列, 88列, 89列, 90列, 91列, 92列, 93列, 94列, 95列, 96列, 97列, 98列, 99列, 100列, 101列, 102列, 103列, 104列, 105列, 106列, 107列, 108列, 109列, 110列, 111列, 112列, 113列, 114列, 115列, 116列, 117列, 118列, 119列, 120列, 121列, 122列, 123列, 124列, 125列, 126列, 127列, 128列, 129列, 130列, 131列, 132列, 133列, 134列, 135列, 136列, 137列, 138列, 139列, 140列, 141列, 142列, 143列, 144列, 145列, 146列, 147列, 148列, 149列, 150列, 151列, 152列, 153列, 154列, 155列, 156列, 157列, 158列, 159列, 160列, 161列, 162列, 163列, 164列, 165列, 166列, 167列, 168列, 169列, 170列, 171列, 172列, 173列, 174列, 175列, 176列, 177列, 178列, 179列, 180列, 181列, 182列, 183列, 184列, 185列, 186列, 187列, 188列, 189列, 190列, 191列, 192列, 193列, 194列, 195列, 196列, 197列, 198列, 199列, 200列, 201列, 202列, 203列]
2020-05-08 23:27:06.595 DEBUG testcase.showAllColumns                  - 4: allRows = testData.getAllData()
2020-05-08 23:27:06.603 DEBUG testcase.showAllColumns                  - 5: comment(allRows=$allRows)
2020-05-08 23:27:06.609 INFO  c.k.k.c.keyword.builtin.CommentKeyword   - allRows=[[データ1, データ2, データ3, データ4, データ5, データ6, データ7, データ8, データ9, データ10, データ11, データ12, データ13, データ14, データ15, データ16, データ17, データ18, データ19, データ20, データ21, データ22, データ23, データ24, データ25, データ26, データ27, データ28, データ29, データ30, データ31, データ32, データ33, データ34, データ35, データ36, データ37, データ38, データ39, データ40, データ41, データ42, データ43, データ44, データ45, データ46, データ47, データ48, データ49, データ50, データ51, データ52, データ53, データ54, データ55, データ56, データ57, データ58, データ59, データ60, データ61, データ62, データ63, データ64, データ65, データ66, データ67, データ68, データ69, データ70, データ71, データ72, データ73, データ74, データ75, データ76, データ77, データ78, データ79, データ80, データ81, データ82, データ83, データ84, データ85, データ86, データ87, データ88, データ89, データ90, データ91, データ92, データ93, データ94, データ95, データ96, データ97, データ98, データ99, データ100, データ101, データ102, データ103, データ104, データ105, データ106, データ107, データ108, データ109, データ110, データ111, データ112, データ113, データ114, データ115, データ116, データ117, データ118, データ119, データ120, データ121, データ122, データ123, データ124, データ125, データ126, データ127, データ128, データ129, データ130, データ131, データ132, データ133, データ134, データ135, データ136, データ137, データ138, データ139, データ140, データ141, データ142, データ143, データ144, データ145, データ146, データ147, データ148, データ149, データ150, データ151, データ152, データ153, データ154, データ155, データ156, データ157, データ158, データ159, データ160, データ161, データ162, データ163, データ164, データ165, データ166, データ167, データ168, データ169, データ170, データ171, データ172, データ173, データ174, データ175, データ176, データ177, データ178, データ179, データ180, データ181, データ182, データ183, データ184, データ185, データ186, データ187, データ188, データ189, データ190, データ191, データ192, データ193, データ194, データ195, データ196, データ197, データ198, データ199, データ200, データ201, データ202, データ203]]
2020-05-08 23:27:06.616 INFO  c.k.katalon.core.main.TestCaseExecutor   - END Test Cases/showAllColumns

Please find that the script could read all of 203 columns successfully.

maximum 100 columns — this is not really a restriction. The dialog is just an warning. You can safely ignore it.

We do not EDIT the data in the Data File GUI of Katalon Studio. Therefore we do not need all 203 columns displayed. At least I would not mind it if it does not show 101st and over columns because I can view and edit it using MS Excel.

On the other hand, Katalon Studio programmer possibly had to to choose some figure and set it as the maximum number of columns to display in the GUI. He could not make it large enough (e.g.,99999) due to memory resource/performance reasons. He/she just chose 100. I regret that the sentence “because it’s not a good practice to have so many columns” sounds arguable.

It would be an idea to request Katalon Team to offer opt-off “do not show that opinionated warning dialog of 100 columns”. Or simply remove it. If the sheet has 101 columns and more, and the GUI is not able to displays them, GUI should show a discreet annotation somewhere in the page in small font saying “columns over 101 exist but not displayed here”

@ThanhTo

Any comment?

2 Likes

It is true that the dialog is just a warning and there is no such restriction on manipulating test data. I also agree the message can do with more clarity. Added to Github for ease of tracking.

Hi,

I have validated that data file is not restricting and it is simply throwing the warning message.

It can be handled as a warning message to be displayed in tool bar or in console at a the time of execution.

But throwing alert is an additional work for the resources to handle it everytime on mapping the excel file with data file.

Kindly take the above points as a suggestion to implement in the future releases of katalon studio.

Thanks.

Hello everyone,

F.Y.I, we have noted the issue and rewritten the message in version 7.7 based on your feedback.

Jass

A data file can contain fewer fields than the number of columns in the destination table - that is, you can skip importing a column - only if at least one of the following two conditions is true in the destination table: … The skipped column has a default value.