LoadRunner常用的C语言原生函数

醉酒当歌 提交于 2020-03-22 22:35:35

3 月,跳不动了?>>>

(1)int rand(void)

功能:产生随机数。计算机产生的随机数都不是真正意义上的随机数,只是伪随机数,它以一个真值(也称为种子)作为初始条件,然后用一定的算法不停迭代产生随机数。 rand()函数不需要参数,它将会返回0到RAND_MAX之间的任意的整数。

举例:

1、生成1-100直接的随机整数

int radomNum = rand() % 100+1;

2、生成[m,n]范围之间的随机整数,可以套用公式:rand()%(n-m+1)+m。比如生成一个[10,30]的随机整数:

int radomNum = rand() % 21+10;

3、rand()函数一般要搭配srand(unsigned int seed)一起使用,srand()作用是设置随机数种子,若未设置,rand()在调用时会自动设随机数种子为1。若设置为固定的种子(或不使用srand),则每次循环输出的序列都是固定的(VS等IDE是固定的,但Loadrunner测试了一下不是固定的),因此常常使用当前的时间(time(0))作为种子(精确到秒),这样只要时间不同,循环的序列就不同。;

/*设置当前时间为种子,循环输出5个随机数*/

void SetRandomNum()
{
    int radomNum;
    int i;
    srand(time(0));
    for(i=0;i<5;i++)
    {
        radomNum = rand() % 100+1;
        lr_output_message("radomNum is %i",radomNum);
    }
}

注意:

1、一定要将srand()放到循环外,循环内的时间太短不足1s,将会导致5个随机数一样;

2、在loadrunner中,变量的定义必须在脚本的最开始,系统函数调用之前,需要把int radomNum、int i;这些语句写到函数最开始,先声明再使用,否则将会报错“illegal statement termination”。是由于Loadrunner12的编译器原理导致的(C98中规定,在任何执行语句之前,在块的开头声明所有局部变量,但在C99以及C++中则没有这个限制,这就解释了在.c下报错,而在.cpp下不报错)Loadrunner都属于C98,即后缀为.c的文件(例如Action.c)。

 

(2)int sprintf(char *buffer, const char *format,[ argument] ...)

功能:字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。常用来拼接字符串(而printf是将一个格式化的字符串输出到屏幕,在LR中不常用)

参数说明:

buffer:char型指针,指向将要写入的字符串的缓冲区,即目的字符串。
format:格式化字符串。
[argument]...:拼接的内容,可选参数,可以是任何类型的数据。

举例:

1、把整数123 打印成一个字符串保存在s 中
sprintf(s, "%d", 123);

2、将int类型的YmaxNum的参数转化为字符串类型
sprintf(Ymax, "%d", YmaxNum);

3、生成一个int类型的随机数,将其转化为字符串类型,并输出

Action()
{
    int radomNum;    
    char radomChar[10];

    radomNum = rand() % 100+1;
    sprintf(radomChar,"%d",radomNum);   //将int类型的radomNum转化为char类型,并存储在radomChar中
    
    lr_output_message("随机数是 %s",radomChar);     
    return 0;
}

//输出结果:Action.c(7): 随机数是 55

 

(3)extern char *strcat(char *str1, const char *str2);

功能:将两个char类型连接,也就是把字符串str2连接到字符串str1后面,连接后的结果放在字符串str1中。

举例:

1、定义并拼接2个字符串,再输出

Action()
{
    char d[20]="Golden";
    char s[20]="View";
    strcat(d,s);
    lr_output_message("%s",d);    //输出d,结果为“GoldenView”

}

2、将日期和时间字符串拼接上2位随机数并输出

Action()
{
    int radomNum;    
    char radomChar[10];

    radomNum = rand() % 100+1;
    sprintf(radomChar,"%d",radomNum);     //将int类型的radomNum转化为char类型,并存储在radomChar中

    lr_save_datetime("%Y%m%d_%H%M%S",DATE_NOW,"dateTime");       //将当期日期时间存储到参数dateTime中
    lr_output_message("issueName is %s",strcat(lr_eval_string("{dateTime}"),radomChar));      //将日期和时间字符串拼接上2位随机数并输出

    return 0;
}

 

(4)char *strcpy(char *str1, const char *str2);

功能:复制字符串,将str2的内容复制到str1中。(如果想把一个字符串的一部分复制到另一个字符串的某个位置可以使用strncpy()函数)

举例:

char str2[100]="这是一个例子";
char str1[100];

strcpy(str1,str2);

