📄 run-all-tests
字号:
#!/usr/bin/perl# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB## This library is free software; you can redistribute it and/or# modify it under the terms of the GNU Library General Public# License as published by the Free Software Foundation; either# version 2 of the License, or (at your option) any later version.## This library is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU# Library General Public License for more details.## You should have received a copy of the GNU Library General Public# License along with this library; if not, write to the Free# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,# MA 02111-1307, USA## This program runs all test that starts with 'test-' and sums# the results that the program prints.# Each time result should be of the form:# Time for|to KEYWORD (number_of_runs) 'other info': timestr()## All options to this script is passed to all test program.# useful options:# --fast --force --lock-tables# --server ==> mysql (default) / mSQL / Pg (postgres) / Solid# --user ==> the user with permission to create / drop / select# --pass ==> password for the user# --cmp ==> Compare --server with one of the others (mysql/mSQL/Pg/Solid)# --comments ==> everything you want to say such as the extra options you# gave to the db server. (use --comments="xxx xxx xxx"# --machine ==> Give a OS/machine id for your logfiles.# --log ==> puts output in output/RUN-server-machine-cmp-$opt_cmpuse DBI;use Cwd;$opt_silent=1; # Don't write header@ORG_ARGV=@ARGV;$pwd = cwd(); $pwd = "." if ($pwd eq '');require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";$opt_silent=0;$perl=$^X;$machine=machine();$redirect= !($machine =~ /windows/i || $machine =~ "^NT\s") ? "2>&1" : "";$dir= ($pwd =~ /\\/) ? '\\' : '/'; # directory symbol for shell$prog_args="";foreach $arg (@ORG_ARGV){ if ($redirect) { $prog_args.="'" . $arg . "' "; } else { # Windows/NT can't handle ' around arguments $prog_args.=$arg . " "; }}$prog_count=$errors=0;if ($opt_cmp) { $filename = "$opt_server$opt_suffix-" . machine_part() . "-cmp-$opt_cmp";} else { $filename = "$opt_server$opt_suffix-" . machine_part();}if (! -d $opt_dir){ if (-e $opt_dir) { die "$opt_dir isn't a directory\n"; } mkdir $opt_dir,0777 || die "Can't create directory: $opt_dir\n";}if ($opt_skip_test) { (@skip_tests) = split(/,\s*/, $opt_skip_test);}if ($opt_old_headers){ read_headers("$opt_dir/RUN-$filename");}else{ $server_version=$server->version();}if (!$opt_log){ open(LOG,">&STDOUT");}else{ open(LOG, "> $opt_dir/RUN-$filename") || die "Can't write to $opt_dir/RUN-$filename: $!\n";}select(LOG);$|=1;print "Benchmark DBD suite: $benchmark_version\n";print "Date of test: $date\n";print "Running tests on: $machine\n";print "Arguments: $log_prog_args\n";print "Comments: $opt_comments\n";print "Limits from: $opt_cmp\n";print "Server version: $server_version\n";print "Optimization: $opt_optimization\n";print "Hardware: $opt_hw\n\n";$estimated=$warning=$got_warning=0;while (<test-*>){ next if (/\.sh$/); # configure script next if (/\-fork$/); # test script $prog_count++; /test-(.*)$/; # Remove test from name $prog=$1; $skip_prog = 0; foreach $skip_this (@skip_tests) { if ($prog =~ /$skip_this/i) { $skip_prog = 1; last; } } print "$prog: "; if ((!$opt_use_old_results) && (!$skip_prog)) { if (system("$perl ./test-$prog $prog_args > \"$opt_dir$dir$prog-$filename\" $redirect")) { printf STDERR "Warning: Can't execute $prog. Check the file '$opt_dir$dir$prog-$filename'\n"; die "aborted" if ($opt_die_on_errors); } } open(TEST,"$opt_dir/$prog-$filename"); $last_line=""; while(<TEST>) { chomp; $last_line=$_ if (!(/^\s*$/)); # Search after last line } if ($last_line =~ /Total time:/i) { print $last_line . "\n"; open(TEST,"$opt_dir/$prog-$filename"); while (<TEST>) { if (/^(estimated |)time (to|for) ([^\s:]*)\s*\((\d*)(:\d*)*\)[^:]*:\s*([\d.]+) .*secs \(\s*([^\s]*) usr\s*\+*\s*([^\s]*) sys.*=\s+([\d.]*)\s+cpu/i) { $arg=$summa{$3}; if (!defined($arg)) { $summa{$3}= [ $4,$6,$7,$8,$9,""]; } else { $arg->[0]+=$4; $arg->[1]+=$6; $arg->[2]+=$7; $arg->[3]+=$8; $arg->[4]+=$9; } $prog_sum[0]+=$4; $prog_sum[1]+=$6; $prog_sum[2]+=$7; $prog_sum[3]+=$8; $prog_sum[4]+=$9; if (length($1)) { $summa{$3}->[5].="+"; $estimated=1; } if ($got_warning) { $summa{$3}->[5].="?"; $warning=1; $got_warning=0; } } elsif (/^warning/i) { $got_warning=1; } else { $got_warning=0; } } if ($opt_debug) { print "Summary for $prog: ", join(" ",@prog_sum), "\n"; } } elsif ($last_line =~ /^Test skipped/i) { print "$last_line\n"; } else { $errors++; print "Failed ($opt_dir/$prog-$filename)\n"; }}print "\n";if (!$errors){ print "All $prog_count test executed successfully\n";}else{ print "Of $prog_count tests, $errors tests didn't work\n";}if ($estimated){ print "Tests with estimated time have a + at end of line\n"}if ($warning){ print "Tests with didn't return the correct result have a ? at end of line\n";}if (%summa){ @total=(0,0,0,0,0,""); print "\nTotals per operation:\n"; print "Operation seconds usr sys cpu tests\n"; foreach $key (sort(keys %summa)) { $arg=$summa{$key}; printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %s\n", $key,$arg->[1],$arg->[2],$arg->[3],$arg->[4],$arg->[0], $arg->[5]); for ($i=0 ; $i < 5 ; $i++) { $total[$i]+=$arg->[$i]; } $total[5].=$arg->[$i]; } printf("%-35.35s %7.2f %7.2f %7.2f %7.2f %7d %s\n", "TOTALS",$total[1],$total[2],$total[3],$total[4],$total[0], $total[5]);}select(STDOUT);if ($opt_log){ print "Test finished. You can find the result in:\n$opt_dir/RUN-$filename\n";}## Read headers from an old benchmark run#sub read_headers{ my ($filename)=@_; # Clear current values $benchmark_version=$date=$machine=$server_version=""; open(TMP, "<$filename") || die "Can't open $filename\n"; while (<TMP>) { chop; if (/^Benchmark DBD.*:\s+(.*)$/) { $benchmark_version=$1; } elsif (/^Date of.*:\s+(.*)/) { $date=$1; } elsif (/^Running.*:\s+(.*)$/) { $machine=$1; } elsif (/^Arguments.*:\s+(.*)$/) { $log_prog_args=$1; } elsif (/^Limits.*:\s+(.*)$/) { $opt_cmp=$1; } elsif (/^Server ver.*:\s+(.*)$/) { $server_version=$1; } elsif (/^Optimiz.*:\s+(.*)$/) { $opt_optimization=$1; } elsif (/^Hardwar.*:\s+(.*)$/) { $opt_hw=$1; } } close(TMP);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -