LR(三)Vugen中脚本增强-事务和检查点

事务

事务的引入是用来度量业务请求的响应时间以及对应的tps的。

在LR中,要实现事务,只需要掌握两个事务函数即可: lr_start_transaction(); 开始计时。 lr_end_transaction(); 结束计时。

右键->insert->start transaction/end transaction

使用时注意

  • 在LR中,事务函数本身只是用来计时和统计的,是不会影响脚本的功能的。

  • 在LR中,事务函数一定要成对出现(执行)。并且要保证两个事务函数的事务名一致。

  • 事务时间的构成:

    • 事务的引入是为了度量业务请求的时间。

    事务时间(duration)=事务的结束时间-事务的开始时间。 响应时间=请求函数的执行时间。但是事务时间并不等于响应时间。 事务时间=响应时间+Wasted Time(浪费时间)+Think time(思考时间)

    • Wasted Time:浪费时间,是指script本身编译、执行(非请求函数的代码)所消耗的时间,但是不包含代码的运行效果时间。 当脚本从Vugen中放到Controller运行时,LR会自动将浪费时间从事务响应时间中剔除

    • Think time:思考时间,是指脚本中的思考时间函数所执行消耗的时间。 默认情况下,在Vugen中,思考时间函数是不执行的,脚本放入Controller中,思考时间会自动变为执行

      当Controller中运行的结果被导入到Analysis中后,LR会自动将思考时间从事务响应时间中剔除

      这就意味着,我们最终在Analysis中看到的结果: 事务响应时间=事务时间-浪费时间-思考时间

事务的结束状态

在LR中,事务的结束状态有四种:LR_AUTOLR_PASSLR_FAILLR_STOP

  • LR_PASS:表示事务成功。

  • LR_FAIL:表示事务失败。

  • LR_STOP:表示事务被中止、停止。

  • LR_AUTO:LR自动判断事务的结束状态。 LR会根据事务中的有结束状态的函数的结束状态来判断事务的最终结束状态。 有结束状态的函数一般分为两种:

  • 请求类的函数:就是用来向服务器发送请求的函数。请求类函数是根据响应的状态码来决定函数的结束状态的。

    • 如果响应的状态码为1xx、2xx、3xx,则表示成功,4xx、5xx则表示失败。

  • 功能型的函数:是用来实现某些代码功能、逻辑的函数。比如说关联函数检查点函数等。 功能型函数是否成功的标志就是该函数的功能是否实现

所以如果事务中只是包含纯粹的业务请求函数,则事务最终得到的结果仅仅表示通信逻辑层面的成功,并不表示业务的成功。对于业务的成功需要通过检查点函数来实现。

检查点(断言)

常用的检查点函数是:web_reg_find()

详解

  • Search for specific text:需要查找的内容,即预期结果。 检查内容即预期结果,对于检查内容而言,需要具备以下特征:

    • 检查内容只是帮助我们判断业务是否成功的某些字符串即可,不需要是完整的响应内容。

    • 检查点的内容应该是去检查业务逻辑,而不是纯粹的业务数据(变化的)。

    • 检查点的内容选取一般来说要遵循唯一性和排他性、而不必拘泥于是正确的响应还是错误的响应

  • Search in:默认在body中查找

  • Fail if:该选项是用来设置检查点函数的Fail条件的。可选的值有两个

    • Not Found:表示要检查的内容在实际响应中没有找到。是默认选项。针对的是检查内容来源于正确的响应。

    • Found:表示要检查的内容在实际响应中找到至少一次。针对的是检查内容来源于错误的响应。

    默认情况下,检查点函数执行的就是查找并且做fail判断。

  • Save count:该选项填写的是一个参数名称(用户自定义),用来存储查找到的次数。

    • 如果该选项有值,而没有勾选Fail if选项,则检查点函数执行的逻辑是:查找、保存次数。会影响 Fail if 的判断

    • 如果该选项有值,且勾选了fail if选项,则检查点函数执行的逻辑是: 查找、保存次数、fail检测。

一般来说,之所以勾选Save count选项,就是因为默认的单纯的fail检测不足以帮助我们判断业务的结束状态。需要我们手动来判断事务的状态。(通过某个字符串出现的次数来判断事务的结果),次数判断如下:

if(atoi(lr_eval_string("{count}"))>=1){
    lr_end_transaction("test", LR_PASS);
}
else{
    lr_end_transaction("test", LR_FAIL);
}
原文地址:https://www.cnblogs.com/yjh1995/p/13514849.html