A few weeks ago I’ve been proposed to test the latest build of Login PI by LoginVSI Product Manager, Mark Pletettenberg. The Login PI active monitoring solution uses a single synthetic user running 24/7, to monitor and to safeguard the optimal performance and availability of your own (or outsourced) virtual desktop infrastructure and associated business applications.
If you want to learn more about the product, you can visit the LoginVSI website: https://www.loginvsi.com/products/login-pi
Since my lab is running on AHV, I had to make a small modification to the installation procedure. The Login PI VM is distributed as an OVA file that are not supported by AHV, you need to “unzip” the OVA file (using 7 Zip for example) to retrieve the vmdk file.
Once the vmdk file retrieved, you can add it to the image configuration of your Nutanix cluster using Prism:
Click “Upload Image”
Fill the form to upload the file:
Once uploaded you can now create a VM by using this disk:
I created my VM with the following parameters: 2 vCPU / 8 GB of RAM / 1 NIC
You can then follow the “default” setup to get this:
This new look and feel is pretty good compared to the previous version!
The new feature that is really interesting is the availability to go deep in the application testing using custom scripts called Deep Application Performance Testing.
- Advanced workflows can be built including conditional logic statements to provide more resiliency and flexibility in reproducing real-life enterprise line-of-business workflows. Applications can be added without using scripting.
- Workflows can be edited including intellisense and syntax highlighting. The workflows can be edited without connection to the Login PI backend making customization of end-user workflows easy to do and time efficient.
- Granular workflow actions and event timings can all be scheduled separately, offering complete freedom and flexibility in orchestrating how synthetic users measure and monitor applications in the digital workspace.
- Enhanced support for all major line-of-business applications (e.g., EPIC, Cerner, AllScripts, Etc..) and productivity applications (e.g., Microsoft Office), including highly integrated plug-ins, out-of-the-box workflows and scripts.
As an example, you can “play” with Excel. By default here is the script used:
using LoginPI.Engine.ScriptBase;public class Microsoft_Excel_2016_DefaultScript : ScriptBase{voidExecute(){START();Wait(2);STOP();}}
Mark provided me a script to make the testing more accurate:
using LoginPI.Engine.ScriptBase;public class Microsoft_Excel_2016_Interaction : ScriptBase{privatevoidExecute(){// Define variablesvarCreateTableTitle=”Create Table”;varSaveAsTitle=”Save As”;varOverWriteTitle=”Confirm Save As”;START();// Open new Excel sheetStartTimer(“Open_new_excel_sheet”);MainWindow.Type(“{CTRL+n}”,cpm:0);Wait(0.5);StopTimer(“Open_new_excel_sheet”);// First RowStartTimer(“Creating_First_Row”);MainWindow.Type(“Values {ENTER}”);MainWindow.Type(“12241 {ENTER}”);MainWindow.Type(“97857 {ENTER}”);MainWindow.Type(“75010 {ENTER}”);MainWindow.Type(“44113 {ENTER}”);MainWindow.Type(“44422 {ENTER}”);MainWindow.Type(“11831 {ENTER}”);MainWindow.Type(“24005 {ENTER}”);MainWindow.Type(“36980 {ENTER}”);MainWindow.Type(“28913 {ENTER}”);MainWindow.Type(“{CTRL+b}”,cpm:0);// Create sumMainWindow.Type(“=SUM({UP}”);MainWindow.Type(“{SHIFT + UP}”.Repeat(8));MainWindow.Type(“{ENTER}”);Wait(2);StopTimer(“Creating_First_Row”);MainWindow.Type(“{RIGHT} {CTRL+UP}”,cpm:0);// Second RowStartTimer(“Creating_Second_Row”);MainWindow.Type(“Values {ENTER}”);MainWindow.Type(“88448 {ENTER}”);MainWindow.Type(“26052 {ENTER}”);MainWindow.Type(“81255 {ENTER}”);MainWindow.Type(“71839 {ENTER}”);MainWindow.Type(“75546 {ENTER}”);MainWindow.Type(“30262 {ENTER}”);MainWindow.Type(“48095 {ENTER}”);MainWindow.Type(“75139 {ENTER}”);MainWindow.Type(“46539 {ENTER}”);MainWindow.Type(“{CTRL+b}”,cpm:0);// Create sumMainWindow.Type(“=SUM({UP}”);MainWindow.Type(“{SHIFT + UP}”.Repeat(8));MainWindow.Type(“{ENTER}”);Wait(2);StopTimer(“Creating_Second_Row”);MainWindow.Type(“{RIGHT} {CTRL+UP}”,cpm:0);// Third RowStartTimer(“Creating_Third_Row”);MainWindow.Type(“Values {ENTER}”);MainWindow.Type(“71167 {ENTER}”);MainWindow.Type(“47297 {ENTER}”);MainWindow.Type(“31539 {ENTER}”);MainWindow.Type(“70035 {ENTER}”);MainWindow.Type(“84138 {ENTER}”);MainWindow.Type(“26307 {ENTER}”);MainWindow.Type(“91986 {ENTER}”);MainWindow.Type(“19856 {ENTER}”);MainWindow.Type(“93516 {ENTER}”);MainWindow.Type(“{CTRL+b}”,cpm:0);// Create sumMainWindow.Type(“=SUM({UP}”);MainWindow.Type(“{SHIFT + UP}”.Repeat(8));MainWindow.Type(“{ENTER}”);Wait(2);StopTimer(“Creating_Third_Row”);MainWindow.Type(“{RIGHT} {CTRL+UP}”,cpm:0);// Fourth RowStartTimer(“Creating_Fourth_Row”);MainWindow.Type(“Values {ENTER}”);MainWindow.Type(“43915 {ENTER}”);MainWindow.Type(“1957 {ENTER}”);MainWindow.Type(“9151 {ENTER}”);MainWindow.Type(“8775 {ENTER}”);MainWindow.Type(“7152 {ENTER}”);MainWindow.Type(“1437 {ENTER}”);MainWindow.Type(“3472 {ENTER}”);MainWindow.Type(“2363 {ENTER}”);MainWindow.Type(“5552 {ENTER}”);MainWindow.Type(“{CTRL+b}”,cpm:0);// Create sumMainWindow.Type(“=SUM({UP}”);MainWindow.Type(“{SHIFT + UP}”.Repeat(8));MainWindow.Type(“{ENTER}”);Wait(2);StopTimer(“Creating_Fourth_Row”);MainWindow.Type(“{RIGHT} {CTRL+UP}”,cpm:0);// Fifth RowStartTimer(“Creating_Fifth_Row”);MainWindow.Type(“Values {ENTER}”);MainWindow.Type(“8896 {ENTER}”);MainWindow.Type(“54 {ENTER}”);MainWindow.Type(“163 {ENTER}”);MainWindow.Type(“871 {ENTER}”);MainWindow.Type(“108 {ENTER}”);MainWindow.Type(“444 {ENTER}”);MainWindow.Type(“433 {ENTER}”);MainWindow.Type(“670 {ENTER}”);MainWindow.Type(“11 {ENTER}”);MainWindow.Type(“{CTRL+b}”,cpm:0);// Create sumMainWindow.Type(“=SUM({UP}”);MainWindow.Type(“{SHIFT + UP}”.Repeat(8));MainWindow.Type(“{ENTER}”);Wait(2);StopTimer(“Creating_Fifth_Row”);// Creating a tableStartTimer(“Creating_Table”);Wait(1);MainWindow.Type(“{UP}”);MainWindow.Type(“{CTRL+A}”,cpm:0);Wait(1);MainWindow.Type(“{ALT+N+T}”,cpm:0);Wait(1);varCreateTableWindow=FindWindow(title:CreateTableTitle);CreateTableWindow.Type(“{ENTER}”);Wait(1);MainWindow.Type(“{RIGHT}”);Wait(4);StopTimer(“Creating_Table”);// Saving the file in tempMainWindow.Type(“{CTRL+s}”,cpm:0);MainWindow.Type(“{ALT+a+o}”,cpm:0);Wait(1);varSaveAs=FindWindow(title:SaveAsTitle);SaveAs.Type(@”%temp%\LoginPI\excelpi.xlsx”,cpm:0);StartTimer(“Saving_file”);SaveAs.Type(“{ENTER}”);varSaved=FindWindow(title: “*excelpi*”,timeout:10,continueOnError:true);if (Saved!=null){StopTimer(“Saving_file”);Log(“File is saved”);}else{varOverWriteWindow=FindWindow (title:OverWriteTitle,timeout:3);CancelTimer(“Saving_file”);OverWriteWindow.Type(“{LEFT}”);StartTimer(“Saving_file”);OverWriteWindow.Type(“{ENTER}”);FindWindow(title: “*excelpi*”,timeout:10);StopTimer(“Saving_file”);Log(“File is overwritten”);}Wait(2);STOP();}}
This script will allow you to have this kind of report:
Isn’t that super cool?