The New Virtual Table Server (VTS) in LoadRunner 11.52

Contributor: Zhi-Yuan Jing (Known as Jason), HP LoadRunner RnD Jason Jing.jpg

(Janson has been in HP LoadRunner RnD for over three years, and is currently leading Shanghai team to work on some LoadRunner technology areas)

 

As part of the new version 11.52 of LoadRunner we have created a new virtual table server (VTS).

Today we will share with you what is VTS and how you can take advantage in this important feature.

 

For those who have never use VTS before, Virtual Table Server (VTS) is a tool that shares data and parameters between LoadRunner vusers. Unlike standard parameterization functionality, VTS use a centralized repository to store data, therefore data can be passed between vusers during the load testing. Below diagram shows how VTS is used in load testing:

 

VTS1.png

 

 

In the above diagram, you can first prepare the parameter data by importing tabular data into VTS from other data sources, e.g. database or CSV files. Then follow the below steps to do load test:

  1. Start load test from Controller.
  2. Controller will in turn launch VUsers on Load Generator machines.
  3. In each VUser, VTS APIs can be called to access data from the VTS Server.

 

With the release of 11.52, HP has released a whole new VTS, with some enhanced features. The new VTS APIs is backward compatible and can be used in all protocols that uses C language as well as TruClient. You can see the new console UI in the below screen:

 

VTS2.png

 

Features of the new VTS

Here are the comparison between the old VTS and the new one:

 

  • Old VTS is a windows based application, which means before running a load test, users have to log on a machine, and manually launch the VTS console in order to start it. And also all the administration work, like importing/exporting data, view the data, can only be performed locally on VTS console machine. New VTS console has web interface and users can manage the VTS remotely using any web browsers like IE, Chrome, and Firefox. It runs as a windows service, and starts automatically when machine starts.

 

  • Old VTS stories everything in memory, which can cause data loss when machine or VTS console crashes. Also, the amount of data stored in the VTS is limited by the memory. The new VTS persists data to disk automatically, using a very fast NoSQL data engine, therefore can achieve high throughput and at the same time avoid data loss.

 

  • For the old VTS, there are some manual work to be done when using it, e.g. add code #include "vts2.h", load the DLL with the statement lr_load_dll("vtclient.dll"), copy the VTS header file, lib file as well as DLL file to each LG machine. These steps are no longer needed for new VTS. As long as every machine is updated to 11.52, you can start using it, no need to add #include statement for any specific header file, or load particular DLL.

 

  • The new VTS is integration into the run logic control of LoadRunner script. For those who are not familiar with the run logic, it is the logic to decide whether to terminate the execution of current iteration or the load test. Old VTS doesn’t have such mechanism, when some API fails because of VTS server issue, user needs to add code to check the last error, log the message, and exit if it fails. With new VTS, a VTS error can cause the current iteration to fail, and error will be logged automatically. Also, user can override this behavior by checking the option “Continue on error” in the Runtime Setting, so that when error occurs to the VTS, it will continue to execute the rest of code.

 

  • Because the console UI of the new VTS can be accessed remotely, we allow user to secure the console UI by enabling basic authentication and https, with some manual configurations.

 

  • Another enhancement is that the new VTS APIs are available to Linux LG, which means that you can also use VTS now if you are running script on Linux LG machines.

 

  • Unicode support. While in LoadRunner C script, multi-byte encoding are still used for all text strings, the VTS server, which is built on top of node.js, fully supports Unicode. That means you can key in the multi-lingual strings on the console UI, or import Unicode text file into the VTS and display them correctly. Whether the string can work correct in the load testing depends on the system locale setting of LG machine. The Unicode string will be converted to multi-byte strings when data is retrieved to the LG during run time, and multi-byte string will be converted to Unicode when save back to the VTS machine. This means you can use a single data source to work with LG machine that in different locales.

 

  • The size of the data supported also increased significantly. We have tested the data of 10 million rows. And the performance of accessing data randomly is a constant, irrelevant to the number of rows stored in the repository.

 

  • Last but not least, compare to old VTS, which is an unsupported tool, now new VTS will be fully supported by HP and if you find any problems using it, or have any suggestions, you can contact support for help.

How to upgrade to the new VTS

