• 0
  • 0
分享

      最近因工作需要,开发了一个回归测试的小工具。可以根据配置读取不同交易报文并进行变量替换,然后自动发起交易并检查结果。自我感觉挺好用的,与大家分享一下设计思路。(代码要保密,就不上传了。有需要可以根据设计思路自己开发。

      设计背景:

      目前系统交易越来越多,需求改动也比较频繁。为防止代码改动影响旧需求,每次修改代码后都需要把相关交易回归测试一次。

      目前此项回归测试工作主要靠程序员手工完成,存在以下问题:

  1. 回归测试需要准备很多交易报文,耗时费力

  2. 由于回归测试比较麻烦,加上版本迭代频繁,有时只能对比较关键的业务场景进行回归测试,存在一定风险。

      解决方案:

      为避免这种情况,项目组开发了自动化回归测试工具。程序员每次开发完代码后,针对需求的业务场景配置好测试案例,由工具根据案例配置自动执行交易(需要自动生成某些交易报文字段,例如全局流水)并判断案例是否符合要求。

理想情况下,经过多次需求迭代后,测试案例即可全面覆盖所有交易路径。这样可以节省开发人员回归测试时间,对于系统重大升级时保障升级质量也有帮助。

      测试工具使用loadrunner脚本编写,这样的好处是

  1. 可以借用loadrunner提供的丰富函数库,如http交互函数,变量替换函数,日志输出函数等

  2. 可以利用loadrunner的GUI界面

  3. 通过简单修改配置,可以让本工具用于非功能压测

      不方便的地方有:

  1. 需要电脑安装了loadrunner工具才可以执行测试工具

  2. loadrunner提供的ide不方便调试

  3. 无法引用开源静态库(网上只找到引用动态库的方法)

  4. 由于loadrunner内置编译器与gcc存在部分不兼容,无法直接复用rcc现有功能函数,暂时不能自动检查数据库记录,检查交易日志等。

      测试案例配置说明:

图1.png

      配置文件打#开头的行是注释行,脚本读取时会忽略注释行

      每一行配置代表一个测试案例,或者一个控制语句

      测试案件一般由四个字段组成,字段用空白符分隔,第一个字段代表交易报文名称,脚本执行时会根据报文名称读取对应的xml文件,并对里面配置的变量做替换,然后组装成rcc交易报文发往测试机器并获取返回报文。

      第二个字段是案例名称,作用是方便测试人员理解案例用途,对于脚本无意义。

      第三个字段是案例验证方式,一般是这样的格式:“状态码-错误码-自定义检查方法”,例如"00-0000000000-have(成功)",意思是期望交易返回报文状态码字段是00,错误码字段是0000000000,返回的内容里面包含"成功"字样。如果有一个条件不满足,脚本会认为案例验证失败,输出日志提醒测试人员。

      第四个字段是附加动作,一般可填none代表无附加动作。附加动作需要使用的场景,一般是案例有上下文关系时。例如要测试消费撤销交易,需要先发起消费交易,然后发送撤销交易请求,但此时需要用到前面消费交易的全局流水号。这个时候就需要在前面执行消费交易时使用附加动作save,指示脚本保存此次交易生成的全局事件跟踪号,后面撤销交易时才可以获取到。

      控制语句是一些辅助配置测试案例的指令,例如for指令,可以指示脚本重复执行配置案例,适用于期望相同案例重复执行的场景,避免冗余配置。goto/skip指令,可以跳到/跳过指定案例执行,适合调试特定案例的场景。echo,输出日志/变量信息,方便案例验证失败后定位问题。

      控制指令说明:

指令名称指令说明适用场景
stop退出案例测试调试某个测试配置时可以用,避免后面案例干扰,查日志方便
sleepN休眠N毫秒暂停一会再进行下一个测试案例执行,给测试人员思考时间
skipN跳过下面N个案例配置新增案例配置后可以直接执行新增的内容,不需要跑老的案例
gotolabel跳到指定案例执行新增案例配置后可以直接执行新增的内容,不需要跑老的案例
repeatN重复执行后面一个配置N次交易包含static变量时,可以使用此指令指定重复执行测试案例
forN/endfor重复执行下一个endfor出现之前的配置N次,可嵌套同上,如果需要重复执行的案例比较多可用
echomessage输出日志信息,message里面可包含变量输出日志信息,特别是变量值,方便调试
setvarvalue设置变量值,var和value都可以包含变量设置变量值,方便后面报文使用。

(例如要生成一个全部配置共用的随机数字,可以使用setmy_rand{P_rand3})

      自定义检查方法说明:

检查方法说明
have()交易返回内容包含指定关键字
haveno()交易返回内容不包含指定关键字
true交易返回报文状态码为00
false交易返回报文状态码不为00

      支持同时指定多个自定义检查方法,用&&连接

      变量说明:

      为方便配置报文,脚本预设计了许多变量,测试人员可以直接引用。

      如果有需要可以在vugen自行添加,但切记不要修改(loadrunner修改变量的界面非常奇怪,没有保存功能,只要浏览变量值时用鼠标点选不同值就会自动保存,要小心)

图2.png

      附加动作说明:

检查方法说明
save把S_traceId保存到变量Save_S_traceId
savefile把S_traceId保存到sn_hist_{P_vuserId}.txt
get从S_traceId取自变量Save_S_traceId而不是重新生成
getfile读取sn_hist_{P_vuserId}.txt一行记录,并从中生成S_traceId,主要用于冲正退货
save(field_name)从请求报文中截取field_name指定的xml字段值,保存到变量Save_field_name


作者:皇家救星

原文链接:https://www.cnblogs.com/kingstarer/p/10586057.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   测试用例老话说的好,工欲善其事,必先利其器。测试管理是把测试过程作为一个系统,对组成这个系统的各个过程加以识别和管理,以实现设定的系统目标。同时要使这些过程协同作用、互相促进,从而使它们的总体作用大于各过程作用之和。其主要目的是在设定的条件限制下,尽可能发现和排除产品缺陷。  而对于开发团队来说,有很多工作需要做好,测试管理不仅可以使产品实现这些效果,还可以使它们超越自我,达到最佳。而且,测试管理有助于产品通过利用数据促进交付。测试用例和测试数据可以轻松关联,并分析各种结果。测试管理对于帮助开发团队进步并不断满足用户需求是至关重要的。  测试数据管理也能够使研发机构去评估测试数据成功与否的...
            0 0 1270
            分享
          •   前言  不管怎样,面试或者被面试和简历有着理不清的关系,面试官要通过简历了解面试者的基本信息、过往经历等。  面试者希望通过简历把自己最好的一面体现给面试官,所以在这场博弈中,作为面试者,需要掌握一定的技巧,写出一个高质量的简历,才能抓住面试官的眼光。  假如你是网上发出简历,你的简历必然会经过 HR 的筛选,一张简历 HR 可能也就花费 10 秒钟看一下,然后 HR 就会决定你这一关是 Fail 还是 Pass。  假如你是内推,如果你的简历没有什么优势的话,就算是内推你的人再用心,也无能为力。  一份好的简历  一份好的简历,可以给人的第一印象大大提升,那么我们如何准备一份高质量的简历...
            0 0 632
            分享
          •   一、什么是自动化测试框架?  自动化测试框架是为自动化测试用例或者脚本提供执行环境而搭建的基础设施。自动化测试框架有助于有效地开发、执行和报告自动化测试用例。  优点:  · 代码复用  · 提高测试效率  · 更高的测试覆盖率  · 维护成本低  · 更早发现和记录bug  二、框架的基本组成  1、配置文件管理:  一般需要一个配置文件去控制一些环境信息、开关。配置文件可以是txt/xml/yaml/properties/ini,一般.propertis使用较多在JAVA里,Python的话通常会选择ini文件。  2、业务逻辑代码和测试脚本分离...
            0 0 1068
            分享
          •        谈到浏览器兼容性测试,很多同学往往考虑到的都是如何覆盖全面,管它什么Chrome、FireFox、IE、Safari这种主流浏览器还是360、QQ、搜狗等一系列国产浏览器,都给它列到列表上边去,只要时间允许,就一个一个测起来。但是大家有没有想过,这个策略真的是正确的么?真的应该这样去进行测试么?       在回答上面的问题之前,我们先来思考这样一个问题:我们为什么要做兼容性测试? 或者换个说法,网站为什么会在不同的浏览器上展现出不同的样式?毫无疑问,其答案是因为内核不同、渲染方式不同。有了这样的结果...
            5 8 5760
            分享
          •       我们在做web端测试时,难免会遇到这样的一个情况:出现的bug,不知道是前端还是后端,这篇就为大家简单介绍几种比较好用的方法吧      场景:      清晰的记得那天是项目要上线,但是由于某种原因,页面可以打开,但是在点击任意链接后,没有实现该功能,且还会抛出异常提示?      此时,作为测试的我们,应该是要协助开发去定位问题:      1、可以通过谷歌浏览器中的开发者工具来定位问题&n...
            4 4 3748
            分享
      • 51testing软件测试圈微信