基于jmeter和shell的接口性能自动化

来源:互联网 发布:js select 联动效果 编辑:程序博客网 时间:2024/06/15 14:05

转载地址:http://blog.csdn.net/prjay/article/details/50429083


基于jmeter和shell的接口性能自动化

1. 总体需求

由于性能测试中涉及的查询接口多,版本迭代频繁,版本更新后自动跑一轮查询业务的性能,可以及时发现一些开发修复bug触发的非预期的bug,利用晚上时间快速重测性能接口可以解放人工测试的时间,让测试人员可以把精力集中在测试复杂接口,调优分析性能瓶颈上。

2. 实现流程

自动化的场景模拟真实手工测试,操作步骤和手工测试一样。

开始读取接口测试用例执行用例,发起服务器监控收集执行结果和监控结果执行完所有用例?整理结果,发送邮件结束yesno

3.准备工作

准备软件:

  • 系统环境:CentOS release 6.7 (Final)
  • 内核版本:Linux localhost 2.6.32-573.7.1.el6.x86_64
  • 测试工具:apache-jmeter-2.13 http://jmeter.apache.org/download_jmeter.cgi
  • 运行JDK环境:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  • python环境:Python 2.6.6
  • 服务器监控nmon:http://nmon.sourceforge.net/pmwiki.php?n=Site.Download

4.具体实现

4.1用例执行

Jmeter的执行支持命令行的方式执行,并且会有一个粗略报告,我们取这个报告里面的执行结果并保存下来
Jmeter的执行结果:

<code class="hljs r has-numbering">[root@localhost bin]<span class="hljs-comment"># ./jmeter -n -t singin.jmx </span>Creating summariser <summary>Created the tree successfully using singin.jmxStarting the test @ Mon Dec <span class="hljs-number">14</span> <span class="hljs-number">16</span>:<span class="hljs-number">42</span>:<span class="hljs-number">33</span> CST <span class="hljs-number">2015</span> (<span class="hljs-number">1450082553651</span>)Waiting <span class="hljs-keyword">for</span> possible shutdown message on port <span class="hljs-number">4445</span>summary +      <span class="hljs-number">1</span> <span class="hljs-keyword">in</span>     1s =    <span class="hljs-number">1.3</span>/s Avg:   <span class="hljs-number">268</span> Min:   <span class="hljs-number">268</span> Max:   <span class="hljs-number">268</span> Err:     <span class="hljs-number">0</span> (<span class="hljs-number">0.00</span>%) Active: <span class="hljs-number">1</span> Started: <span class="hljs-number">1</span> Finished: <span class="hljs-number">0</span>summary +      <span class="hljs-number">2</span> <span class="hljs-keyword">in</span>     0s =   <span class="hljs-number">50.0</span>/s Avg:    <span class="hljs-number">17</span> Min:    <span class="hljs-number">14</span> Max:    <span class="hljs-number">20</span> Err:     <span class="hljs-number">0</span> (<span class="hljs-number">0.00</span>%) Active: <span class="hljs-number">0</span> Started: <span class="hljs-number">1</span> Finished: <span class="hljs-number">1</span>summary =      <span class="hljs-number">3</span> <span class="hljs-keyword">in</span>     1s =    <span class="hljs-number">3.7</span>/s Avg:   <span class="hljs-number">100</span> Min:    <span class="hljs-number">14</span> Max:   <span class="hljs-number">268</span> Err:     <span class="hljs-number">0</span> (<span class="hljs-number">0.00</span>%)Tidying up <span class="hljs-keyword">...</span>    @ Mon Dec <span class="hljs-number">14</span> <span class="hljs-number">16</span>:<span class="hljs-number">42</span>:<span class="hljs-number">34</span> CST <span class="hljs-number">2015</span> (<span class="hljs-number">1450082554551</span>)<span class="hljs-keyword">...</span> end of run</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li></ul>

由sumary统计行可以得到我们需要收集的测试结果:

测试结果项值总请求数3平均tps3.7平均响应时间100ms请求失败率0.00%

主流程脚本

<code class="hljs nginx has-numbering"><span class="hljs-comment">#/bin/bash</span><span class="hljs-title">source</span> /etc/profileJmeter_Home=<span class="hljs-string">'/usr/local/apache-jmeter-2.13'</span>TestReport=<span class="hljs-string">'/data/loadtest/report'</span>LogDIR=<span class="hljs-string">'/data/loadtest/log'</span>Date=`date +<span class="hljs-string">"%F"</span>`cd /data/loadtest/>summary.txt<span class="hljs-comment">#清理上次执行结果</span>run_test(){<span class="hljs-comment">#获取测试用例</span> <span class="hljs-title">for</span> i in `find ./testcase/ -name <span class="hljs-regexp">*.jmx</span>|awk -F <span class="hljs-string">'.'</span> <span class="hljs-string">'{print <span class="hljs-variable">$2</span>}'</span>`  do   casename=`echo <span class="hljs-string">"<span class="hljs-variable">$i</span>"</span>|awk -F <span class="hljs-string">'/'</span> <span class="hljs-string">'{print <span class="hljs-variable">$4</span>}'</span>`  >log/<span class="hljs-variable">${casename}</span>.txt  echo -n <span class="hljs-string">"<span class="hljs-variable">$i</span> "</span>>>summary.txt  <span class="hljs-comment">#发起监控</span>  ./monitor.sh >/dev/null <span class="hljs-number">2</span>>&<span class="hljs-number">1</span> &  <span class="hljs-comment">#开始执行测试</span>  <span class="hljs-variable">$Jmeter_Home</span>/bin/jmeter -n -t /data/loadtest<span class="hljs-variable">${i}</span>.jmx >>log/<span class="hljs-variable">${casename}</span>.txt &  sleep <span class="hljs-number">310</span>  <span class="hljs-comment">#如果执行310s还未结束,强制终止执行</span>  ps -ef | grep java |grep -v grep | awk <span class="hljs-string">'{print <span class="hljs-variable">$2</span>}'</span> |xargs kill -<span class="hljs-number">9</span>   sleep <span class="hljs-number">3</span>  <span class="hljs-comment">#提取结果</span>  grep <span class="hljs-string">'summary ='</span> log/<span class="hljs-variable">${casename}</span>.txt| tail -<span class="hljs-number">1</span> |awk -F <span class="hljs-string">'[\t / (]+'</span> <span class="hljs-string">'{if(<span class="hljs-variable">$7</span>>10000 && <span class="hljs-variable">$17</span><10.00){printf("%s %d %d %d %.2f% pass ",<span class="hljs-variable">$7</span>,<span class="hljs-variable">$10</span>,<span class="hljs-variable">$3</span>,<span class="hljs-variable">$16</span>,100-<span class="hljs-variable">$17</span>)}else{printf("%s %d %d %d %.2f%% fail ",<span class="hljs-variable">$7</span>,<span class="hljs-variable">$10</span>,<span class="hljs-variable">$3</span>,<span class="hljs-variable">$16</span>,100-<span class="hljs-variable">$17</span>)}}'</span>>>summary.txt  cat monitor.txt >>summary.txt  echo <span class="hljs-string">''</span> >> summary.txt  <span class="hljs-comment">#获取关键日志</span>  ssh <span class="hljs-number">10.1.30.54</span> <span class="hljs-string">'tail -n 300 /data/logs/fcuh-user/catalina.out'</span>><span class="hljs-variable">${LogDIR}</span><span class="hljs-variable">${i}</span>.log done}run_testsleep <span class="hljs-number">3</span><span class="hljs-comment">#生成html报告</span>sh genHTML.shsleep <span class="hljs-number">1</span><span class="hljs-comment">#发送邮件</span>python sendmail.py</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li></ul>

4.2服务器监控

服务器资源收集方面,选用的是nmon监控工具,因为它可以后台收集结果保存到文件。由于每个用例测试5分钟,所以只需要监控300秒,每5s监控一次,对应命令:

