今天在调试LR的脚本(C)时遇到了几个甚是头痛得问题,下面简单总结下:

1、首先LR中的C编译器遵循C90标准,规定在一个函数中,变量定义必须放在所有的执行语句之前!一旦在运行语句之间再有定义的话,会报错误!在实际写代码是经常会犯这个错误。不过对于函数外的全局变量就没有这个规定了(用于运行 Vuser 脚本的 C 解释器仅支持 ANSI C 语言。它不支持Microsoft 对 ANSI C 的任何扩展)。

向Vuser脚本中添加任何C函数前,请注意下列限制:

➤ Vuser 脚本不能将其中某个函数的地址作为回调传递给库函数。
➤ Vuser 脚本不支持 stdargs、 longjmp 和 alloca 函数。
➤ Vuser 脚本不支持结构参数或返回类型。支持指向结构的指针。
➤ 在 Vuser 脚本中,字符串为只读。任何写入字符串的尝试都将生成访问冲突。
➤ 必须转换不返回 int 的 C 函数。例如, extern char * strtok();

2、当在LR中定义一个数组时,数组的大小是有限制的,当定义的局部变量数组过大时会报如下的错误(实际发生错误的定义数组的语句在第3行):

  在我的机器上LR中定义数组的大小为1000000或100000都会出现这个问题,相同机器的VS中定义数组大小定义1000000时正常,但是再大一个数量级运行时也会出问题。所以数组定义的大小不要太大(跟具体机器的栈大小有关),我的机器(32位 4G内存)上LR中可定义的局部数组变量大小最大大概为32736(约32K),注意这个值是局部变量数组所能申请到的最大字节值,全局的数组变量可定义的总大小大一些,我的机器上这个值大概为642000000稍大一点(约642M)。超过最大值会报如下的错误。当需要的空间较大,数组不能满足时可以使用动态内存分配在堆中申请内存空间,另外,当处理的数据量或文件很大时考虑进行流的分部处理(一部分一部分的处理)。

Run-Time Settings file: "E:\yProgram\yLR\testEnc\\default.cfg" [MsgId: MMSG-27141]
Error: An exception was raised while calling invocation function in interpreter extension cciext.dll: System Exceptions: EXCEPTION_ACCESS_VIOLATION.

3、在LR中定义文件句柄:FILE *fp; 会如下报错:

  可知,LR的编译器并不认识FILE类型,但当要写文件操作时怎么办?这里的解决办法就是直接定义一个long类型的变量,如:long fp;fopen函数打开的文件赋给fp即可。

4、以下是字符数组的错误初始化方法:

  char p[100];
  p = "asdgasdg";

  正确应该为:char p[100] = "asdgasdg";

  但是这样写是错误的:char p[100] = lr_eval_string("{testParam}");

  以下几种也都是正确的写法:

  1、char p[100]; strcpy(p, lr_eval_string("{testParam}"));

  2、char p[100]; sprintf(p,"%s",lr_eval_string("{testParam}"));

  3、char *p = NULL; p = lr_eval_string("{testParam}");

 

5、fwrite()函数调用问题,函数原型是:size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream),参数说明如下:

(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
  当要写入的buffer中的数据是大小为50K的字符串时,设置size为50K,count为1,写入会有问题,写入的数据会不完整(没有完全写入),这里如果设置size为1,count为50K,则写入就正常了。why?看来还待继续学习C语言了。
 
6、小技巧:在输出语句lr_output_message中加上Notify:能使输出的语句在输出日志中蓝色高亮显示,如:lr_output_message("Notify:当前用户: %s", buffer);

示例代码:

 Action()
{
char *q = lr_eval_string("{canshu}");
int i = strlen(q); //FILE *fp;
long fp;
int count; lr_output_message("q: %s",q);
lr_output_message("i = %d",i); if((fp = fopen("e:\\filename","wt")) == NULL)
{
lr_output_message("Open File Failed!");
return -;
} count = fwrite(q,,i,fp); lr_output_message("count = %d",count);
fclose(fp); return ;
}

LR中的C语言问题的更多相关文章

  1. LR中的编码问题

    [转载]LoadRunner字符集与检查点的探讨 很多人在loadrunner测试脚本中加入中文检查点的时候会出现检查失败的情况,究竟是为什么呢?其实是被测试系统与loadrunner字符集之间的转换 ...

  2. LR脚本用户自定义C语言函数

    LR脚本实战:用户自定义C语言函数 Loadrunner可以使用标准C语言的函数,因此我们可以在脚本中编写自己的函数用于调用,把脚本结构化,更好的进行重用. 先看一个例子: Action() { in ...

  3. LR中的时间戳函数web_save_timestamp_param

    以前真没注意过后面看某个群有人说到这个函数一查,还真有,那么处理时间戳就简单很多了,我们经常在各种网站上看到类似于这样的时间戳 51Testing软件测试网"d bLq!uR&am ...

  4. 第九篇:在SOUI中使用多语言翻译

    为UI在不同地区显示不同的语言是产品国际化的一个重要要求. 在SOUI中实现了一套类似QT的多语言翻译机制:布局XML不需要调整,程序代码也不需要调整,只需要为不同地区的用户提供不同的语言翻译文件即可 ...

  5. LR中日志设置和日志函数

    LR中日志参数的设置与使用 1.Run-Time Setting日志参数的设置 在loadrunner的vuser菜单下的Run-Time Setting的General的LOG选项中可以对在执行脚本 ...

  6. LR中HTTP协议录制模式选择

    在LR中使用HTML/HTTP协议进行脚本录制时面临正确选择HTTP-based script / URL-base script 录制模式的问题,以下是比较官方的建议:1)基于浏览器的应用程序推荐使 ...

  7. c++中使用c语言函数

    在c++中使用c语言的函数时候,该函数必须在c文件中声明extern "C"才可以使用 如:extern "C" c_function_name(int, in ...

  8. IDEA14中安装go语言插件

    在IntelliJ IDEA14中安装go语言插件 go语言的集成开发环境仍不成熟,试用了liteide,感觉很不适应,弹出菜单对程序员的干扰太大.所以就试大牌的IntelliJ IDEA,这工具本来 ...

  9. 测试开发之Django——No6.Django模板中的标签语言

    模板中的标签语言 1.if/else {% if  %} 标签检查(evaluate)一个变量,如果这个变量为真(即:变量存在,非空,不是布尔值假),系统会显示在{% if  %} 和 {% endi ...

随机推荐

  1. WPF中的VisualTreeHelper

    VisualTreeHelper提供了一组WPF控件树模型,通过VisualTreeHelper可以遍历控件的树形结构,获取我们所需要的控件以及相应的属性: VisualTreeHelper提供了一下 ...

  2. PowerDesigner12逆向生成oracle数据表时,错误解决

    1.用PowerDesigner12建模,在Database—>Generate Database (或者用Ctrl+G快捷键)来生产sql语句,却提示“Generation aborted d ...

  3. php怎么判断网页是电脑访问还是手机访问

    .第一种方法 <?php  function check_wap() {       ) {           ;$i<count($list);$i++){         ){    ...

  4. 能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项。试图加载格式不正确的程序。

    现象: 能加载文件或程序集“System.Data.SQLite”或它的某一个依赖项.试图加载格式不正确的程序.

  5. error opening trace file: No such file or directory (2) ,can't load transform_config.xml

    出现这个错误:error opening trace file: No such file or directory (2) ,can't load transform_config.xml 是因为没 ...

  6. Hark的数据结构与算法练习之Bogo排序

    算法说明 Bogo排序是交换排序的一种,它是一种随机排序,也是一种没有使用意义的排序,同样也是一种我觉得很好玩的排序. 举个形象的例子,你手头有一副乱序的扑克牌,然后往天上不停的扔,那么有一定机率会变 ...

  7. ember.js:使用笔记10 常用方法

    init: controller中初始化方法,                               //注意该方法是在其他方法之前,所以取不出this,model等值: 跳转:this.tra ...

  8. Xcode 编辑时的爆炸效果

    Xcode 的爆炸效果 1.打开终端输入 $mkdir -p ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins;$curl ...

  9. 【BZOJ】1059: [ZJOI2007]矩阵游戏(二分图匹配)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1059 本题可以看出,无论怎样变化,在同一行和同一列的数永远都不会分手---还是吐槽,,我第一眼yy了 ...

  10. 【BZOJ】1002: [FJOI2007]轮状病毒(DP+规律+高精度)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1002 其实我还是看题解的,而且看了题解也没明白那公式怎么来的T_T,先水过了先把....以后研究一下 ...