• 11
  • 12
分享
  • 性能测试必知必会:Shell脚本设计实践指南——软件测试圈
  • 曼倩诙谐 2021-01-18 10:37:57 字数 2759 阅读 793 收藏 12

  Shell脚本是最常见的一种处理文本文件的的方法,可以实现检查日志文件、读取配置文件、处理数据元素、执行Linux命令等等功能,Shell脚本可以在实践中实现对文件批量处理的自动化,也可以控制Linux命令的计划性执行。Shell脚本在处理文件时处理速度较快,且通常不受文件大小的限制,这就打破了一些性能测试工具在处理大报文时卡顿甚至崩溃的瓶颈,在性能测试中极大简化报文处理和命令执行的步骤。

  在性能测试实践中,处理的报文通常含有唯一标识,如报文标识号、流水号等,这样的标识设计为数据库表中的主键,以及作为交易是否重复的校验要素。如下方的示例报文,在性能测试场景中,需要批量发送该报文,为保证业务解析入库正常并且业务不重复,需要替换其中的报文标识号MsgID和交易流水号TraNo。 

----snip----
  <CFX>
     <HEAD>
       <VER>1.0</VER>
       <SRC>123456789012</SRC>
       <DES>000000000001</DES>
       <MsgNo>3001</MsgNo>
       <MsgVer>1.0</MsgVer>
       <MsgID>20201120110012385685</MsgID>
       <MsgRef>20201120110012345678</MsgRef>
       <WorkDate>20201120</WorkDate>
     </HEAD>
     <MSG>
       <RealHead3001> 
          <TaxOrgCode>21100000000</TaxOrgCode> 
          <EntrustDate>20201120</EntrustDate>
          <TraNo>10000162</TraNo>
       </RealHead3001>
  ----snip----

  首先根据报文处理方案要求,设计shell脚本。在特定目录下寻找报文模板,匹配报文标识号和交易流水号,并进行替换,生成新报文,再执行报文发送命令,完成一次循环;进入下一次循环,同样的方法完成一次发送,直到结束循环。 

#!/usr/bin/sh
  STOP_FLG="stop"             
  bwid1=697000000000 
  bwid2=69700000

  STOP_FLG是终止标识,在当前目录中含有名为“stop”的文件时,即为终止条件达成。bwid1和bwid2是声明的两个变量,用于在循环中自增保持不重复,同时替换报文标识号和交易流水号。

while true
  do
  {
     if [ -f ${STOP_FLG} ]     
     then
      exit 0
    fi

  下面开始一个循环体,由于采用建立终止标识的方法,所以采用无限循环。第8行至第11行加入判断,如果在当前目录下存在名为“stop”的文件时,跳出该循环,所以要终止该脚本执行时,使用vi编辑器或者touch命令在当前目录下建立终止标识文件即可。

let bwid1=bwid1+1 
   let bwid2=bwid2+1           
   msgid="20201120"$bwid1 
   trano=$bwid2

  在循环中将bwid1和bwid2每次自增1,按照报文中的报文标识号格式,保留一部分固定字符串,与bwid1拼接成完整的报文标识号字符串,并赋值给变量msgid。将变量bwid2赋值给变量trano,代表交易流水号。下一次循环时,bwid1和bwid2都会自增1,保证msgid和trano不重复。

sed "s/20201120110012385685/$msgid/g" \
  /home/tips/test/3001_test1120.xml \
  | sed "s/10001180/$trano/g" >/home/tips/test/afile.xml    
    tipsputpc afile 1 r
  }
  done

  使用sed编辑器可以根据命令处理报文中的数据,其工作方式为:

  (1)一次从输入中读取一行数据;

  (2)根据所提供的编辑器命令匹配数据;

  (3)按照命令修改流中的数据;

  (4)输出新数据。命令将报文模板中报文标识号标签<MsgID>20201120110012385685</MsgID>中的字符串替换成msgid变量的内容,把交易流水号标签<TraNo>10000162</TraNo>中的字符串替换成trano变量的内容,生成新文件,重命名为afile,使用发送命令将报文发送出去。如果想控制发送频率,可在循环内加一行sleep命令。完整的脚本如下。

  #!/usr/bin/sh
  STOP_FLG="stop1"             
  bwid1=697000000000 
  bwid2=69700000               
  while true
  do
  {
      if [ -f ${STOP_FLG} ]     
      then
         exit 0
      fi
      
      let bwid1=bwid1+1 
      let bwid2=bwid2+1           
      msgid="20201120"$bwid1 
      trano=$bwid2
                
  sed "s/20201120110012385685/$msgid/g" \
  /home/tips/test/3001_test1120.xml \
  | sed "s/10001180/$trano/g" >/home/tips/test/afile.xml    
      tipsputpc afile 1 r   
              
  }
  done

  将该脚本命名为send.sh,并给予其最高的权限:

  chmod 777 send.sh

  执行脚本:

  ./send.sh

  当需要停止该脚本的执行时,在脚本所在目录下建立名为stop的文件,脚本立刻停止执行。

  touch stop

  本文介绍了Shell脚本在接口测试实践中的应用,利用sed编辑器对报文进行批量自动化处理,实现了报文处理、发送的全流程贯通,脚本的执行、停止简便易操作,极大简化数据处理任务,在系统性能测试发压时实现自动化。



