LoadRunner经常使用的C语言原生函数

(1)int rand(void)算法

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

举例:dom

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

int radomNum = rand() % 100+1;测试

二、生成[m,n]范围之间的随机整数,能够套用公式:rand()%(n-m+1)+m。好比生成一个[10,30]的随机整数:this

int radomNum = rand() % 21+10;spa

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

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

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);
    }
}
字符串

注意:

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

二、在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]...:拼接的内容,可选参数,能够是任何类型的数据。

举例:

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

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

三、生成一个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中。

举例:

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

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

}

二、将日期和时间字符串拼接上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 中要搜索的字符)

举例:

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

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

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

二、输出字符“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 形式)

举例:

一、输出“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

相关文章
相关标签/搜索