录制0事件:LoadRunner脚本异常捕获处理

发表于:2021-3-02 09:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:CSDN

  一、错误类型
  脚本执行中通常会遇到下面几类测试类型:
  · 标准错误(如HTTP states code)
  · LoadRunner函数抛出错误(LR常用函数、特定协议下的函数,包括检查点函数)
  · 脚本自定义的错误(通过逻辑编写脚本开发人员抛出的错误)
  二、错误抛出
  · 标准错误(如HTTP states code)
  LoadRunner可以识别并在脚本执行中抛出。
  · LoadRunner函数抛出错误(LR常用函数、特定协议下的函数,包括检查点函数)
  LoadRunner可以识别并在脚本执行中抛出。
  · 脚本自定义的错误
  脚本开发人员通过逻辑编写抛出的错误,使用lr_error 来抛出错误。结合lr_exit
  三、错误处理
  全局设置
  通过runtime-setting 设置全局性的设置。
  (1)  出现错误时抛出错误描述,离开错误所在Action,执行下一个Action。
  (2)  出现错误时抛出错误描述,仍继续运行,设置将应用于整个 Vuser 脚本。
  备注:runtime-setting 设置不包含lr_error_message函数抛出的错误场景。
  局部设置
  使用 lr_continue_on_error函数控制Vuser 脚本特定段的错误处理(前提应该是“出现错误时仍继续运行”选项未选中时)。
  (1)  没有选项,以runtime-setting 设置为主。
  (2)  出现错误时抛出错误描述,离开错误所在Action,执行下一个Action
  (3)  出现错误时抛出错误描述,离开错误所在Iteration,执行下一个Iteration
  (4)  出现错误时抛出错误描述,终止发送错误的VUser,场景中的表现为终止改Vuser的运行。
  四、错误描述优化
  通过脚本开发中逻辑代码,捕获已知错误,使错误信息含有测试事务、测试关键数据、原始错误描述等关键信息,方便定义问题,特别是场景执行中,能够在线发现问题方便在线分析问题,避免复测,节省测试时间。
  五、错误处理示例
  HTTP/HTML协议
  这里的异常处理是指在LR脚本录制或开发中事务(transaction)执行后失败捕获异常的方法。某项目HTTP/HTML协议应用场景如下,粗体部分为脚本开发中添加的异常处理逻辑相关代码:
  lr_start_transaction("01_国内证_01_信用证开立");
  /*信用证开立_CONFIRM检查点*/
  web_reg_find("Text=Transaction  Completed",
            "SaveCount=KL_Count",
           LAST);
  web_submit_data("WSTrxManager_21",
             "Action=http://10.114.6.49/EximBillWeb/servlets/WSTrxManager",
             "Method=POST",
             "TargetFrame=",
             "RecContentType=text/html",
             "Mode=HTML",
             ITEMDATA,
  ………
  LAST);
       if  (atoi(lr_eval_string("{KL_Count}")) > 0){
           lr_end_transaction("01_国内证_01_信用证开立", LR_PASS);
  }
  else{
           lr_error_message ("信用证开立CONFIRM Fail!【放贷流水号:%s】【信用证编号:RLC98042014%s】", lr_eval_string("{p_CL_FD_NO_HN}"),lr_eval_string("{p_LC_NO}"));
       lr_end_transaction("01_国内证_01_信用证开立", LR_FAIL);
       lr_exit(  LR_EXIT_ITERATION_AND_CONTINUE,LR_FAIL );
       }
  处理代码分析如下:
  (1)  web_reg_find的使用
  仅使用web_reg_find的保存预期检查点的个数的功能,如果找不到检查点,检查点的个数将被存为0,而不会启用LR函数抛出错误机制,不影响脚本代码的执行。
  该案例为查找预期字段“TransactionCompleted”并将其个数存放在参数变量“KL_Count”。
  (2)  atoi(lr_eval_string("{KL_Count}"))
  将获取的参数“KL_Count”值转化为字符串后再转化为整数,用与if语句的表达式中。
  (3)  if-else
   if(atoi(lr_eval_string("{KL_Count}"))> 0)代表预期检查点在搜索页面中被找到情况。
  该例子中找到预期检查点的处理为:使用函数lr_end_transaction("01_国内证_01_信用证开立", LR_PASS)定义所在事务通过。
  备注:定义事务成功或失败,需根据具体预期内容和业务结合而定。
  else代表预期检查点在搜索页面中未找到情况。
  该例子中未找到预期检查点的处理步骤为:
  1)  使用函数lr_error_message抛出错误详细信息;
  输出详细的错误信息:出错步骤、放贷流水号和信用证编号,这样直接获取出错对应的测试数据有助于在压力执行过程中快速分析定位问题。
  2)  使用函数lr_end_transaction("01_国内证_01_信用证开立", LR_FAIL)定义所在事务运行失败;
  3)  用函数lr_exit(  LR_EXIT_ITERATION_AND_CONTINUE,LR_FAIL )定义出现错误后的处理。
  该函数优先级大于continue on error的设置。若脚本需要失败后继续错误所在Action中的后续操作,不需要使用该函数。本案例的处理选项:Vuser离开本次迭代继续下次迭代的执行。
  备注:步骤1)lr_error_message和2)lr_end_transaction两个函数的功能可以简化使用一个函数lr_fail_trans_with_error来实现。对预期检查点未找到的情况进行抛出错误信息并定义所在事务运行失败。
  if (atoi(lr_eval_string("{KL_Count}")) <= 0){
           lr_fail_trans_with_error("信用证开立CONFIRM Fail!   【放贷流水号:%s】【信用证编号:RLC98042014%s】", lr_eval_string("{p_CL_FD_NO_HN}"),lr_eval_string("p_LC_NO}"));
           lr_exit(    LR_EXIT_ITERATION_AND_CONTINUE,LR_FAIL );
       }
  lr_end_transaction("01_国内证_01_信用证开立", LR_AUTO);

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号