2.LR常用函数以及调用自定义函数

2.1.LR常用函数以及对信息的判断

2.1.1. LR内部自定义函数

在LR脚本中定义变量和编写自定义函数,需将变量的声明放在脚本其他内容的上方,否则会提示【illegal statement termination】

1.编写简单函数

  1. int sum(int a,int b)//简单的求和函数
  2.  
  3. {
  4.  
  5. return a+b;
  6.  
  7. }
  8.  
  9. AdvSearch()
  10.  
  11. {
  12.  
  13. lr_message("sum = 10+2=%d",sum(9,2));
  14.  
  15. return 0;
  16.  
  17. }

  

变量的声明要写在Action的前面,否则会提示【illegal statement termination】

图表12

解决方法:将int x,int ret的声明,紧跟char*showString之后。

2.随机字母串

  1. int itera_num,rand_num,rand_num1,rand_case,i;
  2.  
  3. char StrTable[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890~!@#$%&*()_+|}{:><,./;[]=-"; //大小写字母52个+数字10个+特殊字符26个=88个;~!@#$%&*()_+|}{:><,./;[]=-
  4.  
  5. char i_Alpa[36]="";
  6.  
  7. web_set_max_html_param_len("12400");
  8.  
  9. itera_num=rand()%36;
  10.  
  11. for (i=0;i<=itera_num;i++){
  12.  
  13. rand_num=rand()%88;
  14.  
  15. strncat(i_Alpa,StrTable+rand_num,1);
  16.  
  17. }
  18.  
  19. lr_save_string(i_Alpa,"autoAlpaValue");

  

2.1.2.常用LR请求函数

使用快捷键Alt+Insert调出函数参数快捷编辑工具,如图:

图表13

 

  • 请求URL中传参
         

    1. web_url("Login",
    2. "URL=https://secure.computing.com/scripts/login.asp?user=(username)&session={ssid}",
    3.  
    4. "RecContentType=text/html", //Expected content–type
    5.  
    6. LAST );

      

  • 键值对传参
          

    1. web_submit_data("default.aspx",
    2. "Action=http://lazarus/flightnet/default.aspx",
    3.  
    4. "Method=POST",
    5.  
    6. "TargetFrame=",
    7.  
    8. "RecContentType=text/html",
    9.  
    10. "Referer=http://lazarus/flightnet/",
    11.  
    12. "Snapshot=t7.inf",
    13.  
    14. "Mode=HTML",
    15.  
    16. //提交数据表单,键值对。
    17.  
    18. ITEMDATA,
    19.  
    20. "Name=grpType", "Value=radRoundtrip", ENDITEM,
    21.  
    22. "Name=lstDepartingCity", "Value=DEN", ENDITEM,
    23.  
    24. //或者提交文件
    25.  
    26. ITEMDATA,
    27.  
    28. "Name=userFile0",
    29.  
    30. "Value=E:\\sense_sensibility\\Elinor.htm",
    31.  
    32. "File=yes",
    33.  
    34. "ContentType=text/html", // .txt :"text/plain"
    35.  
    36. FilePath=Elinor.txt",
    37.  
    38. "ContentTransferEncoding=html/text",
    39.  
    40. ENDITEM,
    41.  
    42. LAST );

      

  • body体传参

    1. web_custom_request("post_query.exe", "Method=POST",
    2. "URL=http://lazarus/cgi–bin/post_query.exe",
    3.  
    4. "Body={\"action\":\"{actionName}\",\"name\":\"{userName}\",\"secret\":\"{password}\"}",
    5.  
    6. "TargetFrame=",
    7.  
    8. LAST );

      


以上方式是传递的信息请求体中,若存在信息需要在请求头Header中传递的,需要在请求前添加web_add_header,比如E:\项目资料\工作总结\接口测试\33.OKMS日志服务接口测试、Knowlege Management System 接口测试脚本中。

  • web_add_heade传参

    

  1. /*
  2.  
  3. *用户名密码方式登陆
  4.  
  5. * */
  6.  
  7. web_add_header("action","name_pass_login");
  8.  
  9. web_add_header("name","{userName}");
  10.  
  11. web_add_header("secret","{secretValue}");
  12.  
  13. web_add_header("sid","");
  14.  
  15. web_add_header("uid","");
  16.  
  17. web_add_header("app_id","odata_us3");
  18.  
  19. web_add_header("timestamp","{tStamp}");
  20.  
  21. web_add_header("sign","{signValue}");
  22.  
  23. web_add_header("ip","");
  24.  
  25. web_add_header("did","\{123456\}");
  26.  
  27. web_add_header("mobile","");
  28.  
  29. web_add_header("location","");
  30.  
  31. lr_start_transaction("name_pass_Login");
  32.  
  33. web_reg_save_param("json","LB=\r\n{", "RB=", LAST);
  34.  
  35. web_custom_request("login",
  36.  
  37. "URL=http://192.168.100.198:8010/api/login",
  38.  
  39. "Method=GET",
  40.  
  41. "TargetFrame=",
  42.  
  43. "RecContentType=text/json",
  44.  
  45. "Referer=",
  46.  
  47. "Mode=HTML",
  48.  
  49. "EncType=text/json", //"Body={\"action\":\"{actionName}\",\"name\":\"{userName}\",\"secret\":\"{secretValue}\"}",
  50.  
  51. LAST );

  

2.1.3.常用函数

  • //设置保存参数最大长度;

web_set_max_html_param_len("10240");

  • //保存系统当前时间距离1970年的秒数

web_save_timestamp_param("tStamp",LAST);

输出:Notify: Saving Parameter "tStamp = 1470030946475".//取第0-10位保存;

  • //取第0-10位保存

lr_save_var(lr_eval_string("{tStamp}"),10,0,"tStamp");

输出:Notify: Saving Parameter "tStamp = 1470030946".

  • //将参数subStamp的值复制给变量pre中。

strcpy(pre,lr_eval_string("{subStamp}"));

  • //A+B的

strcat(A, B);

  • // A+(B的前n位);

 strncat(A,B,n);

  • //比较A=B返回 =0,A>B返回 >0;

 strcmp(A,B) == 0

// char * string = "His Excellency the Duke of Exeter"; char * first_x, * last_x;

  • //查找在字符串中第一次出现x的位置;

first_x = (char *)strchr(string, 'x');

  • //查找在字符串中最后一次出现x的位置;

last_x = (char *)strrchr(string, 'x');

备注:Returns a pointer to the first occurrence of string2 in string1. If string2 is not found in string1 the function returns NULL.

  • //atoi将字符串型变为整型;passKey="123456", pre="147003"

iKey = atoi(passKey)+atoi(pre);

输出:Notify: Saving Parameter "KeyValue = 270459".

  • //将整数转化为字符串,10表示按照十进制int itoa( int value, char *str, int radix);

itoa(id,strid,10);  //int id = 56;

输出:strid = 56;若将10修改为2,二进制输出strid=111000;

  • //将整型做为字符串保存到参数中。

 lr_save_int(iKey,"KeyValue");

  • //被检索字符串,被检索字符串长度,取检索到的第几次的值,检索词,从检索词后偏移几位开始,截取长度,保存参数名。

 lr_save_searched_string(lr_eval_string("{json}"),strlen(lr_eval_string("{json}")), 0,"\"SID\":\"",0,32,"SIDValue");

  • //保存返回值;

web_reg_save_param("p", "LB/BIN=\\x3F\\xDD", "RB/BIN=\\xCCb", LAST );  //二进制

  • //将值写入参数filename中,int index = 56; char filename[64], * suffix = "txt";

sprintf(filename, "log_%d.%s", index, suffix);

输出:Notify: Saving Parameter " filename = log_56.txt".

2.1.4.信息判断

  1. web_reg_save_param("json ", "LB =< ", "RB = >", LAST );
  2.  
  3. …………
  4.  
  5. //获取返回信息
  6.  
  7. lr_save_var(lr_eval_string("{json}"),5,0,"StartWith");
  8.  
  9. //判断返回信息与预期值
  10.  
  11. if(strcmp(lr_eval_string("{StartWith}"),"\"SID\"") == 0)
  12.  
  13. {
  14.  
  15. // lr_message("The SIDValue : %s",lr_eval_string("{SIDValue}"));
  16.  
  17. lr_end_transaction("name_pass_Login", LR_PASS);
  18.  
  19. }else (strcmp(lr_eval_string("{StartWith}")," \"err") == 0){
  20.  
  21. lr_save_var(lr_eval_string("{json}"),13,0,"StartStr");
  22.  
  23. if(strcmp(lr_eval_string("{StartStr}")," \"error\": \"-1") == 0)
  24.  
  25. {
  26.  
  27. lr_message("The json : %s",lr_eval_string("{json}"));
  28.  
  29. lr_end_transaction("name_pass_Login", LR_FAIL);
  30.  
  31. }else{
  32.  
  33. lr_end_transaction("name_pass_Login", LR_PASS);
  34.  
  35. }
  36.  
  37. }

  

LR常用函数以及调用自定义函数的更多相关文章

  1. 如何在sqlite3连接中创建并调用自定义函数

    #!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

  2. PHP中call user func()和call_user_func_array()调用自定义函数小结

    call_user_func() 和 call_user_func_array(),通过传入字符串函数,可以调用自定义函数,并且支持引用,都允许用户调用自定义函数并传入一定的参数: 1.mixed c ...

  3. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  4. python27期day09:函数的初始、函数的定义、函数的调用、函数的返回值、函数的参数、作业题。

    1.函数的作用:封装代码.大量的减少了重复的代码. 2.全局空间:顶行写的就是全局空间. 图解 : 3.函数的定义: def 是一个关键字.申明要定义一个函数 my_len 函数的名字.遵循变量命名的 ...

  5. 使用 {$INCLUDE} 或 {$I} 指令管理和调用自定义函数

    这是一个简单.方便而又实用的小技巧. 譬如这段代码中有四个定义函数: MyAdd.MyDec.MyMul.MyDiv unit Unit1; interface uses   Windows, Mes ...

  6. 微信小程序wxml文件中调用自定义函数

    想在微信小程序的wxml文件里自如的像vue那样调用自定义的方法,发现并不成功,得利用WXS脚本语言. WXS脚本语言是 WeiXin Script 脚本语言的简称,是JavaScript.JSON. ...

  7. ThinkPHP 3.2 调用自定义函数库

    ThinkPHP3.2 和3.1 区别还是有点大的 引入了命名空间,强化了驱动化和行为,增强了模块化的概念和对云平台的支持,并改进了诸多的细节.主要改进包括:模块化架构的全新设计全新命名空间和自动导入 ...

  8. Mysql5.7创建存储过程中调用自定义函数报错Not allowed to return a result set from a function

    因为很多存储过程都会共用一段sql语句,所以我把共用的sql封装成一个自定义函数 AddCapital(); 然后通过存储过程调用,创建存储过程会报错1415,Not allowed to retur ...

  9. Python基础(函数,函数的定义,函数的调用,函数的参数,递归函数)

    1.函数 我们知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...

随机推荐

  1. [ZZ] Equal Error Rate (EER)

    这篇博客很全面 http://www.cnblogs.com/cdeng/p/3471527.html ROC曲线 1.混淆矩阵(confusion matrix) 针对预测值和真实值之间的关系,我们 ...

  2. Github使用指南-从新手到专家

    转载自:http://www.cnblogs.com/xirongliu/p/4589834.html 个人从刚刚开始接触github,啥都不知道,不会用,不知道能够用来干什么,到现在坚持在githu ...

  3. Docker Registry服务启动过程浅析

    当我们pull一个registry镜像或者自己制作一个镜像之后,使用命令docker run -d -p 5000:5000 registry,就可以启动一个私有容器服务,那么究竟是怎么做到的呢? 首 ...

  4. link与import的区别

  5. Stick hero "攻略", android 代码编写与分析(后台截屏, 后台模拟点击)

    论文写完,感觉头脑好久没被灵感刺激了,前些天室友介绍了个小游戏,我突然来了灵感可以写的简单的android 程序实现自动运行.主要的过会为三步: 1,Android 屏幕的获取.因为安全的原因,过程比 ...

  6. VS中的活动debug和活动cpu

    “活动”的含义就是当前项目所用的模式和平台.项目中的”活动“继承于解决方案中的配置.

  7. java如何提取url里的域名

    使用java标准类库java.net.URL java.net.URL  url = new  java.net.URL("http://blog.csdn.net/zhujianlin19 ...

  8. form表单的enter自动提交

    当form中只有一个文本框时并且获得焦点 按enter时,就会自动提交表单.阻止自动提交 可以添加一个隐藏的input框 <input type="text" style=& ...

  9. 【解决】SharePoint 2013 当鼠标悬停在用户名称上时页面会崩溃

    参考下面文章,此问题是由于IE中的Office插件版本不正确所致,只需在 控制面板 > 程序和功能 中修复 Office 的安装即可. http://sympmarc.com/2013/11/2 ...

  10. 【解决】SharePoint 2013 with SP1安装问题及解决

    安装环境 操作系统:Windows Server 2008 R2 SP1 安装包:SharePoint Server 2013 with SP1 问题及解决 I. 必备组件(prerequisitei ...