51Testing软件测试论坛

标题: LoadRunner:customC code [打印本页]

作者: pcl2004_27    时间: 2006-10-30 14:16
标题: LoadRunner:customC code
1.        Writing output file to an external file

#include "as_web.h"


Action()
{
long stream;
char kmp1[6];

lr_vuser_status_message("Iteration %s", lr_eval_string("{it_number}")); //iterations

if( (stream = fopen( "E:\\Current_LTProjects\\test\\order1.txt", "a" )) == NULL )

return(-1);


lr_output_message("Iteration Number:""%s",lr_eval_string("{it_number}"));
strcpy (kmp1,lr_eval_string("{it_number}"));
fprintf(stream,"Iteration number:%s",kmp1);
//fCLose(stream);
        return 0;

}

2. Randomly clicking on URL within a set of URL’s
#include "as_web.h"

int i, rand_selection;
char my_new_parameter[20];

Action1()
{
lr_set_debug_message (LR_MSG_CLASS_PARAMETERS, 1);

        web_url("www.google.com",
                "URL=http://www.google.com/",
                "Resource=0",
                "RecContentType=text/html",
                "SupportFrames=0",
                "Snapshot=t1.inf",
                LAST);

web_reg_save_param("search_param", "LB=<p><a href=", "RB=>", "ORD=All");

        web_submit_data("search",
                "Action=http://www.google.com/search",
                "Method=GET",
                "EncType=",
                "TargetFrame=",
                "RecContentType=text/html",
                "Referer=http://www.google.com/",
                "Snapshot=t2.inf",
                "Mode=HTML",
                ITEMDATA,
                "Name=hl", "Value=en", ENDITEM,
                "Name=ie", "Value=UTF8", ENDITEM,
                "Name=oe", "Value=UTF8", ENDITEM,
                "Name=q", "Value=Bos", ENDITEM,
                "Name=btnG", "Value=Google Search", ENDITEM,
                LAST);

lr_output_message("******************** There were: %s matches", lr_eval_string("{search_param_count}"));

for (i = 1; i <= atoi(lr_eval_string("{search_param_count}")) ; i++)
{
      sprintf (my_new_parameter, "{search_param_%d}", i);

      lr_output_message ("%s", lr_eval_string(my_new_parameter));
}

rand_selection = (rand() % atoi(lr_eval_string("{search_param_count}")) + 1);

lr_debug_message(LR_MSG_CLASS_PARAMETERS, "*************rand selection is %d", rand_selection);

sprintf(my_new_parameter, "{search_param_%d}", rand_selection);

lr_debug_message (LR_MSG_CLASS_PARAMETERS, "The random parameter selection is %s", lr_eval_string(my_new_parameter));

lr_save_string(lr_eval_string(my_new_parameter), "my_new_parameter");

web_url("TEST PARAMETER",
                "URL={my_new_parameter}",
                LAST);



        return 0;
}
3. Declare transaction name dynamically

#include "as_web.h"


Action1()
{

/*
        Purpose:  This script shows how to create dynamic transaction names.  The transaction will
        not show up in the Controller interface but will in the analysis results.

*/

        // declaring variables for transaction names
        char trans_name[20];
        char *name;

        name = "tom";

        // creating the dynamic transaction names
        sprintf(trans_name, "tom_%s", lr_eval_string("{rand_num}"));

        lr_start_transaction(trans_name);
       
        lr_think_time(1);

        lr_end_transaction(trans_name, LR_AUTO);
       
        sprintf(trans_name, "tom_%s", lr_eval_string("{rand_num}"));

        lr_start_transaction(trans_name);
       
        lr_think_time(1);

        lr_end_transaction(trans_name, LR_AUTO);

        lr_output_message("==>%s", name);

        return 0;
}




4. String Usage


// Example 1:

// declaring a prototype
char *strtok(char *, char *);

Actions()
{
    /* this forces the intepreter to save input_line in read/write memory.  
        If a character array is used, value would be save in read only memory
        and would cause a memory violation when strtok is used. */

          char input_line[100] = "Hi, my name is tom.";

        // variable to hold a word from the above phrase.
        char *word;

        // gets the first word in the phrase.
        word = strtok(input_line, " ");

        // prints out the whole phrase.  One word at a time.
        while (word != NULL) {
                lr_output_message("===>%s<===", word);
                word = strtok(NULL, " ");
        } // End of While

        return 0;
}

//==============================================================


//        EXAMPLE 2:
// declare a prototype
char *strstr(char *, char *);

Actions()
{
        // declare C variables
        char str2[10] = "name";
        char str1[50] = "Hi, my name is tom";

        char *temp_buf;

        // Example of how to print out the values
        lr_output_message("===>%s<===", str1);
        lr_output_message("===>%s<===", str2);

        // example of how to use strstr
        lr_output_message("===>%s<===", strstr(str1, str2));
            temp_buf = strstr(str1, str2);

        lr_output_message("===>%s<===", temp_buf);


        return 0;
}

