51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 4589|回复: 0
打印 上一主题 下一主题

[原创] 性能测试必知必会:Shell脚本设计实践指南

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:34
  • 签到天数: 1052 天

    连续签到: 2 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-1-18 09:29:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    摘要: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脚本。在特定目录下寻找报文模板,匹配报文标识号和交易流水号,并进行替换,生成新报文,再执行报文发送命令,完成一次循环;进入下一次循环,同样的方法完成一次发送,直到结束循环。
    1.   #!/usr/bin/sh
    2.   STOP_FLG="stop"            
    3.   bwid1=697000000000
    4.   bwid2=69700000
    复制代码
    STOP_FLG是终止标识,在当前目录中含有名为“stop”的文件时,即为终止条件达成。bwid1和bwid2是声明的两个变量,用于在循环中自增保持不重复,同时替换报文标识号和交易流水号。
    1.  while true
    2.   do
    3.   {
    4.      if [ -f ${STOP_FLG} ]     
    5.      then
    6.       exit 0
    7.     fi
    复制代码
    下面开始一个循环体,由于采用建立终止标识的方法,所以采用无限循环。第8行至第11行加入判断,如果在当前目录下存在名为“stop”的文件时,跳出该循环,所以要终止该脚本执行时,使用vi编辑器或者touch命令在当前目录下建立终止标识文件即可。
    1. let bwid1=bwid1+1
    2.    let bwid2=bwid2+1           
    3.    msgid="20201120"$bwid1
    4.    trano=$bwid2
    复制代码
     在循环中将bwid1和bwid2每次自增1,按照报文中的报文标识号格式,保留一部分固定字符串,与bwid1拼接成完整的报文标识号字符串,并赋值给变量msgid。将变量bwid2赋值给变量trano,代表交易流水号。下一次循环时,bwid1和bwid2都会自增1,保证msgid和trano不重复。
    1.  sed "s/20201120110012385685/$msgid/g" \
    2.   /home/tips/test/3001_test1120.xml \
    3.   | sed "s/10001180/$trano/g" >/home/tips/test/afile.xml   
    4.     tipsputpc afile 1 r
    5.   }
    6.   done
    复制代码

    使用sed编辑器可以根据命令处理报文中的数据,其工作方式为:
      (1)一次从输入中读取一行数据;
      (2)根据所提供的编辑器命令匹配数据;
      (3)按照命令修改流中的数据;
      (4)输出新数据。命令将报文模板中报文标识号标签<MsgID>20201120110012385685</MsgID>中的字符串替换成msgid变量的内容,把交易流水号标签<TraNo>10000162</TraNo>中的字符串替换成trano变量的内容,生成新文件,重命名为afile,使用发送命令将报文发送出去。如果想控制发送频率,可在循环内加一行sleep命令。完整的脚本如下。
    1.  #!/usr/bin/sh
    2.   STOP_FLG="stop1"            
    3.   bwid1=697000000000
    4.   bwid2=69700000               
    5.   while true
    6.   do
    7.   {
    8.       if [ -f ${STOP_FLG} ]     
    9.       then
    10.          exit 0
    11.       fi
    12.      
    13.       let bwid1=bwid1+1
    14.       let bwid2=bwid2+1           
    15.       msgid="20201120"$bwid1
    16.       trano=$bwid2
    17.                 
    18.   sed "s/20201120110012385685/$msgid/g" \
    19.   /home/tips/test/3001_test1120.xml \
    20.   | sed "s/10001180/$trano/g" >/home/tips/test/afile.xml   
    21.       tipsputpc afile 1 r   
    22.               
    23.   }
    24.   done
    复制代码
     将该脚本命名为send.sh,并给予其最高的权限:
    1.  chmod 777 send.sh
    复制代码
    执行脚本:
    1. ./send.sh
    复制代码
    当需要停止该脚本的执行时,在脚本所在目录下建立名为stop的文件,脚本立刻停止执行。
    1. touch stop
    复制代码
      本文介绍了Shell脚本在接口测试实践中的应用,利用sed编辑器对报文进行批量自动化处理,实现了报文处理、发送的全流程贯通,脚本的执行、停止简便易操作,极大简化数据处理任务,在系统性能测试发压时实现自动化。



    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-28 02:18 , Processed in 0.064797 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表