Loadrunner Analysis Error - The SQL query produced by the analysis server is invalid.

 Error - Below error message pop up appears after some percentage of progress, when we try to open the Controller test results in Analysis engine.


Solution - This error is due to the high disk space utilized by the old analysis reports. So we have to delete or move the old reports to a different location and then try opening the results in the Analysis engine again. This time it will be successful.

C Program to extract string from the body of the mail using left and right boundaries - MAPI protocol

MAPI mapi = 0;

Action()

{

long logfile;

long fromfile;

char *CStr; //variable in which the response header will be saved

char *LB = "personal "; //Left Boundary of Session ID

char *RB = "until "; //Right Boundary of Session ID

char *CorrParam = NULL; //variable in which Session ID will be saved

char *start, *end;

 

int rc;

int loopTime;

int loopCount;

char * szSubj; 

int iCmpResult;

int ifromResult;

int iEmailCounter = 0;

char * szMyHost; 

char * message;

char * fromid;


//Logon to Exchange with proper credentials 

mapi_logon_ex(&mapi,"Logon", 

"ProfileName=Outlook",

"ProfilePass=",

LAST);

 

lr_think_time(5);

lr_start_transaction("MAILING");

loopTime=0;

do {

mapi_set_property_sz_ex(&mapi,"Message ID", ""); 

loopCount =0;

lr_output_message( "Never Loop");

// Preview all mails in Mailbox

do {

// Peek at next mail (don't mark it as read) 

rc = mapi_read_next_mail_ex(&mapi,

"NextMail",

"Show=all", // 

"Peek=True", // [Optional: default = False]

"Type=IPM",

"Save=body",

LAST); 


//Saving the mail content and from address to a C variable

message = mapi_get_property_sz_ex(&mapi,"Content");

fromid = mapi_get_property_sz_ex(&mapi,"From");


sleep (100);

loopTime++;

loopCount++;

if (rc != LR_PASS) break;

if (loopCount >=5) {

break;

}

 

 

//Obtains the subject & from address and compare with the expected subject & from address

szSubj=mapi_get_property_sz_ex(&mapi, "Subject");

iCmpResult = strstr(szSubj, lr_eval_string("{Subject}") );// check if email has a relevant SUBJECT

lr_output_message("the Subject of the mail is %s", szSubj);


fromid = mapi_get_property_sz_ex(&mapi,"From");

//ifromResult = strstr(fromid, lr_eval_string("") );

ifromResult = strstr(fromid, "Rudraraju, Madhusudhanaraju");// check if email has a relevant SUBJECT

lr_output_message("the from of the mail is %s", fromid);


if (iCmpResult != NULL && ifromResult != NULL) {

iEmailCounter++;

break;

}

 } while (rc == LR_PASS);

 if(iCmpResult !=NULL && ifromResult != NULL) {

break;

}

 } while ( loopTime < 900 );

 if (iEmailCounter != 0) {

//print the body property 

lr_output_message("the body of the mail is %s", message);


//String extraction using LB & RB

CStr = (char *)calloc(8000000,sizeof(char));

strcpy(CStr, message); //Save it to the C variable

if ( start = (char *)strstr( CStr, LB ) ) //Finds the first occurance of LB in CStr

    {

        start += strlen( LB );

        if ( end = (char *)strstr( start, RB ) ) //Finds the first occurance of RB in CStr

        {

            CorrParam = ( char * )malloc( end - start + 1 );

            memcpy( CorrParam, start, end - start );

            CorrParam[end - start] = '\0';

        }

    }

//Save the extracted string to a text file

if ((logfile = fopen("C:\\Users\\vinoth.srinivasan\\Desktop\\Email\\AuthCode.txt", "a+")) == NULL) 

{

return -1;

}

fprintf(logfile, "%s\n", CorrParam);

fclose(logfile);

if ((fromfile = fopen("C:\\Users\\vinoth.srinivasan\\Desktop\\Email\\AuthCodeFromID.txt", "a+")) == NULL) 

{

return -1;

}

fprintf(fromfile, "%s\n", fromid);

fclose(fromfile);

}

free( CorrParam );

lr_end_transaction("MAILING", LR_PASS);

mapi_logout_ex(&mapi);

return 0;

}



VB Script to delete a set of files based on file extension

There might be an instance that you will have to delete all the test data files at the end of each performance test run so that a fresh set of test data files can be created for the next run. Instead of doing this manually at the end of each run use this simple macro do it automatically for you.

Const DeleteReadOnly = TRUE

Set objFSO = CreateObject("Scripting.FileSystemObject")

objFSO.DeleteFile("C:\Users\XXXX\Desktop\SoapTextFiles\*.txt"), DeleteReadOnly

Change the destination folder in the above code and your macro is ready. 

"*.txt" defines that any file with .txt extension will be deleted. 

For deleting files of a different extension replace ".txt" with you desired file extension. Say for example ".xls" to delete excel files.


How to Disable the outlook mail pop in LR Vugen MAPI Protocol

As we all know that MAPI protocol is used for performance testing of Mail boxes.When we run MAPI scripts to test outlook it establishes a connection with the defined outlook profile.After which we can send, read and delete mails.

When the MAPI script tries to read mail box, then Vugen throws a pop up (highlighted in the below image) seeking permission to access the Outlook address book.

So every time we have to click Allow button manually for the script to successfully execute and the same cannot be done when we are going to do a load test with that script.