//==============================================================

//        EXAMPLE 3:
char *strtok(char *, char *);
char *strdup(char *);


Actions()
{
    /* this forces the intepreter to save input_line in read/write memory.  
        If a character array is used, value would be save in read only memory
        and would cause a memory violation when strtok is used. */

          char *input_line = strdup("Hi, my name is tom.");
        char *word;

        // variable to hold a word from the above phrase.
        word = strtok(input_line, " ");

        // prints out the whole phrase.  One word at a time.
        while (word != NULL) {
                lr_output_message("===>%s<===", word);
                word = strtok(NULL, " ");
        }        // End of While

        return 0;
}









5. For IP Spoofing – To find out name of host machine
#include "as_web.h"


Action()
{

char *my_ip;
char *my_host;



my_ip = lr_get_vuser_ip();

my_host = lr_get_host_name( );


web_url("yahoo.com",
"URL=http://yahoo.com/",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);

lr_output_message("The IP address is %s", my_ip);

lr_output_message("Host IP address is %s", my_host);
        return 0;
}

6. For viewing vuser status on controller or VUGen(No of iterations)


lr_vuser_status_message("Iteration %s", lr_eval_string("{it_number}")); //iterations






7. Create parameter values programmatically in the script.
Char Group;
Int VuserNumber, iteration=0;
Char parameterValue[20];

Int LR_FUNC Actions(LR_PARAM p)

{
lr_whoami(&VuserNumber, &Group, NULL);
SPRINTF(parameter_Value,%d%s%d”,VuserNumber, Group, iteration);
Lr_save_string(parameterValue,” parameter_name”);
Iteration++;

In this case parameter_name will have some value which will be unique for all vusers per iteration

8. Using lr_advance_param function

#include "as_web.h"

// Requirement:
// Total Vusers: 5
// Total iterations: 3
// Total data in parameter file = 15
// Behavior:
//     Vuser 1 picks up data 1, 6, 11
//     Vuser 2 picks up data 2, 7, 12
//     Vuser 3 picks up data 3, 8, 13
//     Vuser 4 picks up data 4, 9, 14
//     Vuser 5 picks up data 5, 10,15

Action1()
{
        int x,y,v,i;

        //get the VuserID and store it in v
        v=atoi(lr_eval_string("{VuserID}"));

        //get the Iteration number and store it in i
        i=atoi(lr_eval_string("{Iteration}"));

        //For the first iteration, x = VuserID
        if(i==1) x=v;

    //For the second iterations onward, x = number of Vusers + 1
        //You need to modify this number according to the number of Vusers you have in the scenario
        else x=6;       

        for(y=1;y<x;y++)
                lr_advance_param("NewParam");

        lr_output_message("This is vuser %d , iteration %d, with data %s",v,i ,lr_eval_string("{NewParam}"));

        return 0;


9. Parameterize lr_think_time
When the user tries to run a script in which lr_think_time is parameterized, VuGen issues the following errors:
run.c (x): illegal expression
run.c (x): syntax error; found `Param1' expecting `)'
run.c (x): syntax error; found `Param1' expecting `;'
run.c (x): undeclared identifier `Param1'
run.c (x): illegal expression
Solution: Save the string to a int variable
int kmp= atoi(lr_eval_string("{param1}"));
        lr_think_time(kmp);
lr_output_message("The parameter value is %s", lr_eval_string("{param1}"));
..
10. Convert Integer in to String
Action()
{
int i = 1001;
int ii = 1002;
char sVar1[4];
char sVar2[4];

// itoa: 1st pass an integer, next is string to contain integer as string, next is 10 for decimal or 16 for hex
itoa(i, sVar1, 10);
lr_save_string(sVar1, "sVar1");
lr_output_message(sVar1);
itoa(ii, sVar2, 10);
lr_save_string(sVar2, "sVar2");
lr_output_message(sVar2);

        return 0;
}

11.  Generate Unique data thro script

#include "as_web.h"


Action()
{

        /* data record for the database */
        char sJobTitle[1024];
        char *sHolder_JobTitle = "DBA";

        int iRand;
        char sRand[4];
        char xPrefix[4];

    srand(time(NULL)); // seed it always
   /* Generate some random number */
        iRand = (rand() % 1000);
        lr_output_message ("RandomNumber %d\n", iRand);

    /* convert number to string */
    if (!itoa(iRand, xPrefix, 10))
                lr_output_message("Cannot convert iRand to ascii char");
        else {
           lr_output_message("Converted value %s", xPrefix);
     }
       
        // create unique field //

        //strcpy(sJobTitle, xPrefix);
        strcpy(sJobTitle, xPrefix);
        strcat(sJobTitle, sHolder_JobTitle);
        lr_output_message ("Unique JobTitle --> %s\n", sJobTitle);
               
        return 0;




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2