LoadRunner 11.52 also provides users smooth experience upgrading to new VTS. The APIs signatures are fully compatible with the old VTS APIs:

 

  • For anyone who are used to old VTS and want to continue use the old one after applying 11.52, nothing will be change as long as he didn’t change the VTS code. It will continue to work as before. LoadRunner actually decides whether a script is using old VTS or the new one by checking whether it calls lr_load_dll("vtclient.dll") at the beginning and whether "vts2.h" header is included. If these statements exist, LoadRunner will provide you the old VTS APIs. Otherwise, will link these APIs to the new VTS implementation.

 

  • For those who installed 11.52, and want to use the new VTS, they can write similar code as old VTS, just with minor modifications: change type PVCI to PVCI2 and type VTCERR to VTCERR2, and don’t load the DLL "vtclient.dll".

 

The new VTS consists of two parts, the vuser side is tightly integrated with the LoadRunner, and is installed with 11.52. The VTS server side needs separate download and install.

 

If you want to use the new VTS, you can take the following steps to install the new VTS and experience it:

  • Install 11.52 on all load testing machines, particularly, the VuGen and LG machines.

 

  • Install VTS server on a server machine, it can be a separate machine, or any of existing load testing machine, depends on how much load VTS service will have. You can either install 32 bits version or 64 bits version, depends on your OS type. After installation, the service will start automatically and you can browse to the VTS console UI. The default port is 4000, therefore the URL is something like http://localhost:4000. You can specify a different port during the install or afterwards.

 

  • On the console UI, you can import data by uploading a CSV file, or typing in a connection string to import from database directly. The following screen shows the UI of importing data:VTS3.png

 

 

 

  • Create a C language script, like Web Http/Html script. Add VTS API in vuser_init method to connect to the server, like the following:

int   rc = 0;
char  *VtsServer = "192.168.0.100";
int   nPort = 8888; 
    
PVCI2 pvci = 0; 

vuser_init()
{
        
    pvci = lrvtc_connect(VtsServer,nPort,VTOPT_KEEP_ALIVE);
    lr_log_message("pvci=%d\n", pvci);
        
    return 0;
}

 

  • In Action.c, add some code to retrieve one column from the server and remove from the server at the same time. You can run the action multiple iterations, and it will retrieve one:

char * cname; //column name
int ret;

 

RetrieveMessage()
{
    lr_start_transaction("retrieve_column");
    rc =  lrvtc_retrieve_messages1("cname",";");
    lr_log_message("lrvtc_retrieve_messages1 rc=%d\n", rc);
    lr_log_message("cname is %s", lr_eval_string("{cname}"));
    lr_end_transaction("retrieve_column", LR_AUTO);
}

Action()
{
    RetrieveMessage();
    return 0;
}

 

  • In vuser_end.c, add API call to close the VTS handle:

vuser_end()
{
    lrvtc_disconnect();    
    return 0;
}

 

 

  • You can test it in VuGen and run it in Controller. Don’t forget to turn on the API access port before you run the script. Like old VTS, the new one use 8888 as the port for API to access. It is turned off by default, so you need to browse to the administrative UI to enable it.

 

For more information, you can access API document in VuGen or access the VTS server document by click “Help” on the console UI page.

 

To get more tips, you can also go to How to setup Virtual Table Server (VTS), download the previous VTS and document (it will require a HP passport account). All the old VTS APIs are supported by the new version, therefore, the API usage doc still applies.

 

To learn more about HP LoadRunner: www.hp.com/go/loadrunner

 

 WatchMovie.png

 

 

 

 

 

 

Comments
NaveenKumar N(anon) | ‎05-15-2013 11:47 PM

Thanks for the insight article about VTS. New VTS is rocking. Thanks to HP RnD!

Lionel Giavelli(anon) | ‎05-21-2013 10:55 AM

You're referencing a restricted internal KB into a public post...

| ‎05-21-2013 11:33 AM

To get more tips, you can also go to How to setup Virtual Table Server (VTS), download the previous VTS and document (it will require a HP passport account). All the old VTS APIs are supported by the new version, therefore, the API usage doc still applies.

sivaGelli(anon) | ‎05-21-2013 07:34 PM

Hi,

 

I would like to know the maximum no. of connections that would be supported.

 

I am looking for testing an application which has 4000 concurrent users. Please let me know if new VTS can support these many connections.

 

Appreciate your suggestions!

 

Thanks,

Siva

neil_clegg(anon) | ‎05-22-2013 01:11 PM

this is a good step forward HP well done - always thought vts would be good integrated into LR

Bill Desjarlais(anon) | ‎06-03-2013 10:27 AM

Can the VTS functions only be called from "C" scripts?

 

i.e. A .net script that generates C# can/cannot use the VTS?

Sachin Ohal(anon) | ‎06-17-2013 09:31 AM

Hi Jason

 

Greetings for the day!

 

As discussed in a status call. Below article have information that ALM PC 11.52 is supported or compatible with all old VTS version. However, it is not true.

 

http://h30499.www3.hp.com/t5/HP-LoadRunner-and-Performance/The-New-Virtual-Table-Server-VTS-in-LoadR...

 

 

We have faced lot of issue with ALM PC 11.52 and VTS 2.12. Finally when we have upgrade the VTS to ALM VTS 11.52 all issue resolved. We request you please give your valuable time and read the article and below information

 

 

  

Error While running load test: This error clearly indicate the VTS version issue

 

 

 VTS Error

 

 

 

 

Need to make the changes in Script for below function for VTS 11.52

 

 

  1. Comment out the linelr_load_dll("vtclient.dll"); in your script. Also, there is no need to include the header file vts2.h in your script

 

  1. To connect to the VTS server, please use the below code snippet:

 

PVCI2  ppp;

ppp = lrvtc_connect("24.40.76.116",8888,VTOPT_KEEP_ALIVE);//OLd VTS Server - 24.40.76.31
        lr_log_message("ppp=%d\n", ppp);
        
        if (ppp!=0) {
            lr_error_message("Not Able to connect to VTS Server = %d",rc);
           <Abort/Exit the Vuser>

        }

else {

<Your Logic>

}

 

  1. To disconnect from the VTS server, please use the below code snippet:

 

    lrvtc_disconnect(ppp);

 

 

  1. To Retrieve the value of a column use the below code snippet

int rc;

if ( (rc =  lrvtc_query_column("<VTS Table Column Name>",1))!=0)
            {
                lr_output_message("Error Querying the column. Status =%d", rc);
            }
            else
        {
                lr_output_message("Old Value is = = %s",lr_eval_string("{<VTS Table Column Name>}"));
        
        }
        

 

 

  1. To increment the value of a column use the below code snippet

int newValue;

newValue=lrvtc_increment("<VTS Table Column Name>",1,1);

 lr_output_message("New Incremented Value is = %d",newValue);

 

 

 

 

Also AJAX Protocol issue and user is unable to

 

 

The below snippet was used (in globals section) for connecting to the new VTS; however, it was successful only for Web HTTP protocol, but failed for Ajax Click and SCript protocol.

 

Ajax Click and SCript throws the follwoing error while compilation: "Syntax error; found 'con' expecting ';'"

 

code snippet:

#include "as_web.h"

//--------------------------------------------------------------------

// Global Variables

 

#endif // _GLOBALS_H

 

int flagloop=0;

long fd;

char *a;

 

char **Address=NULL;

unsigned short status;

 

PVCI2 con=0;

int rc=0;

int           colSize;

 

char *VtsServer = "VTS Server Name Or IP ";

 

Regards,

Sachin Ohal

HP Expert | ‎06-18-2013 08:46 AM

Regarding the question of how many vusers one machine can support, we have tested running 5000 vusers against one VTS instance hosted on a VM machine, and it works. So the number of TCP connections is not a problem. The actual load to the VTS server depends on how frequent you make VTS API calls to the server.

HP Expert | ‎06-18-2013 08:53 AM

The VTS currently only support "C" scripts and TruClient. It does not support NET protocol now.

HP Expert | ‎06-18-2013 06:56 PM

I verified Ajax Click & Script on 11.52, and it can work with new VTS. For the issue you encountered, which is "Syntax error; found 'con' expecting ';'". I guess it may because the 11.52 (SP2) is not applied successfully? Because when you declare a variable with a type that is undefined, you will get this error. PVCI2 type is only defined after SP2 is applied.

HP Expert | ‎06-26-2013 07:02 AM