<code class="hljs lasso has-numbering">nmon <span class="hljs-attribute">-f</span> <span class="hljs-attribute">-t</span> <span class="hljs-attribute">-s5</span> <span class="hljs-attribute">-c60</span> <span class="hljs-attribute">-F</span> /<span class="hljs-built_in">data</span>/test<span class="hljs-built_in">.</span>nmon</code><ul style="" class="pre-numbering"><li>1</li></ul>

测试用例跑完再读取这个结果文件,获取有用的信息
当前只统计了磁盘io和cpu的占用率信息,原始文件保存在本地目录,如果需要,可以手动查看到。
监控脚本:

<code class="hljs bash has-numbering"><span class="hljs-shebang">#!/bin/bash</span><span class="hljs-comment">#读取监控服务器列表</span>SERVERLIST=`cat serverlist`DATE=`date +<span class="hljs-string">'%F'</span>`mkdir -p /data/loadtest/monitor/<span class="hljs-variable">$DATE</span>TIME=`date +<span class="hljs-string">'%T'</span>`<span class="hljs-comment">#发起监控</span><span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-variable">$SERVERLIST</span><span class="hljs-keyword">do</span>   ssh <span class="hljs-variable">$i</span> <span class="hljs-string">'nmon -f -t -s5 -c60 -F /data/test.nmon >/dev/null 2>&1 &'</span><span class="hljs-keyword">done</span><span class="hljs-comment">#监控5分钟</span>sleep <span class="hljs-number">303</span>>monitor.txt<span class="hljs-comment">#收集监控结果,保存到monitor.txt</span><span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-variable">$SERVERLIST</span><span class="hljs-keyword">do</span> scp <span class="hljs-variable">$i</span>:/data/test.nmon /data/loadtest/monitor/<span class="hljs-variable">$DATE</span>/<span class="hljs-variable">${i}</span>_<span class="hljs-variable">${TIME}</span>.nmon io=`cat /data/loadtest/monitor/<span class="hljs-variable">$DATE</span>/<span class="hljs-variable">${i}</span>_<span class="hljs-variable">${TIME}</span>.nmon|grep <span class="hljs-string">"DISKBUSY,T"</span> | awk -F <span class="hljs-string">','</span> <span class="hljs-string">'{sum+=$3} END {printf("%.2f%",sum/NR)}'</span>` cpu=`cat /data/loadtest/monitor/<span class="hljs-variable">$DATE</span>/<span class="hljs-variable">${i}</span>_<span class="hljs-variable">${TIME}</span>.nmon|grep <span class="hljs-string">"CPU_ALL,T"</span> | awk -F <span class="hljs-string">','</span> <span class="hljs-string">'{sum+=$6} END {printf("%.2f%",100-sum/NR)}'</span>` <span class="hljs-comment">#net=`cat /data/loadtest/monitor/$DATE/${i}_${TIME}.nmon|grep "NET,T"|awk -F ',' '{sum_r+=$4}{sum_w+=$6} END {print sum_r/NR,sum_w/NR}'`</span> <span class="hljs-built_in">echo</span> -n <span class="hljs-string">"<span class="hljs-variable">${cpu}</span> <span class="hljs-variable">${io}</span> "</span>>>monitor.txt<span class="hljs-keyword">done</span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li></ul>

将用例执行结果和监控结果都汇总到summary.txt里
生成的格式如下,方便后面生成html格式的报告