This can be bypassed by changing the "Programmatic Access Security" settings under Trust Center in our Outlook.

In Outlook Goto File --> Options --> Trust Center --> Click Trust Center Settings --> Programmatic Access



Now select the option - Never warn me about suspicious activity (not recommended) and click ok.

Thats it. Now the Pop up seeking permission to access outlook address book from vugen will disappear when we run the MAPI script.


VB Script to close all the sessions of chrome browser

Dim oShell
Set oShell = WScript.CreateObject ("WScript.Shell")
oShell.Run "taskkill /im chrome.exe", 0, True

CMD script to delete the unwanted replay files from the vugen script folder

We all know that whenever we run the vugen script some replay files will be created in the vugen script folder and the size of the folder will get increased. If we keep running the tests without deleting these unwanted replay files at one point we might come across the disk space issue in the LG or controller where loadrunner scripts are being maintained.

So the below command prompt script will delete these replay files across all the vugen scripts your project has. All you to do is to keep save the below code as .cmd file and keep it in the main parent folder where you have all your vugen scripts and run it at the end of every test which will maintain only the run time files in the vugen script.

Note - the below script is an upgraded version of the previous code which I have shared in this post -
http://vinothperformancetesting.blogspot.com/2017/12/reducing-vugen-scripts-folder-size-by.html

Script Code:

cls
echo
echo
echo This batch file will delete the following files from every
echo folder and subdirectory from the folder in which it is run: -
echo
echo *.idx
echo mdrv*.log
echo mdrv.txt
echo options.txt
echo *.ci
echo combined_*.c
echo output.txt
echo debug.inf
echo *.bak
echo    \result1
echo

REM Append Current Date & Time to Filename
set CUR_YYYY=%date:~10,4%
set CUR_MM=%date:~4,2%
set CUR_DD=%date:~7,2%
set CUR_HH=%time:~0,2%
if %CUR_HH% lss 10 (set CUR_HH=0%time:~1,1%)
set CUR_MM=%time:~3,2%
set CUR_SS=%time:~6,2%
set CUR_MS=%time:~9,2%
set CURTIMESTAMP=%CUR_DD%%CUR_MM%%CUR_YYYY%-%CUR_HH%%CUR_MM%%CUR_SS%

REM These lines create blank files for later file comparisons.
type nul > %cd%\blankfile_%CURTIMESTAMP%.txt
type nul > %cd%\FilesDeleted_%CURTIMESTAMP%.txt

REM These del functions delete the unwanted LoadRunner files and pipe any output into the %cd%\FilesDeleted_%CURTIMESTAMP%.txt file.
del *.idx /s >> "%cd%\FilesDeleted.txt"
del mdrv*.log /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del mdrv.txt /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del options.txt /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.ci /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del combined_*.c /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del output.txt /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del debug.inf /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.bak /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.ini /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.db /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.ci /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.pickle /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.tmp /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.sdf /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.txt /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
del *.log /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"

REM This deletes any sub-folders called result1

FOR /d /r . %%d IN ("result1") DO @IF EXIST "%%d" rd /s /q "%%d"

REM If FilesDeleted.txt, FoldersDeleted.txt or BadParms.txt exist, open them up in Notepad so we can see them.

fc %cd%\FilesDeleted_%CURTIMESTAMP%.txt %cd%\blankfile_%CURTIMESTAMP%.txt > nul
if errorlevel 1 "Notepad.exe" "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"

REM This deletes all the folders with name events inside the data subfolder

FOR /d /r . %%i IN ("events*") DO @IF EXIST "%%i" rd /s /q "%%i"
FOR /d /r . %%j IN ("http*") DO @IF EXIST "%%j" rd /s /q "%%j"

REM Delete *.log/*.dat/*.txt/*.inf/*.ini/*json files inside the data subfolder

FOR /D /R %%G IN ("data") DO (
  IF EXIST %%G CD %%G
  IF EXIST *.c (
    DEL *.log /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.dat /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.txt /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.inf /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.ini /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.json /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.css /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.html /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.gif /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.htm /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.ico /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.jpg /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.png /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.svg /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"
    DEL *.xml /s >> "%cd%\FilesDeleted_%CURTIMESTAMP%.txt"

  )
)

VB script to copy the contents of a text file to excel

Dim objFSO, strTextFile, strData, strLine, arrLines

CONST ForReading = 1

'name of the text file
strTextFile = "C:\Users\vinoth.srinivasan\Desktop\PTE.txt"

'Create a File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Open the text file - strData now contains the whole file
strData = objFSO.OpenTextFile(strTextFile,ForReading).ReadAll

'Split the text file into lines
arrLines = Split(strData,vbCrLf)

'Open a new excel file to copy
Set objExcel = CreateObject("Excel.Application")

'Open an existing excel file to copy
'Set objWorkbook = objExcel.Workbooks.Open("C:\Users\vinoth.srinivasan\Documents\CIBC\vinoth.xlsx")

objExcel.Visible = True
objExcel.Workbooks.Add

'set the column and row in which data has to be copied
intRow = 1
intCol = 1

'Step through the lines
For Each strLine in arrLines
'wscript.echo strLine
objExcel.Cells(intRow, intCol).Value = strLine
intRow = intRow + 1
Next

'Cleanup
Set objFSO = Nothing

objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close