Some may have problem connecting to old VTS from 11.52. This is because there is a problem in 11.52 that causes script to hang on vtc_connect when connecting to old VTS. It will be fixed in the next available patch. To work around this, please call lrvtc_noop() or vtc_noop(0) before calling lrvtc_connect, like the following:

 

        lrvtc_noop(  );

        lrvtc_connect( "<vts_server>", 8888, VTOPT_KEEP_ALIVE );

 

The lrvtc_noop operation does nothing in new vts mode, therefore calling it first won’t have any negative impact. After this API call, the initialization is done and then calling connect API will behave correctly.

Gnanasek(anon) | ‎07-03-2013 11:01 PM

Hi all,

 

Could anyone please provide me the link fot VTS server for LR11.52

Pete Mill(anon) | ‎07-11-2013 02:04 AM

It's good to see the value of VTS being recognised and supported now.  It has been essential to our load testing for many years.

 

Is it possible to run multiple VTS servers on one machine using multiple port numbers using the new VTS?  If so, how is this done?  Under the old VTS I just ran multiple copies of vtconsole.exe but with different port numbers specified on the command line.  Can I do the same thing with NODE.EXE?  Can it be done on the command line or do I need to have multiple copies of configure.json?

 

I would give up running VTS as a service if that was what it took. I don't want to have to run a service for every instance of VTS that I need.  Under the old VTS we just run a command file for each VTS instance needed.

 

Thanks

 

Pete

HP Expert | ‎07-11-2013 03:28 PM

You can download from the following:

 

http://h30499.www3.hp.com/t5/LoadRunner-Information-and-News/LoadRunner-11-52-Service-Pack-Released/...

 

Click "LoadRunner 11.52 Additional Components" link under the bottom. so the VTS Server is one of the component in the package.

 

HP Expert | ‎07-11-2013 04:02 PM

Regarding running multiple instances of VTS on one machine, the new VTS only enables one port per machine. We will support multiple instances in the future release. For the current release, please considering:

 

  •  Import all data to a single VTS if possible. There is no specific data size limit in the new VTS table, therefore importing all data should be able to work as long there is no conflicting columns.

  • The second workaround is relative complex, and descripted in the following steps:

 

1. Go to C:\Program Files\hp\VTS\web folder, copy the engine folder as another folder and put in the same folder. Copy it as engine1 folder.

 

2. Open engine1 -> configure.json file in notepad, and modify the following two keys to different value:

  • "dbPath": "C:/ProgramData/HP/VTS/db/data1",
  • "adminPort": 4001,

Notice that I changed the values above by appending “1” in each of them.

 

3. Open a command line, change directory to C:\Program Files\HP\VTS\web\engine1, and type command “..\node main.js”. now you run another instance of new VTS on admin port 4001, you can browse to it by typing, http://localhost:4001. And it runs side by side with your default instance http://localhost:4000.

 

 

Pete Mill(anon) | ‎07-12-2013 02:49 AM

Thanks for your quick response and actions to consider.

 

I'm sure you'll agree both have their drawbacks compared with the original VTS solution.  Unfortunately I am experiencing the hang on vtc_connect to the old VTS server and the lrvtc_noop does not cure the problem so using 11.52 with old VTS is not possible.  We might continue using LR11.0 with the old VTS but that clearly won't be practical for too long.

 

We have had over a dozen scripts running in a scenario, each with its own data requirements.  To combine all these in  a single data file would be cumbersome.  

 

I expect that duplicating the engine folder will be our preferred option, so many thanks for the detailed description of how to do that. That will save a lot of trial and error in getting it working and with a bit of effort I can make it happen with command files.

 

I'm glad to hear that multiple instances is on the feature enhancement list for a future release

 

 

 

 

 

 

HP Expert | ‎07-12-2013 07:03 PM

Hi Pete,

 

I hear from others that call lrvtc_noop before any connect will solve the hang problem, so not sure you still encounter it. Suggest you to raise a support ticket, so that we can trouble-shoot it for you.

HP Expert | ‎08-19-2013 06:26 PM

One above mentioned problem in VTS 11.52, which hangs when connecting to old VTS, has been solved in Patch 1 and released. Check out the downloading page:

http://support.openview.hp.com/selfsolve/document/LID/LR_03187

PadPill(anon) | ‎08-21-2013 01:34 PM

 

I have installed VTS 11.52.

 

The send message is giving error.

 

vtc_send_message( ppp,"Timestamp",lr_eval_string("{timestamp}"),&status );

 

Replay

 

RVC_Book.c(97): Error: vtc_send_message: Server error -

 

 

 

HP Expert | ‎08-23-2013 08:00 PM

Hi PadPill,

 

Please make sure you are using new VTS syntax to when pointing to new VTS server, and use old VTS syntax to connect to old VTS server. There syntax differences are not so obvious, but important. E.g. including “vts2.h” header and load vtclient.dll is for old VTS. They are not needed for new VTS.

 

If you ensure the syntax is correct and pointing to the right server, you can trouble-shoot by studying the server side log, which is under %temp%\VTS, you can also view it by go to URL http://<server>:4000/data/diag/logs.

shankar_123(anon) | ‎11-22-2013 04:08 AM

HI Silvia ,

 

Had a look on the new VTS ,Great work!

 

From the admin perspective it seems like VTS Supports basic authentication ,But as I see all the users are able to see each others data and can even delete if they want to .

 

Am I missing something here or is it the way it was built

 

Regards

Shankar

Thomas Johnson(anon) | ‎02-05-2014 08:45 AM

I really like the new VTS and so glad to see that it is now a fully supported application. I did read it only works with the C based scripts. I want positive confirmation that that means I will NOT be able to use it with a Java script. If that is correct, as I assume, is there any forcast on when it will be functional with the other protocols, including Java?

 

Tom Johnson

HP Expert ‎02-05-2014 08:24 PM - edited ‎02-11-2014 05:55 PM

Hi Tom,

 

The new VTS does not support Java script yet. We may add support in some future release, but not in the recent LoadRunner 12.0 release. However, the communication between the LoadRunner script and VTS server is based on HTTP & JSON. Therefore, it will be not difficult for users to implement their own client in any languges they want. We have the VTS Communication Spec that describes the JSON format of the communication. You can check out the link below:

 

HP LoadRunner and HP Performance Center > Other Files > VTS3 Communication Specification

 

Jason

 

 

vini05200(anon) | ‎02-25-2014 01:39 AM

Hi

 

Can you let us know how VTS would be configured to work along with performance centre/application lifecycle managment.

vineetkhattar(anon) | ‎02-26-2014 02:54 AM

Great article, helped me resolve VTS issue with LR 11.52 and i'm able to work with new UI.

Also the 11.52(SP2) pack im assuming it is 11.52 service pack 1 mentioned on the Support site since it help me solve issue with PVCI2 being unrecognised.

vineetkhattar(anon) | ‎02-26-2014 02:59 AM

Great article, helped me resolve VTS issue with LR 11.52 and i'm able to work with new UI.

 

Also i could not find 11.52(SP2) pack and applied 11.52 service pack 1 mentioned on the Support site and it help me resolve issue with PVCI2 being unrecognised (Syntax error; found 'pvci' expecting ';')

Subrata Biswas(anon) | ‎03-01-2014 08:06 AM

Only one comment. why do not have LDAP like authentication available? VTS is having basic authentication. Issue, to follow this is - if need to provide access to new member need to restart the service. where as easily it also could have implemented LDAP like authentication. Hope it will get included soonner. As per my requirement i needed to integrate it on top of VTS 11.5, Only I needed to spend more time to understand the architecture for integration where as for development it took marely 5 hours including testing. Hope HP will ingrate it sooner. I am ready to share the architecture the way I implemented it.

HP Expert | ‎03-04-2014 12:41 AM

To answer vini05200:

You can use VTS with Performance Center, in similar way you did with LoadRunner, because it just provides a list of APIs to access the shared parameter data. If you have specific problems that you cannot solve with Performance Center, please let us know.

 

To vineetkhattar:

Yes, 11.52 Patch 1 is the expected client version

 

To Subrata Biswas:

We are still collecting requests on authentication part, to understand the common pattern of authentication in this component. The authentication in theory can be applied to either UI or API, or both. And currently, even though Admin UI can be configured to use basic authentication, the API can be used by any user to access the data. So the current authentication is not a complete protecting solution. Besides, all users authenticated (with basic authentication) can see the same data on UI. If you can provide detailed information on your usage scenario and how you expect authentication behave like, it will help us design the functionality in this area.

vini052000(anon) | ‎03-05-2014 10:41 PM