<code class="hljs coffeescript has-numbering">[root<span class="hljs-property">@localhost</span> loadtest]<span class="hljs-comment"># cat summary.txt </span><span class="hljs-regexp">/testcase/user/</span>获取用户自己的信息 <span class="hljs-number">10748.6</span> <span class="hljs-number">8</span> <span class="hljs-number">3225296</span> <span class="hljs-number">0</span> <span class="hljs-number">100.00</span>% pass <span class="hljs-number">32.87</span>% <span class="hljs-number">5.34</span>% <span class="hljs-number">81.59</span>% <span class="hljs-number">2.12</span>% <span class="hljs-number">0.15</span>% <span class="hljs-number">1.78</span>% <span class="hljs-number">12.13</span>% <span class="hljs-number">32.83</span>% <span class="hljs-number">17.18</span>% <span class="hljs-number">6.14</span>% <span class="hljs-regexp">/testcase/user/</span>未读消息数 <span class="hljs-number">11487.4</span> <span class="hljs-number">7</span> <span class="hljs-number">3446960</span> <span class="hljs-number">0</span> <span class="hljs-number">100.00</span>% pass <span class="hljs-number">32.33</span>% <span class="hljs-number">12.57</span>% <span class="hljs-number">69.02</span>% <span class="hljs-number">1.86</span>% <span class="hljs-number">0.18</span>% <span class="hljs-number">1.74</span>% <span class="hljs-number">13.55</span>% <span class="hljs-number">35.85</span>% <span class="hljs-number">18.56</span>% <span class="hljs-number">7.65</span>% </code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li></ul>

服务器监控脚本

<code class="hljs bash has-numbering"><span class="hljs-shebang">#!/bin/bash</span>SERVERLIST=`cat serverlist`DATE=`date +<span class="hljs-string">'%F'</span>`mkdir -p /data/loadtest/monitor/<span class="hljs-variable">$DATE</span>TIME=`date +<span class="hljs-string">'%T'</span>`<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-variable">$SERVERLIST</span><span class="hljs-keyword">do</span>   ssh <span class="hljs-variable">$i</span> <span class="hljs-string">'nmon -f -t -s5 -c60 -F /data/test.nmon >/dev/null 2>&1 &'</span><span class="hljs-keyword">done</span>sleep <span class="hljs-number">303</span>>monitor.txt<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-variable">$SERVERLIST</span><span class="hljs-keyword">do</span> scp <span class="hljs-variable">$i</span>:/data/test.nmon /data/loadtest/monitor/<span class="hljs-variable">$DATE</span>/<span class="hljs-variable">${i}</span>_<span class="hljs-variable">${TIME}</span>.nmon io=`cat /data/loadtest/monitor/<span class="hljs-variable">$DATE</span>/<span class="hljs-variable">${i}</span>_<span class="hljs-variable">${TIME}</span>.nmon|grep <span class="hljs-string">"DISKBUSY,T"</span> | awk -F <span class="hljs-string">','</span> <span class="hljs-string">'{sum+=$3} END {printf("%.2f%",sum/NR)}'</span>` cpu=`cat /data/loadtest/monitor/<span class="hljs-variable">$DATE</span>/<span class="hljs-variable">${i}</span>_<span class="hljs-variable">${TIME}</span>.nmon|grep <span class="hljs-string">"CPU_ALL,T"</span> | awk -F <span class="hljs-string">','</span> <span class="hljs-string">'{sum+=$6} END {printf("%.2f%",100-sum/NR)}'</span>` <span class="hljs-built_in">echo</span> -n <span class="hljs-string">"<span class="hljs-variable">${cpu}</span> <span class="hljs-variable">${io}</span> "</span>>>monitor.txt<span class="hljs-keyword">done</span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li></ul>

4.3生成html报告

