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