There are 2 ways of retrieving column (vtc_query_column and lrvtc_query_column).

We are able to populate data but not able to retrieve it using rvtc_query_column

 

VTCERR/VTCERR2 is not called explicitly how do we make the change

vini052000(anon) | ‎03-05-2014 10:45 PM

There are 2 ways of retrieving column (vtc_query_column and lrvtc_query_column).
We are able to populate data but not able to retrieve it using rvtc_query_column

 

It was mentioned make VTCERR to VTCERR2 since VTCERR is not called explicitly, any other way to ensure this change gets reflected.

P_Tester(anon) | ‎05-05-2014 12:03 PM

does VTS work with RTE protocol?

Ylena(anon) | ‎07-09-2014 02:52 PM

Great feature, glad to see it is now officially supported by LR R&D

Currently, there is only one VTS table. For my performance test framework, I need to have multiple tables to be used by different scripts/Vusers

I can implement virtual tables within the same VTS table, but I would like to know if there is perhaps some build in way to implement multiple VTS tables in LR/PC

If not, is this planned in the future releases?

 

Thank you,

Lena

 

lenav | ‎07-24-2014 07:02 AM

Hi Jason,

 

As a response to one of the comments, you provide a workaround to create multiple instances of VTS "

2. Open engine1 -> configure.json ... you can browse to it by typing,http://localhost:4001. "

 

How do I access those other instances of VTS via LR API?

 

Thank you,

Lena

ADQA(anon) | ‎08-30-2014 10:11 AM

Hi, When I'm trying to run my VTS script (old verion) ; some how Aafter the server is connected and the data is imported from XL (saved as CSV) ; the script is not abe to read the toaal row count from the VTS input table.

will appriciate a quick resposne.

 

HP Expert | ‎09-08-2014 03:26 PM

VTS has an API to query total row count for a particular column, which is vtc_column_size (or lrvtc_column_size). Are you using this one, and what's the problem calling it? If you need some more prompt response, please submit a ticket so that we can help you directly.

rbnaveenkumar | ‎09-25-2014 11:04 PM

Hi All,

 

Greetings!

 

We are using LoadRunner 11.52 for load testing. We implemeted VTS server to store key values.

 

Here, The script which connects to VTS server is working fine under localhost machine i.e where controller & VTS server is installed.

 

But, if we run the script in load generators getting an error as following.

 

vuser_init.c(15): Error: lrvtc_connect: Failed to connect server. Please check the server name, port number, network connectivity or whether server above 11.52 version is started. 

 

Load Generator is outside the network and connected through MI Listener.

 

Observation: http://localhost:4000/ is working when we accessed using browser. (replace localhost with controller or VTS server machine ip address) 

 

Note: Disabled Windows Firewall in all th machines. (controller, mi listener, load generator)

 

Please help us in resolving this issue.

 

Thanks,

Naveen

HP Expert | ‎11-06-2014 06:22 AM

For the connectivity problem, there is a list of things to check, for example:

 

  1. Whether you have enabled the API access from the web UI.
  2. Whether the firewall of the API port (e.g. 8888) has been disabled, to allow connecting from LG
  3. http://localhost:4000/ is the web UI port, API access VTS using a different port(default is 8888), please check you are using the correct port in script
  4. Whether you have replaced "localhost“ with the real server name

 

Try to access the API port in browser of the LG machine, for example http://<server>:8888/, you should see something like "Hello from Connect", which indicate the port is listened by VTS. If you cannot return a valid HTTP response, you should trouble-shoot the server side.

 

If still doesn't work, please try HP support.

 

Leave a Comment

We encourage you to share your comments on this post. Comments are moderated and will be reviewed
and posted as promptly as possible during regular business hours

To ensure your comment is published, be sure to follow the Community Guidelines.

Be sure to enter a unique name. You can't reuse a name that's already in use.
Be sure to enter a unique email address. You can't reuse an email address that's already in use.
Type the characters you see in the picture above.Type the words you hear.
Search
Showing results for 
Search instead for 
Do you mean 
About the Author
WW Sr Product Marketing Manager for HP ITPS VP of Apps & HP Load Runner
Featured


Follow Us
The opinions expressed above are the personal opinions of the authors, not of HP. By using this site, you accept the Terms of Use and Rules of Participation.