<code class="hljs handlebars has-numbering"><span class="xml">#!/bin/sh>index.htmlecho "<span class="hljs-tag"><<span class="hljs-title">html</span>></span><span class="hljs-tag"><<span class="hljs-title">head</span>></span><span class="hljs-tag"><<span class="hljs-title">META</span> <span class="hljs-attribute">http-equiv</span>=<span class="hljs-value">\"Content-Type\"</span> <span class="hljs-attribute">content</span>=<span class="hljs-value">\"text</span>/<span class="hljs-attribute">html</span>; <span class="hljs-attribute">charset</span>=<span class="hljs-value">utf-8\"</span>/></span><span class="hljs-tag"><<span class="hljs-title">title</span>></span>用户端自动化性能测试报告<span class="hljs-tag"></<span class="hljs-title">title</span>></span>">>index.htmlecho `cat style.css`>>index.html(cat <span class="hljs-tag"><<<span class="hljs-attribute">EOF</span><<span class="hljs-attribute">script</span> <span class="hljs-attribute">language</span>=<span class="hljs-value">"JavaScript"</span>></span>               function show_detail(detail){                           if(detail.style.display=="none"){                           detail.style.display="";                           }                           else{                           detail.style.display="none";                           }                           }                           <span class="hljs-tag"></<span class="hljs-title">script</span>></span>EOF)>>index.htmlecho "<span class="hljs-tag"></<span class="hljs-title">head</span>></span><span class="hljs-tag"><<span class="hljs-title">body</span>></span><span class="hljs-tag"><<span class="hljs-title">h1</span>></span>用户端自动化性能测试报告<span class="hljs-tag"></<span class="hljs-title">h1</span>></span><span class="hljs-tag"><<span class="hljs-title">hr</span> <span class="hljs-attribute">size</span>=<span class="hljs-value">"1"</span>></span>">>index.htmlsum=`cat summary.txt | wc -l`sucess=`cat summary.txt|grep pass |grep -v grep|wc -l`fail=`expr $sum - $sucess`rate=`echo "$sucess $sum"|awk '{printf("%.2f%%",$1/$2*100)}'`(cat <span class="hljs-tag"><<<span class="hljs-attribute">EOF</span><<span class="hljs-attribute">table</span>></span><span class="hljs-tag"><<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">h2</span>></span>结果汇总<span class="hljs-tag"></<span class="hljs-title">h2</span>></span><span class="hljs-tag"><<span class="hljs-title">table</span> <span class="hljs-attribute">width</span>=<span class="hljs-value">"60%"</span> <span class="hljs-attribute">cellspacing</span>=<span class="hljs-value">"2"</span> <span class="hljs-attribute">cellpadding</span>=<span class="hljs-value">"5"</span> <span class="hljs-attribute">border</span>=<span class="hljs-value">"0"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"details"</span> <span class="hljs-attribute">align</span>=<span class="hljs-value">"left"</span>></span><span class="hljs-tag"><<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>总接口数<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>成功接口数<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>失败接口数<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>测试通过率<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">tr</span> <span class="hljs-attribute">align</span>=<span class="hljs-value">"center"</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>$sum<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>$sucess<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>$fail<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>$rate<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"></<span class="hljs-title">table</span>></span><span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span>EOF)>>index.html(cat <span class="hljs-tag"><<<span class="hljs-attribute">EOF</span><<span class="hljs-attribute">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">h2</span>></span>概要结果<span class="hljs-tag"></<span class="hljs-title">h2</span>></span><span class="hljs-tag"><<span class="hljs-title">table</span> <span class="hljs-attribute">width</span>=<span class="hljs-value">"95%"</span> <span class="hljs-attribute">cellspacing</span>=<span class="hljs-value">"2"</span> <span class="hljs-attribute">cellpadding</span>=<span class="hljs-value">"5"</span> <span class="hljs-attribute">border</span>=<span class="hljs-value">"0"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"details"</span> <span class="hljs-attribute">align</span>=<span class="hljs-value">"left"</span>></span><span class="hljs-tag"><<span class="hljs-title">tr</span> <span class="hljs-attribute">valign</span>=<span class="hljs-value">"top"</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>测试接口<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>每秒请求数(tps)<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>平均响应时间(ms)<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>总事务数<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>失败事务数<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>事务成功率<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>测试结果<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">tr</span> <span class="hljs-attribute">valign</span>=<span class="hljs-value">"top"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">""</span>></span>EOF)>>index.htmlcat summary.txt |while read linedo   echo $line | awk '{if($7=="pass"){print "<span class="hljs-tag"><<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$1"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$2"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$3"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$4"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$5"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$6"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">\"Pass\"</span>></span>"$7"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span>"}else{print "<span class="hljs-tag"><<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$1"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$2"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$3"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$4"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$5"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span>"$6"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">\"Failure\"</span>></span>"$7"<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span>"}}'>>index.htmldoneecho "<span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"></<span class="hljs-title">table</span>></span><span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span>">>index.htmlecho "<span class="hljs-tag"><<span class="hljs-title">table</span>></span><span class="hljs-tag"><<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">font</span> <span class="hljs-attribute">color</span>=<span class="hljs-value">"red"</span>></span><span class="hljs-tag"><<span class="hljs-title">b</span>></span>测试结果pass标准:tps>10000且事务成功率>90%<span class="hljs-tag"></<span class="hljs-title">b</span>></span><span class="hljs-tag"></<span class="hljs-title">font</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">td</span>></span><span class="hljs-tag"><<span class="hljs-title">h2</span>></span><span class="hljs-tag"><<span class="hljs-title">a</span> <span class="hljs-attribute">href</span>=<span class="hljs-value">\"javascript:show_detail(detail)\"</span>></span>详细结果查看附件<span class="hljs-tag"></<span class="hljs-title">a</span>></span><span class="hljs-tag"></<span class="hljs-title">h2</span>></span><span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"></<span class="hljs-title">table</span>></span>">>index.html#echo "<span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">\"page_details_expanded\"</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">\"detail\"</span> <span class="hljs-attribute">style</span>=<span class="hljs-value">\"display:none;\"</span> <span class="hljs-attribute">width</span>=<span class="hljs-value">\"95%\"</span>></span>">>index.html(cat <span class="hljs-tag"><<<span class="hljs-attribute">EOF</span><<span class="hljs-attribute">table</span> <span class="hljs-attribute">width</span>=<span class="hljs-value">"95%"</span> <span class="hljs-attribute">cellspacing</span>=<span class="hljs-value">"2"</span> <span class="hljs-attribute">cellpadding</span>=<span class="hljs-value">"5"</span> <span class="hljs-attribute">border</span>=<span class="hljs-value">"0"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"details"</span> <span class="hljs-attribute">align</span>=<span class="hljs-value">"left"</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"detail"</span> <span class="hljs-attribute">style</span>=<span class="hljs-value">"display:none"</span>></span><span class="hljs-tag"><<span class="hljs-title">tr</span> <span class="hljs-attribute">valign</span>=<span class="hljs-value">"top"</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>测试接口<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>每秒请求数tps<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>平均响应时间(ms)<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>总事务数<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>失败事务数<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>成功率<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>测试结果<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>nginx服务器cpu<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>nginx服务器io<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>web服务器cpu<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>web服务器io<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>service服务器cpu<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>service服务器io<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>主数据库服务器cpu<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>主数据库服务器io<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>从数据库服务器cpu<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"><<span class="hljs-title">th</span>></span>从数据库服务器io<span class="hljs-tag"></<span class="hljs-title">th</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"><<span class="hljs-title">tr</span> <span class="hljs-attribute">valign</span>=<span class="hljs-value">"top"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">""</span>></span>EOF)>>index.htmlj=1for i in `cat summary.txt`do    if [ `expr $j % 17 ` != 0 ]; then       echo '<span class="hljs-tag"><<span class="hljs-title">td</span> <span class="hljs-attribute">align</span>=<span class="hljs-value">"left"</span>></span>'$i'<span class="hljs-tag"></<span class="hljs-title">td</span>></span>'>>index.html   else      echo '<span class="hljs-tag"><<span class="hljs-title">td</span> <span class="hljs-attribute">align</span>=<span class="hljs-value">"left"</span>></span>'$i'<span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span>'>>index.html   fi   j=`expr $j + 1`doneecho "<span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"></<span class="hljs-title">table</span>></span><span class="hljs-tag"></<span class="hljs-title">td</span>></span><span class="hljs-tag"></<span class="hljs-title">tr</span>></span><span class="hljs-tag"></<span class="hljs-title">table</span>></span><span class="hljs-tag"></<span class="hljs-title">body</span>></span><span class="hljs-tag"></<span class="hljs-title">html</span>></span>">>index.html</span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li></ul>

html样式表

<code class="hljs xml has-numbering"><span class="hljs-tag"><<span class="hljs-title">style</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"text/css"</span>></span><span class="css"><span class="hljs-tag">body</span> <span class="hljs-rules">{        <span class="hljs-rule"><span class="hljs-attribute">font</span>:<span class="hljs-value">normal <span class="hljs-number">68</span>% verdana,arial,helvetica</span></span>;        <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value"><span class="hljs-hexcolor">#000000</span></span></span>;     <span class="hljs-rule">}</span></span><span class="hljs-tag">table</span> <span class="hljs-tag">tr</span> <span class="hljs-tag">td</span>, <span class="hljs-tag">table</span> <span class="hljs-tag">tr</span> <span class="hljs-tag">th</span> <span class="hljs-rules">{         <span class="hljs-rule"><span class="hljs-attribute">font-size</span>:<span class="hljs-value"> <span class="hljs-number">78</span>%</span></span>;     <span class="hljs-rule">}</span></span><span class="hljs-tag">table</span><span class="hljs-class">.details</span> <span class="hljs-tag">tr</span> <span class="hljs-tag">th</span><span class="hljs-rules">{         <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value"> <span class="hljs-hexcolor">#ffffff</span></span></span>;         <span class="hljs-rule"><span class="hljs-attribute">font-weight</span>:<span class="hljs-value"> bold</span></span>;         <span class="hljs-rule"><span class="hljs-attribute">text-align</span>:<span class="hljs-value">center</span></span>;         <span class="hljs-rule"><span class="hljs-attribute">background</span>:<span class="hljs-value"><span class="hljs-hexcolor">#2674a6</span></span></span>;         <span class="hljs-rule"><span class="hljs-attribute">white-space</span>:<span class="hljs-value"> nowrap</span></span>;     <span class="hljs-rule">}</span></span><span class="hljs-tag">table</span><span class="hljs-class">.details</span> <span class="hljs-tag">tr</span> <span class="hljs-tag">td</span><span class="hljs-rules">{        <span class="hljs-rule"><span class="hljs-attribute">background</span>:<span class="hljs-value"><span class="hljs-hexcolor">#eeeee0</span></span></span>;        <span class="hljs-rule"><span class="hljs-attribute">white-space</span>:<span class="hljs-value"> nowrap</span></span>;     <span class="hljs-rule">}</span></span><span class="hljs-tag">h1</span> <span class="hljs-rules">{        <span class="hljs-rule"><span class="hljs-attribute">margin</span>:<span class="hljs-value"> <span class="hljs-number">0</span>px <span class="hljs-number">0</span>px <span class="hljs-number">5</span>px</span></span>; <span class="hljs-rule"><span class="hljs-attribute">font</span>:<span class="hljs-value"> <span class="hljs-number">265</span>% verdana,arial,helvetica   </span></span></span>}<span class="hljs-tag">h2</span> <span class="hljs-rules">{        <span class="hljs-rule"><span class="hljs-attribute">margin-top</span>:<span class="hljs-value"> <span class="hljs-number">1</span>em</span></span>; <span class="hljs-rule"><span class="hljs-attribute">margin-bottom</span>:<span class="hljs-value"> <span class="hljs-number">0.5</span>em</span></span>; <span class="hljs-rule"><span class="hljs-attribute">font</span>:<span class="hljs-value"> bold <span class="hljs-number">185</span>% verdana,arial,helvetica   </span></span></span>}<span class="hljs-tag">h3</span> <span class="hljs-rules">{        <span class="hljs-rule"><span class="hljs-attribute">margin-bottom</span>:<span class="hljs-value"> <span class="hljs-number">0.5</span>em</span></span>; <span class="hljs-rule"><span class="hljs-attribute">font</span>:<span class="hljs-value"> bold <span class="hljs-number">115</span>% verdana,arial,helvetica   </span></span></span>}<span class="hljs-class">.Failure</span> <span class="hljs-rules">{        <span class="hljs-rule"><span class="hljs-attribute">font-weight</span>:<span class="hljs-value">bold</span></span>; <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value">red</span></span>;   <span class="hljs-rule">}</span></span><span class="hljs-class">.Pass</span> <span class="hljs-rules">{        <span class="hljs-rule"><span class="hljs-attribute">font-weight</span>:<span class="hljs-value">bold</span></span>; <span class="hljs-rule"><span class="hljs-attribute">color</span>:<span class="hljs-value">green</span></span>;   <span class="hljs-rule">}</span></span></span><span class="hljs-tag"></<span class="hljs-title">style</span>></span></code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li></ul>

4.4发送测试结果邮件

发邮件脚本

<code class="hljs python has-numbering"><span class="hljs-comment">#!/usr/bin/env python</span><span class="hljs-comment">#coding: utf-8  </span><span class="hljs-keyword">import</span> string<span class="hljs-keyword">import</span> smtplib<span class="hljs-keyword">import</span> os<span class="hljs-keyword">import</span> datetime<span class="hljs-keyword">from</span> email.mime.multipart <span class="hljs-keyword">import</span> MIMEMultipart<span class="hljs-keyword">from</span> email.mime.text <span class="hljs-keyword">import</span> MIMEText<span class="hljs-keyword">from</span> email.mime.base <span class="hljs-keyword">import</span> MIMEBase<span class="hljs-keyword">from</span> email.header <span class="hljs-keyword">import</span> Headertoday = datetime.date.today()sender = <span class="hljs-string">'xx@xx.com'</span>receiverlist = [<span class="hljs-string">"a@a.com"</span>,<span class="hljs-string">"b@b.com"</span>,<span class="hljs-string">"c@c.com"</span>]  subject = <span class="hljs-string">'%s %s'</span> % (<span class="hljs-string">'用户端自动化性能测试报告'</span>,today)smtpserver = <span class="hljs-string">'smtp.exmail.qq.com'</span>username = <span class="hljs-string">'xx@xx.com'</span>password = <span class="hljs-string">'xxx'</span>f = open(<span class="hljs-string">'index.html'</span>,<span class="hljs-string">"r"</span>)content = f.read()<span class="hljs-comment">#msg = MIMEText(content,'html','utf-8')</span>msg = MIMEMultipart()msg.attach(MIMEText(content,<span class="hljs-string">'html'</span>,<span class="hljs-string">'utf-8'</span>))msg[<span class="hljs-string">'From'</span>] = <span class="hljs-string">'xx@xx.com'</span>msg[<span class="hljs-string">'to'</span>] = <span class="hljs-string">','</span>.join(receiverlist)msg[<span class="hljs-string">'Subject'</span>] = subjectatt=MIMEText(open(<span class="hljs-string">'index.html'</span>,<span class="hljs-string">'rb'</span>).read(),<span class="hljs-string">'base64'</span>,<span class="hljs-string">'gb2312'</span>)att[<span class="hljs-string">"Conten-Type"</span>]=<span class="hljs-string">'application/octet-stream'</span>att[<span class="hljs-string">"Content-Disposition"</span>]=<span class="hljs-string">'attachment;filename="Load test result.html"'</span>msg.attach(att)smtp = smtplib.SMTP()smtp.connect(smtpserver)smtp.ehlo()smtp.starttls()smtp.ehlo()<span class="hljs-comment">#smtp.set_debuglevel(1)</span>smtp.login(username, password)smtp.sendmail(msg[<span class="hljs-string">'From'</span>],msg[<span class="hljs-string">'to'</span>],msg.as_string())smtp.quit()</code><ul style="" class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li></ul>

测试结果截图:
结果邮件



原创粉丝点击