====== Tutorial: Automation Scripting - Combinatorial Model ====== Learning Objectives: * [[#Model scripting]] * [[#Looping DataTable]] * [[#Activating plugins]] * [[#Exporting results]] * [[#Remote Execution]] This tutorial assumes that you are familiar with how to create a Combinatorial Data Model and have created a simple model with at least 2 variables named Field1 and Field2 and have generated the DataTable. Please refer to [[comb_data_modeling | Combinatorial Data Modeling]] if you need assistance in creating the model. ===== Model scripting ===== [[https://groovy-lang.org/syntax.html | Apache Groovy]] script is the scripting language for your models. //Groovy// script is syntactically very similar to most of programming language that allows you to create classes, functions and basic logic and arithmetic operations. Unlike [[scripting_state_model | scripting for State Model]], you just write your script right in [[../data_design_ide#script | SCRIPT]] tab. In your script you would just loop through the rows in DataTable. Below is an example of script: $DATASET.notifyClient('Total number of rows in DataTable: ' + $DATASET.getDataRows().size()); Run the model, you should see following returned and displayed on [[../data_design_ide#execute | IDE Execute]] tab: Total number of rows in DataTable: 10 ===== Looping DataTable ===== To perform the testing on all rows in DataTable, you must loop through each row in DataTable ($DATASET.getDataRows()). You can do this with //for// loop: for (Map row: $DATASET.getDataRows()) { $DATASET.notifyClient(row); } ===== Activating Plugins ===== Just like [[scripting_state_model | scripting for State Model]], you need to activate plugins to interact with AUT to perform the testing on each row in the DataTable. For this tutorial, activate //Random// plugin, and modify the script to use //$RANDOM.randNum(...)// to determine the failure/success as below: for (Map row: $DATASET.getDataRows()) { if ($RANDOM.randNum(0,10) > 5) { row._result = "Successful run on " + row.Field1 + ", " + row.Field2; row._status = true; } else { row._result = "Failed run on " + row.Field1 + ", " + row.Field2; row._status = false; } $DATASET.notifyClient(row); } Make changes to your script to incorporate the plugin function calls and re-run the model. ===== Exporting results ===== When running the model in IDE, you can export/download the execution results in [[../data_design_ide#execute | IDE Execute]] tab. After model execution completes, you can export the results by menu //File / Export// or {{wiki:overview:tut_comb_btn_export.png?20}}. Try the export and review the result file downloaded. If you are running model remotely using [[../integration#rest_apis | REST api]], you may specify the file location to save the execution results, see next section for details. ===== Remote Execution ===== You may run your data model remotely using REST api: curl -X POST "http://localhost:8888/api/v1/runtime/dataset/run/sync" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"modelName\": \"DEMO_Insurance_API\", \"path\": \"Demo_CombinatorialTesting\", \"outputFile\": \"myOutputFile.txt\"}" Replace "modelName" and "path" with your values accordingly. The output is written to "outputFile" in //work// folder if specified.