您的位置:首页 > 运维架构 > Shell

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

2017-10-12 17:06 253 查看
转载地址: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.jmx
Starting 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>
4000
; <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/profile
Jmeter_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_test
sleep <span class="hljs-number">3</span>
<span class="hljs-comment">#生成html报告</span>
sh genHTML.sh
sleep <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
122ec
">"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.html
echo "<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.html
echo `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.html
echo "<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.html
sum=`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.html
cat summary.txt |while read line
do
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.html
done
echo "<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.html
echo "<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.html
j=1
for 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`
done
echo "<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> Header

today = 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>] = subject

att=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>



测试结果截图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: