技術(shù)領(lǐng)域
本發(fā)明涉及到服務(wù)器測試技術(shù),具體的說是一種對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法。
背景技術(shù):
隨著目前服務(wù)器領(lǐng)域的不斷發(fā)展與科技迅速進(jìn)步,市場需求也越來越大,測試領(lǐng)域面臨著嚴(yán)峻的挑戰(zhàn);能夠按時的達(dá)成服務(wù)器生產(chǎn)排配準(zhǔn)時出貨,不但關(guān)系到公司的信譽(yù)也代表一個公司的生產(chǎn)能力,同時也影響著客戶的滿意度。企業(yè)注重生產(chǎn)速度的同時也要求品質(zhì)有保障,對于研發(fā)及生產(chǎn)的測試要求越來越高。無論是研發(fā)段還是生產(chǎn)線的測試,產(chǎn)品的測試能夠高效的完成是至關(guān)重要的一個環(huán)節(jié)。
很多服務(wù)器產(chǎn)品都已經(jīng)進(jìn)入量產(chǎn)階段,出貨量極大同時測試端的壓力也翌日增大,每個測試項(xiàng)目都需要提高效率,但是目前的AC開關(guān)機(jī)測試項(xiàng)目都是使用老化機(jī)進(jìn)行測試,測試成本高,測試操作麻煩,效率也不理想;為了能夠提高測試效率同時降低成本,因此急需設(shè)計(jì)一種使用更低價的power box(又名EPDU)做為測試治具的測試方案,來滿足市場需求。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對目前技術(shù)發(fā)展的需求和不足之處,提供一種對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法。
本發(fā)明所述一種對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法,解決上述技術(shù)問題采用的技術(shù)方案如下:所述一種對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法,使用linux下perl語言編寫的自動化腳本,配合利用Power Box的工作原理,對服務(wù)器做AC開關(guān)機(jī)進(jìn)行自動化測試,主要包括如下步驟:1)設(shè)置服務(wù)器IP,設(shè)置Power Box的IP, 并確保服務(wù)器端的IP和Power Box在同一個網(wǎng)段,2)執(zhí)行自動化腳本進(jìn)行AC開關(guān)機(jī)測試,3)保存測試log。
優(yōu)選的, 使用網(wǎng)線、電源線將服務(wù)器與Power Box連接起來。
優(yōu)選的,所述步驟2)執(zhí)行自動化腳本進(jìn)行AC開關(guān)機(jī)測試,腳本執(zhí)行開始階段,設(shè)置自動化腳本運(yùn)行的時間。
優(yōu)選的,所述步驟3)中,產(chǎn)生測試log,并且測試log自動保存到腳本所在路徑下;當(dāng)AC開關(guān)機(jī)測試出現(xiàn)問題時,在終端會打印出:test fail;同樣,若測試通過會打印:test pass。
本發(fā)明所述一種對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法與現(xiàn)有技術(shù)相比具有的有益效果是:本發(fā)明通過linux 下perl 語言所編寫的自動化腳本,利用Power Box的工作原理來配合自動化腳本進(jìn)行AC開關(guān)機(jī)測試,并打印、保存測試log,降低操作復(fù)雜度并且減少人工輸入命令的時間,減少了不必要的人機(jī)交互過程,不會有人為配置時可能出現(xiàn)的錯誤,節(jié)省人力、時間、成本等資源,提高了測試效率和準(zhǔn)確性,同時測試的覆蓋率極高,確保產(chǎn)品出貨質(zhì)量;該方法操作簡單,實(shí)用性較強(qiáng),無需經(jīng)驗(yàn)也可完成相關(guān)操作,任何的問題產(chǎn)品都會被攔截下來并準(zhǔn)確定位問題,可應(yīng)用于大多數(shù)存儲器產(chǎn)品,具有較好的推廣使用價值。
附圖說明
圖1為服務(wù)器與power box的連接示意圖;
圖2為所述對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法的實(shí)施流程圖。
具體實(shí)施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚明白,以下結(jié)合具體實(shí)施例,對本發(fā)明所述一種對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法進(jìn)一步詳細(xì)說明。
實(shí)施例:
本實(shí)施例所述對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法, 是在linux下使用power box對服務(wù)器做AC開關(guān)機(jī)的自動化測試,使用linux下perl語言編寫的自動化腳本,配合利用Power Box的工作原理,對服務(wù)器做AC開關(guān)機(jī)進(jìn)行自動化測試,測試全程由自動化腳本自動執(zhí)行,并產(chǎn)生測試log,將測試log在終端打印,同時也保存在服務(wù)器上,讓測試有絕對保障。
所述Power box是網(wǎng)絡(luò)電源管理系統(tǒng),該系統(tǒng)完全涵蓋了傳統(tǒng)PDU、PCU所提供的功能,同時也完全顛覆了傳統(tǒng)PDU、PCU產(chǎn)品的設(shè)計(jì)理念。Power Box通過引入以太網(wǎng)絡(luò)、多途徑無線網(wǎng)絡(luò)、語音服務(wù)等新穎的通訊手段,增加了傳統(tǒng)PDU、PCU設(shè)備所不能提供的智能管理控制模塊,并使用控制芯片構(gòu)成了可遠(yuǎn)程管理和計(jì)劃管理的電源分配單元。Power Box上面有一個網(wǎng)口、16個電源插口;網(wǎng)口連接服務(wù)器后可以分配到IP,同時Power Box的管理系統(tǒng)可以通過該網(wǎng)口接收到服務(wù)器給的命令,主要是對電源插口進(jìn)行上下電。本實(shí)施例所述自動化測試方法以Power Box的電源插口可以通過命令上下電為基礎(chǔ),配合針因需求編寫的自動化腳本對服務(wù)器AC開關(guān)機(jī)進(jìn)行測試。
附圖2為所述對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法的實(shí)施流程圖,如附圖1所示,該自動化測試方法的具體實(shí)施過程如下:
1、搭建測試環(huán)境,準(zhǔn)備好測試治具:網(wǎng)線、電源線、Power Box(又名EPDU),如附圖1所示,將服務(wù)器與Power Box進(jìn)行連接;
2、在服務(wù)器端隨意的一臺服務(wù)器上面對Power Box進(jìn)行IP配置,例”set IP 192.168.0.1”,同樣對其它服務(wù)器的網(wǎng)絡(luò)進(jìn)行配置,確保服務(wù)器端的IP和Power Box在同一個網(wǎng)段,例(192.168.0.1,192.168.0.2等);
3、在服務(wù)器端的任意一臺主機(jī)上面,到腳本所在路徑下,開始執(zhí)行自動化腳本;例: cd /home/; chmod +x ac_powercycle ; ./ac_powercycle;
4、腳本執(zhí)行開始的階段,會提示輸入腳本需要運(yùn)行的時間,輸入完時間(單位S),敲回車,腳本繼續(xù)運(yùn)行;
5、測試log自動保存到腳本所在路徑下;例:/home/20160803ac_powercycle.log;
6、當(dāng)開關(guān)機(jī)測試出現(xiàn)問題時,在終端會打印出:test fail;同樣,若測試通過會打?。簍est pass。
本實(shí)施例所述對服務(wù)器做AC開關(guān)機(jī)的自動化測試方法,所使用的自動化腳本的具體內(nèi)容如下:
$telnet = new Net::Telnet ( Timeout => 10, Errmode => 'return',Prompt => '/[\>\:] $/');
GetOptions ("log=s" => \$log,
"help" => \$help,
"debug" => \$debug,
"delay=s" => \$delay,
"cli" => \$cli,
);
$ver = "E";
if($help == 1){
print"\n";
print"Version: $ver\n\n";
print"EATON Power Strip comtrol syntax:\n";
print" EATON Power Strip ip set to 192.168.0.1 (default ip for epdu\n";
print" epdu <csv_string(optional)> \n";
print" The csv string consists of commands followed by one or more variables.\n";
print" The commands available are 'on', 'off', 'delay' and 'status'.\n";
print" The variables following 'on', 'off' and 'status' are the outlet port number.\n";
print" The variables following 'delay' is the delay in seconds before proceeding to the next command.\n\n";
print"Example: 'epdu on,2,3,delay,10,off,4,5' \n";
print" In this example outlets 2 and 3 are turned on followed by a 10 second delay \n";
print" before outlets 4 and 5 are turned off. \n\n";
print"Result files:\n";
print" Outlet Status results are in /tmp/neptune/EATONstat_<ip>:<outlet number>.txt \n";
exit;
}
$ip = "192.168.0.1";
$pwrDetail = $ARGV[0] ;
$EATONstatFileName = $ARGV[1] ;
dprint"Filename:$EATONstatFileName\n";
$power_timeout=200;
dprint("ip:$ip");
dprint("pwrDetail:$pwrDetail\n");
$pwrDetailLength = length($pwrDetail);
dprint("pwrDetailLength:$pwrDetailLength");
$loggedIN = 0;
$retry = 0;
$uname = "Admin\r"; # manual telnet login for Linux: <ctrl>+<enter>, windows: <enter>
$pw = "ipc\r"; # need two <enter> for non-logout case per cyin
@cmd_return = (); # don't use 'my'
if($EATONstatFileName eq ""){$EATONstatFileName = "EATONstatFile.log"}
dprint("EATONstatFileName:$EATONstatFileName");
unless ($cli or $pwrDetail) { exit }
convert_to_comma_port;
until ( $loggedIN == 1 || $retry >= 100 ){
dprint("retry:$retry\n"); $retry++;
$usleep = int( rand( 10**6 ) );
dprint("epdu($pwrDetail) sleep $usleep useconds\n");
usleep $usleep;
unless ( check_epdu_process == 1 ) {
$usleep = int( rand( 5*10**6 ) );
dprint("epdu($pwrDetail) conflicts: sleep random $usleep usecond!\n");
usleep $usleep;
}
# $telnet->open cause running epdu script fail
# by sending <enter> to already running script
@pwr_return = $telnet->open($ip);
$telnet->waitfor('/login[: ]*$/i')
or next;
dprint("open:@pwr_return");
unless ( @pwr_return ){sleep 1;next}
@pwr_return = $telnet->cmd("$uname");
chomp(@pwr_return);
dprint("name:@pwr_return");
unless ( @pwr_return ){sleep 1;next} $telnet->waitfor('/Password[: ]*$/i')
or next;
@cmd_return = $telnet->cmd("$pw");
@cmd_return = return_main_menu;
chomp(@cmd_return);
foreach (@cmd_return){dprint("LogIn_pw:$_");}
unless ( grep {/Select.*Item.*Number/i} @cmd_return ){sleep 1;next}
$loggedIN = 1;
dprint("Logged in to ePDU");
}
chomp($date = `date +"%x %X"`); chomp($hostname = `hostname`); $errmsg = "\"Date:$date|Host:$hostname|ver:$ver|CMD:$pwrDetail|login retry($retry) exausted!\"";
if ($retry >= 100) { print ("\nretry exausted, exiting!\n\n"); `echo $errmsg >> /tmp/neptune/epdu_error.log`; exit }
$returnEATON = 0;
until ($returnEATON == 1) {
$item_str = "Outlet Control";
$command = get_item_number;
@cmd_return = $telnet->cmd($command);
dprint ("command: $command");
chomp(@cmd_return);
foreach(@cmd_return){
if ( $_ =~ /Control.*Sub.*Menu/ ){$returnEATON = 1}
dprint("Outlet Control:$_");
}
$item_str = "Outlet Control";
$command = get_item_number;
@cmd_return = $telnet->cmd($command);
dprint ("command: $command");
chomp(@cmd_return);
foreach(@cmd_return){
if ( $_ =~ /Outlet.*Control.*Sub.*Menu/ ){$returnEATON = 1}
dprint("Outlet Control Sub Menu:$_");
}
}
# issue command to power strip
$pwrCmdStep = 0;
$pwrOp = "";
$pwrPort = "";
$delaySec = 0;
$loopCnt = 0;
$command = ();
until ($command eq 'exit' || $command eq 'x') {
if ( $pwrDetailLength == 0 or $nextcli == 1 ) {
print "\nCLI: ";
chomp($command = <STDIN>);
$pwrDetail = $command;
convert_to_comma_port;
$pwrCmdStep = 0;
$pwrPort = ();
$pwrDetailLength = -1;
$nextcli = -1;
}else{
$pwrPort = "";
$pwrCmd = (split /\,/, $pwrDetail)[$pwrCmdStep];
if ( $pwrCmd eq "on" ) { $pwrOp = $pwrCmd }
elsif ( $pwrCmd eq "off" ) { $pwrOp = $pwrCmd }
elsif ( $pwrCmd eq "status" ) { $pwrOp = $pwrCmd }
elsif ( $pwrCmd eq "delay" ) { $pwrOp = $pwrCmd }
elsif ( $pwrCmd eq "" or $pwrCmd eq "x" or $pwrCmd eq "exit") { $command = "x" }
elsif ( $pwrCmd >= 0 ){
if ($pwrOp eq "delay") {
$delaySec = $pwrCmd ;
sleep $delaySec;
}else{
$pwrPort = $pwrCmd;
}
}
$pwrCmdStep++;
}。
上述具體實(shí)施方式僅是本發(fā)明的具體個案,本發(fā)明的專利保護(hù)范圍包括但不限于上述具體實(shí)施方式,任何符合本發(fā)明的權(quán)利要求書的且任何所屬技術(shù)領(lǐng)域的普通技術(shù)人員對其所做的適當(dāng)變化或替換,皆應(yīng)落入本發(fā)明的專利保護(hù)范圍。