接上回,贴代码:
1.数据库接口写法:
<?php
$appVersion=$_POST['appVersion'];
$date=$_POST['date'];
$duration=$_POST['duration'];
$crashCount=$_POST['crashCount'];
$totalCount=$_POST['totalCount'];
$osVersion=$_POST['osVersion'];
$deviceName=$_POST['deviceName'];
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("iMonkey", $con);
mysql_query("INSERT INTO iDetailData (appVersion, date, duration, crashCount, totalCount, osVersion, deviceName) VALUES (\"$appVersion\", \"$date\", \"$duration\", \"$crashCount\", \"$totalCount\", \"$osVersion\", \"$deviceName\")");
mysql_close($con);
echo ("ok");
echo ("\n");
//------------------------------------------------------
// $versionManager=$_POST['versionManager'];
// $agingTime=$_POST['agingTime'];
//
// $con = mysql_connect("127.0.0.1:3306","root","");
// if (!$con)
// {
// die('Could not connect: ' . mysql_error());
// }
//
// mysql_select_db("iMonkey", $con);
//
// $sql="INSERT INTO mAdminInfo (versionManager, agingTime) VALUES (\"$versionManager\", \"$agingTime\")";
// echo($sql);
//
// mysql_query($sql);
// // mysql_query("INSERT INTO mAdminInfo (versionManager,agingTime) VALUES (,$agingTime)");
// mysql_close($con);
//
// // echo($versionManager);
// echo ("\n");
//
?>
2.周期性预警写法#!/bin/bash
clear
echo iMonkey service started at `date`
i=0
while true
do
if [ $(($i%96)) = 0 ]
then
curl "http://10.61.3.24/iMonkeyDeamon/alert/crashAlert.php"
echo crash checked
sleep 5
curl "http://10.61.3.24/iMonkeyDeamon/alert/testQuantityAlert.php"
echo test hour checked
fi
curl "http://10.61.3.24/iMonkeyDeamon/autoCountData/autoCountData.php"
echo data synced
sleep 895
i=$(( $i + 1 ))
done
3.数据库结构
额,反正就双心结构,所有数据传一个大表,周期性数据统计count到统计表中。count代码贴下面:
<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("iMonkey", $con);
$sql="SELECT count(*) FROM `iDetailData` where note=0 ";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$newItemFlag= $row[0] ;
}
if($newItemFlag==0){
exit(0);
}
$sql="select max(date) from iCrashCount ";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$notedDate= $row[0] ;
}
$sql="select date_format(now(),'%y%m%d') ";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result))
{
$newDate= $row[0] ;
}
if($notedDate!=$newDate){
$sql="insert into iCrashCount (date) values (date_format(now(),'%y%m%d'))";
mysql_query($sql);
$sql="insert into iTestQuantity (date) values (date_format(now(),'%y%m%d'))";
mysql_query($sql);
}
$sql="update iCrashCount set ios6CrashCount=(ios6CrashCount+(SELECT sum(crashCount) FROM `iDetailData` where note=0 and osVersion like '6%' and date=date_format(now(),'%y%m%d'))) where date = date_format(now(),'%y%m%d')";
mysql_query($sql);
$sql="update iCrashCount set ios7CrashCount=(ios7CrashCount+(SELECT sum(crashCount) FROM `iDetailData` where note=0 and osVersion like '7%' and date=date_format(now(),'%y%m%d'))) where date = date_format(now(),'%y%m%d')";
mysql_query($sql);
$sql="update iCrashCount set ios8CrashCount=(ios8CrashCount+(SELECT sum(crashCount) FROM `iDetailData` where note=0 and osVersion like '8%' and date=date_format(now(),'%y%m%d'))) where date = date_format(now(),'%y%m%d')";
mysql_query($sql);
$sql="update iTestQuantity set ios6TestHour=(ios6TestHour+(SELECT sum(duration) FROM `iDetailData` where note=0 and osVersion like '6%' and date=date_format(now(),'%y%m%d'))) where date = date_format(now(),'%y%m%d')";
mysql_query($sql);
$sql="update iTestQuantity set ios7TestHour=(ios7TestHour+(SELECT sum(duration) FROM `iDetailData` where note=0 and osVersion like '7%' and date=date_format(now(),'%y%m%d'))) where date = date_format(now(),'%y%m%d')";
mysql_query($sql);
$sql="update iTestQuantity set ios8TestHour=(ios8TestHour+(SELECT sum(duration) FROM `iDetailData` where note=0 and osVersion like '8%' and date=date_format(now(),'%y%m%d'))) where date = date_format(now(),'%y%m%d')";
mysql_query($sql);
$sql="update `iCrashCount` set totalCrashCount=ios6CrashCount+ios7CrashCount+ios8CrashCount";
mysql_query($sql) or die(mysql_error());
echo ($sql);
$sql="update `iTestQuantity` set totalTestHour=ios6TestHour+ios7TestHour+ios8TestHour";
mysql_query($sql) or die(mysql_error());
$sql="SELECT max(appVersion) FROM iDetailData";
$result=mysql_query($sql);
$latestVersion = mysql_fetch_array($result)[0];
$sql="SELECT max(appVersion) FROM iVersionData";
$result=mysql_query($sql);
$notedLatestVersion = mysql_fetch_array($result)[0];
echo("$latestVersion,$notedLatestVersion");
if($latestVersion!=$notedLatestVersion){
/*************************************************************************************************************************************/
$sql="INSERT into iVersionData (appVersion,firstDate) VALUES ((SELECT max(appVersion) FROM iDetailData),(select date_format(now(),'%y%m%d')));";
mysql_query($sql);
/*************************************************************************************************************************************/
}else{
$sql="update `iVersionData` set lastDate=(date_format(now(),'%y%m%d')) where appVersion=( select max(appVersion) from iDetailData)";
mysql_query($sql);
$sql="select sum(crashCount) from iDetailData where date=date_format(now(),'%y%m%d') and appVersion=(select max(appVersion) FROM iVersionData)";
$crashCount=mysql_query($sql);
$sql="select sum(duration) from iDetailData where date=date_format(now(),'%y%m%d') and appVersion=(select max(appVersion) FROM iVersionData)";
$gestureCount=mysql_query($sql);
$crashRate=$crashCount/($gestureCount*60*60*2);
echo($crashRate);
$sql="update iVersionData set finalCrashRate=\"$crashRate\" where appVersion=(select max(appVersion) FROM iDetailData)";
mysql_query($sql);
}
$sql="update iDetailData set note =1";
$result=mysql_query($sql);
mysql_close($con);
?>
4.预警邮件还是提一下邮件。因为预警条件可能比较多,需要一个邮件模版响应多种预警类型。其实就是传参数的时候,多维一点。贴邮件代码:
# -*- coding: utf-8 -*-
import smtplib
import email.MIMEMultipart# import MIMEMultipart
import email.MIMEText# import MIMEText
import email.MIMEBase# import MIMEBase
import os.path
import mimetypes
import sys
option=sys.argv[1]
#item=sys.argv[2]
print option
From = "amapmonkey@autonavi.com"
if(option=='safe'):
os._exit(0)
comment=''
detail=''
#target=open('config/crashCounter')
#crashCounter=target.read()
#target.close()
#strA=['"',crashCounter,'"']
#crashCounter=''.join(strA)
target=open('alert.html')
resultContent=target.read()
target.close()
if(option=='crashAsendAlert'):
comment='稳定性持续降低'
detail='每日monkey测试产生的崩溃数量,在最近3天内一直增加'
if(option=='crashBurstAlert'):
comment='崩溃率爆发性增长'
detail='今日产生的崩溃数量,远远大于昨天。建议check最近的代码改动,以及是否存在兼容性问题'
if(option=='testHourLack'):
comment='测试时间不足'
detail='最近三天的monkey测试中,每天的总测试量都小于20小时'
if(option=='100'):
comment='测试时遗漏平台'
detail='最近3天中,没有对ios6平台进行稳定性测试'
if(option=='010'):
comment='测试时遗漏平台'
detail='最近3天中,没有对ios7平台进行稳定性测试'
if(option=='001'):
comment='测试时遗漏平台'
detail='最近3天中,没有对ios8平台进行稳定性测试'
if(option=='110'):
comment='测试时遗漏平台'
detail='最近3天中,没有对ios6和ios7平台进行稳定性测试'
if(option=='101'):
comment='测试时遗漏平台'
detail='最近3天中,没有对ios6和ios8平台进行稳定性测试'
if(option=='011'):
comment='测试时遗漏平台'
detail='最近3天中,没有对ios7和ios8平台进行稳定性测试'
if(option=='111'):
comment='未发现测试数据回传'
detail='最近三天中,iMonkey数据平台并没有收到iMonkey客户端回传的测试数据。请查看网络状态是否正常,是否进行了monkey测试'
if(option=='000'):
os._exit(0)
resultContent=resultContent.replace('comment',comment)
resultContent=resultContent.replace('detail',detail)
To = 'guangyin.li@autonavi.com'
#Count = crashCounter
server = smtplib.SMTP("mail.autonavi.com")
server.login("id","password") #仅smtp服务器需要验证时
# 构造MIMEMultipart对象做为根容器
main_msg = email.MIMEMultipart.MIMEMultipart()
# 构造MIMEText对象做为邮件显示内容并附加到根容器
#text_msg = email.MIMEText.MIMEText(resultContent,_charset="utf-8")
text_msg = email.MIMEText.MIMEText(resultContent,'html','utf-8')
main_msg.attach(text_msg)
# 构造MIMEBase对象做为文件附件内容并附加到根容器
# 设置根容器属性
main_msg['From'] = From
main_msg['To'] = To
main_msg['Subject'] = "Monkey Report"
main_msg['Date'] = email.Utils.formatdate( )
# 得到格式化后的完整文本
fullText = main_msg.as_string( )
# 用smtp发送邮件
try:
server.sendmail(From, To, fullText)
# main_msg['To'] = Count
# server.sendmail(From, Count, fullText)
finally:
server.quit()
以上代码是可以复用的,改掉ip和邮箱。后面贴UI自动化的框架部分,只有2层能复用了。1层3层请自构,工作量一般不小。