作者:邹光阳   

来源:51Testing软件测试网原创

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码, 潜在bug, 代码规范,安全性漏洞等问题, 并通过SonarQube web UI展示出来。  1 Sonar简介  1.1 sonarQube是什么?  1、代码质量和安全扫描和分析平台。  2、多维度分析代码:代码量、安全隐患、编写规范隐患、重复度、复杂度、代码增量、测试覆盖率等。  3、支持25+编程语言的代码扫描和分析,包含java\python\C#\javascript\go\C++等。  4、涵盖了编程语言的静态扫描规...
            0 1 6145
            分享
          • 读者提问:APP 自动化测试工具有推荐的吗 ?阿常回答:有,Appium。官网地址:https://appium.ioGithub地址:https://github.com/appium/appium (开源社区)阿常碎碎念:Appium 是一个开源的、跨平台的自动化测试工具,可用于 APP 的自动化测试。Appium 支持 iOS 、Android 及 Firefox OS 平台。Appium 使用 WebDriver 的 json wire 协议,来驱动 iOS 系统的 UIAutomation 库、Android 系统的 UIAutomator 框架。它允许测试人员在...
            0 0 702
            分享
          • 1、背景介绍当我们在接口或UI自动化项目中,常常会出现这种现象——明明是正常请求,却无法获取到想要的数据返回。比如:场景A:页面是动态数据,第一次进入页面获取到的数据,和下次进入页面获取到的数据完全不一样。场景B:页面数据有展示限制,页面某些模块或整个页面数据仅展示3次,且通过服务端返回控制。这时我们要怎么办?如果是手工测试时,我们大可以直接使用Charles、Fiddler进行模拟,毕竟代理软件基本能解决大部分测试需求。那如果是在自动化项目中呢?如果还是使用代理软件——其实也不是完全不行,但我们还有更佳的实践方式。也就是使用MitmProxy作为正向代理拦截请求和返回数据。2、如何使用Mit...
            0 0 1712
            分享
          • 1 引言最近也是临近年底,各位小伙伴也是蠢蠢欲动,小鱼最近也是没闲着,除了加班,还在做一项"公益活动":one by one 的指导想要体现自己价值的小伙伴。在面试指导过程中,小鱼发现,即使有10N+工作经验的小伙伴,其实对测开的理解,还停留在3N左右的经验上,这不禁让小鱼我惊叹(下巴没惊掉)…所以,小鱼也是决定,开一个专栏,来详细分享测开领域的专业知(zi)识(shi)~~我们都知道,测试领域的测试方法,很多种(多的不少于100种),所以那些所谓的说测试很简单的人,你就呵呵 他 就行!!而在这100多种测试方法中,有三种,是能非常体现出高效产出比的。我们今天,就来聊一聊 ...
            1 0 29491
            分享
          • 为了更真实的展现单元测试的魅力,我使用目前工作中的项目一段代码,你不需要理解具体的业务,只需要了解如何如何写单元测试,以及感受单元测试的魅力就可以了。这里我们改变一种方式,即我们先写功能代码,再补充单元测试,很多团队都是这样使用,虽然这样并不好,可是很多时候,我们新加入一个团队,不可能负责去做一个新的项目,都是在维护老的项目,并且当时的团队为了更快的编码而没有写单元测试。功能代码示例简单了解,只需要注意 条件判断和外部依赖(调用其他类的方法),明白我们的单元测试代码需要覆盖到所有的条件判断,和隔离MOCK 外部依赖。 /**      ...
            1 1 872
            分享
      • 51testing软件测试圈微信