Scripting Vugen – Exemple de traitement de variables C et de paramètres VUGEN
Je vous présente, ci-dessous, un exemple de code VUGEN dans lequel plusieurs points sont abordés :
- Déclaration de variables C
- Sauvegarde d’un retour HTTP dans un paramètre VUGEN
- Instanciation d’une variable C avec la taille exacte du paramètre VUGEN (malloc)
- Traitement de la variable C pour enlever les espaces
- Sauvegarde d’une variable C dans un paramètre VUGEN
- Traitement du Paramètre VUGEN avec une expression régulière
- Boucle sur la liste d’un paramètre VUGEN
- Et autre…
// Déclaration de la méthode Strip void strip(char *s); // Déclaration des variables C int arrSize; int iBureauxcount; int x; char arrayParamName[512]; char *sStr = NULL; char sVar[8192]; Action() { // Recupération d'une partie du BODY web_reg_save_param_ex( "ParamName=ALL_BUREAUX", "LB/IC=Example", "RB/IC=Example", "Ordinal=1", "SEARCH_FILTERS, "Scope=body", "IgnoreRedirections=No", "RequestUrl=*/example.do", LAST); // Appel métier web_custom_request("calculAlertesAction.do_7", "URL=https://example.do", "Method=POST", "Resource=0", "RecContentType=application/json", "Referer=https://example.do", "Snapshot=t373.inf", "Mode=HTTP", "EncType=application/json; charset=UTF-8", "Body=BODY REQUEST", LAST); // Création d'une variable C de type integer contenant la valeur de la taille du paramètre {ALL_BUREAUX} arrSize = strlen(lr_eval_string("{ALL_BUREAUX}")); // Création d'une variable C de type char, de la taille exacte du paramètre VUGEN {ALL_BUREAUX} sStr = (char *)malloc((arrSize + 1) * sizeof(char)); // Copy du paramètre VUGEN {ALL_BUREAUX} dans la variable C sStr strcpy(sStr, lr_eval_string("{ALL_BUREAUX}") ); // Suppression des espaces dans la variable C sStr strip(sStr); // Sauvegarde de la variable C sStr dans un nouveau paramètre VUGEN {ALL_BUREAUX_CLEAN} lr_save_string(sStr, "ALL_BUREAUX_CLEAN"); // Suppression de la variable C sStr free(sStr); // Traitement du nouveau paramètre VUGEN {ALL_BUREAUX_CLEAN} avec une expression régulière lr_save_param_regexp ( lr_eval_string("{ALL_BUREAUX_CLEAN}"), strlen(lr_eval_string("{ALL_BUREAUX_CLEAN}")), "RegExp/IC=(option value=\\\".*?\\\">.*?\\\/option)", "Ordinal=All", "ResultParam=BUREAU_CLEAN", LAST ); // Création d'une variable C de type integer contenant le nombre d'enregistrements trouvés iBureauxcount = atoi(lr_eval_string("{BUREAU_CLEAN_count}")); // Affiche du nombre d'enregistrement trouvés lr_output_message("Number of items found = %d", iBureauxcount); // Boucle tant qu'il y a des enregistrements for (x=1; x<=iBureauxcount; x++) { // Incrementation du paramètre VUGEN avec la valeur de la variable C x sprintf(arrayParamName, "{BUREAU_CLEAN_%d}", x); // Test si la valeur est trouvée if (((char *)strstr(lr_eval_string(arrayParamName), lr_eval_string("{Terrain_Param}")) != 0)) { // Affichage de la chaine recherchée //lr_output_message ("%s: %s", arrayParamName, lr_eval_string(arrayParamName)); // La valeur est trouvée, traitement du paramètre arrayParamName avec une expression régulière // et sauvegarde d'un nouveau paramètre VUGEN {BUREAU_VALIDE} lr_save_param_regexp ( lr_eval_string(arrayParamName), strlen(lr_eval_string(arrayParamName)), "RegExp/IC=option value=\\\"(.*?)\\\">.*?\\\/option", "Ordinal=1", "ResultParam=BUREAU_VALIDE", LAST ); lr_output_message ("%s: %s", arrayParamName, lr_eval_string(arrayParamName)); } else { lr_output_message ("NON"); } //lr_output_message ("%s: %s", arrayParamName, lr_eval_string(arrayParamName)); } // Création d'une variable C de type integer contenant le nombre d'enregistrements trouvés iBureauxcount = atoi(lr_eval_string("{LISTE_BUREAU_count}")); //strcpy(sVar, "idDossierSelectionne=&"); //strcat(sVar, "Name=idObjetDetail&"); // Boucle tant qu'il y a des enregistrements for (x=1; x<=iBureauxcount; x++) { // Incrementation du paramètre VUGEN avec la valeur de la variable C x sprintf(arrayParamName, "{LISTE_BUREAU_%d}", x); lr_output_message ("%s: %s", arrayParamName, lr_eval_string(arrayParamName)); if(x == 1 && x == iBureauxcount ) { strcpy(sVar, lr_eval_string(arrayParamName)); } else if (x == 1 && x != iBureauxcount) { strcpy(sVar, lr_eval_string(arrayParamName)); strcat(sVar, "%2C"); } else if (x > 1 && x < iBureauxcount) { strcat(sVar, lr_eval_string(arrayParamName)); strcat(sVar, "%2C"); } else if (x > 1 && x == iBureauxcount) { strcat(sVar, lr_eval_string(arrayParamName)); } } // Sauvegarde de la variable C sVar dans le paramètre VUGEN {LISTE_BUREAU_CLEAN} lr_save_string(sVar, "LISTE_BUREAU_CLEAN"); return 0; } // Méthode pour supprimer les espaces vide d'une variable C void strip(char *s) { char *p2 = s; while(*s != '\0') { if(*s != '\t' && *s != '\n') { *p2++ = *s++; } else { ++s; } } *p2 = '\0'; }
Consultant Testing Senior en poste chez Sogeti