lr_output_message("str1的值为%s",str1);

 

(5)unsigned int strlen(char *s)

功能:获取字符串长度,不包括结束符NULL。如果字符的个数等于字符数组的大小,那么strlen()的返回值就无法确定,得出的结果是错误的,strlen()会继续向后检索,直到遇到'\0'。所以下方例子中s3的长度不对,但s4的长度正确(\0代表字符数串的结束标志);

举例:

char *s1="这是一个例子";
char s2[100] = "这是一个关于Loadrunner的strlen()函数的例子";
char s3[5] = "12345";
char s4[7] = "12345\0";

lr_output_message("字符串的s1的长度是:%d",strlen(s1));
lr_output_message("字符串的s2的长度是:%d",strlen(s2));
lr_output_message("字符串的s3的长度是:%d",strlen(s3));
lr_output_message("字符串的s4的长度是:%d",strlen(s4));

运行结果:

Action.c(47): 字符串的s1的长度是:12
Action.c(48): 字符串的s2的长度是:42
Action.c(49): 字符串的s3的长度是:10
Action.c(50): 字符串的s4的长度是:5

 

(6)char *strchr(const char *str, int c)

功能:查找字符串str中首次出现字符c的位置,如果未找到该字符则返回 NULL。(str -- 要被检索的 C 字符串,c -- 在 str 中要搜索的字符)

举例:

1、输出“www.baidu.com”中第一个“.”后面的字符串

char str[] = "www.baidu.com";
char ch = '.';
lr_output_message("|%c| 之后的字符串是 - |%s|\n",ch,strchr(str, ch));

//输出结果:|.|之后的字符串是-|.baidu.com|

2、输出字符“c”第一次出现的位置

char *str="www.baidu.com";
char *str1;
str1 = (char *)strchr(str,'c');

lr_output_message("c第一次出现是在%s",str1);

//输出结果:com

 

(7)char *strrchr(const char *str, int c)

功能:查找字符串str中最后一次出现字符c的位置,如果未找到该字符则返回 NULL。(str -- 要被检索的 C 字符串,c -- 要搜索的字符。以 int 形式传递,但是最终会转换回 char 形式)

举例:

1、输出“www.baidu.com”中最后一个“w”后面的字符串

char str[] = "www.baidu.com";
char ch = 'w';

char *ret = (char *)strrchr(str,ch);
lr_output_message("|%c| 之后的字符串是 - |%s|\n",ch,ret);

//输出结果:w.baidu.com

 

(8)char *strupr(char *str);

功能:将指向的字符串全部转换为大写的形式

char str[20] ="This is a test Demo";
char *str1 = NULL;
str1 = (char *)strupr(str);

lr_output_message("str的内容转化为大写为%s",str1);

//输出结果:THIS IS A TEST DEMO

 

(8)char *strlwr(char *str);

功能:将指向的字符串全部转换为小写的形式

char str[20] ="This is a test Demo";
lr_output_message("str的内容转化为大写为%s",strlwr(str));

//输出结果:this is a test demo

 

(9)extern int strnicmp(char *st1,char * st2,int n)

功能:(不区分大小写)比较字符串str1和str2的前n个字符串字典序大小,常用来比较两个字符串是否一样。

说明:比较是这样进行的,先比较两个字符串的第1个字符字典序的大小,如果能比较出大小,则马上返回了,如果不能区别大小,开始比较第2个,如果这时第1个字符串已经到尽头了,第2个字符串还有字符,这时算第2个字符串大

当s1<s2时,返回值-1<0
当s1=s2时,返回值=0
当s1>s2时,返回值1>0

类似的函数:

extern int strncmp(char *s1,char * s2,int n); //(区分大小写)比较字符串str1和str2的前n个字符串字典序的大小
extern int strcmp(char *s1,char * s2); //(区分大小写)比较字符串str1和str2的字典序的大小
extern int stricmp(char *s1,char * s2);//(不区分大小写)比较字符串str1和str2的字典序的大小

举例:不区分大小写比较str1和str2字符串,前10位是否一样

char str1[100] ="Welcome to the HP LoadRunner Online Function Reference";
char str2[100]="WELCOME TO THE HP LOADRUNNER ONLINE FUNCTION REFERENCE";
int num;

num = strnicmp(str1,str2,10);

if(num == 0)
    lr_output_message("str1 == str2");
else if(num > 0)
    lr_output_message("str1 > str2");
else if(num < 0)
    lr_output_message("str1 <  str2");

//输出结果str1 == str2

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!