#!/bin/bash
#功能描述: 进行兼容性测试、指标日志采集工具
CURRENT_PATH="$(pwd)/tests"
FILE_PATH="${LKP_PATH}/tests"
current_time=$(date "+%Y%m%d")
log_file="info.log_${current_time}"
error_file="error.log_${current_time}"
app_log_file="app_log.log_${current_time}"
nmap_log_file="nmap.log_${current_time}"
# 创建日志目录
clear
echo "===================测试开始: $(date "+%Y-%m-%d %H:%M:%S")==========================="
if [[ ! -d "${CURRENT_PATH}/log" ]]; then
mkdir -p ${CURRENT_PATH}/log
fi
# 清空日志文件。
log_files=( "${CURRENT_PATH}"/log/"${error_file}" "${CURRENT_PATH}"/log/"${app_log_file}" "${CURRENT_PATH}"/log/"${nmap_log_file}" "${CURRENT_PATH}"/log/"${log_file}")
for file in "${log_files[@]}"; do
if [[ -f "${file}" ]]; then
cat /dev/null >"${file}"
else
touch ${file}
fi
done
SYS_LOG_="messages"
BINARY_PACK=0
# declare -a product_result_array
declare -a snapshot_result_array
declare -a performance_test_pid_array
write_messages() {
# 日志输出函数
# 参数1:输出日志级别
# 参数2:输出颜色,0-默认,31-红色,32-绿色,33-黄色,34-蓝色,35-紫色,36-天蓝色,3-白色。
# 参数3:执行步骤。
# 参数4:输出的日志内容。
DATE=$(date "+%Y-%m-%d %H:%M:%S")
messages=$4
step=$3
level_info=$1
colors=$2
case ${level_info} in
a) echo -e "\033[1;34m${messages}\033[0m"
;;
i) echo "#${DATE}#info#${step}#${messages}" >> ${CURRENT_PATH}/log/"${log_file}"
;;
e) echo "#${DATE}#error#${step}#${messages}" >> ${CURRENT_PATH}/log/"${log_file}"
echo -e "\033[1;31m${messages}\033[0m"
;;
m) echo "#${DATE}#value#${step}#${messages}" >> ${CURRENT_PATH}/log/"${log_file}" ;;
s) echo "#${DATE}#serious#${step}#${messages}" >> ${CURRENT_PATH}/log/"${error_file}"
echo -e "\033[1;31m${messages}\033[0m"
;;
c) echo -e "\033[1;${colors}m${messages}\033[0m"
echo "#${DATE}#info#${step}#${messages}" >> ${CURRENT_PATH}/log/"${log_file}"
;;
esac
sleep 1
}
kill_process() {
# 强制杀死进程
OLD_IFS="${IFS}"
IFS=','
process_name=$1
kill_results=""
kill_result="$(pgrep -f "${process}" | xargs kill -9 >> ${CURRENT_PATH}/log/"${log_file}" 2>&1)"
if [[ "${kill_result}" != '' ]]; then
kill_results="${kill_result}"";""${kill_result}"
fi
IFS="${OLD_IFS}"
}
counting_time(){
ds=$1
(
tput sc
for ((dsec = "${ds}"; dsec > 0; dsec--)); do
min=$((dsec / 60))
se=$((dsec % 60))
tput rc
tput ed
echo -ne "\r 采集预计剩余时间:${min}:${se}\r"
sleep 1
done
) &
}
notice_users() {
write_messages c 34 0 "自动化兼容性测试开始前,请用户先填写配置文件compatibility_testing.conf,填写说明请参考README"
write_messages c 34 0 "自动化兼容性测试开始执行,脚本分为9个步骤,运行时间约13分钟,请耐心等待。"
write_messages i 0 0 "自动化测试采集工具开始执行。"
write_messages a 0 0 "自动化测试采集工具开始执行。"
}
production_env_waring() {
write_messages c 31 0 "请注意以下是为保证测试过程能够顺利进行的3个必要条件:"
write_messages c 31 0 "1.为了有权限检查系统日志,请使用root用户执行脚本"
write_messages c 31 0 "2.若安装KunpengDeveloper工具,测试期间停止该工具"
write_messages c 31 0 "3.测试期间会不断启动和停止待测试应用软件,请勿在生产环境执行兼容性测试工具。默认当前环境不是生产环境。"
}
check_configuration() {
# 检查用户填写配置项是否为空
config_file="${FILE_PATH}/compatibility-testing.conf"
if [[ -f "${config_file}" ]]; then
application_names=$(sed '/^application_names=/!d;s/application_names=//' "${config_file}")
start_app_commands=$(sed '/^start_app_commands=/!d;s/start_app_commands=//' "${config_file}")
stop_app_commands=$(sed '/^stop_app_commands=/!d;s/stop_app_commands=//' "${config_file}")
start_performance_scripts=$(sed '/^start_performance_scripts=/!d;s/start_performance_scripts=//' "${config_file}")
binary_file=$(sed '/^binary_file=/!d;s/binary_file=//' "${config_file}")
if [[ -z "${application_names}" ]]; then
write_messages e 31 2 "配置文件中的应用名称为空,请填写正确后重启脚本。"
exit
fi
if [[ -z "${start_app_commands}" ]]; then
write_messages e 31 2 "配置文件中的应用启动命令为空。"
exit
fi
if [[ -z "${stop_app_commands}" ]]; then
write_messages e 31 2 "配置文件中的应用停止命令为空。"
exit
fi
if [[ -z "${start_performance_scripts}" ]]; then
write_messages e 31 2 "配置文件中的压力测试工具启动命令为空。"
exit
fi
if [[ -n "${binary_file}" ]];then
BINARY_PACK=1
fi
else
write_messages e 31 2 "配置文件不存在,请检查。"
exit
fi
}
create_result_dir() {
# 创建采集目录
write_messages i 0 1 "创建目录"
result_dirs=("data/hardware/" "data/software/" "data/product/"
"data/test/performance/" "data/test/compatiable/" "data/test/power" "data/test/safety/")
for dir in "${result_dirs[@]}"; do
real_dir="${CURRENT_PATH}/${dir}"
if [[ ! -d "${real_dir}" ]]; then
mkdir -p "${real_dir}"
else
find "${real_dir}" -type f -name "*.log*" -exec rm {} \;
fi
done
}
# 检查系统环境,安装依赖软件
env_preparation() {
bash "${FILE_PATH}/env_preparation.sh"
if [[ $? -ne 0 ]]; then
write_messages e 0 1 "安装依赖软件失败,失败原因请查看目录${CURRENT_PATH}/log/${log_file} 的日志"
exit
fi
}
sys_env_inspectation() {
# 从CPU、内存、硬盘和网卡四个角度检查利用率是否过高,如果过高则提升当前环境非空闲
bash "${FILE_PATH}/env_inspectation.sh"
if [[ $? -ne 0 ]]; then
write_messages e 0 1 "当前服务器的环境非空闲,请停止运行的业务软件,详细信息查看目录${CURRENT_PATH}/log/${log_file} 的日志"
exit
fi
}
get_service_info() { #==========================5=========================
# 获取服务器信息
# 功能描述:获取测试环境的硬件配置
# bash "${CURRENT_PATH}/obtain_service_info.sh"
if [[ ${BINARY_PACK} -eq 1 ]]; then
if [[ -f ${binary_file} ]]; then
gcc_file="${CURRENT_PATH}/data/software/system_version.log"
echo -e "\n=${binary_file}=" >>${gcc_file} 2>> /dev/null;
echo -e "\n=============binary files=============" >>${gcc_file} 2>> /dev/null;
strings ${binary_file} |grep -E 'GCC|gcc|clang' >>${gcc_file} 2>> /dev/null;
else
write_messages e 0 4 "配置文件填写的二进制文件不存在。"
fi
fi
file_name_list=("data/hardware/hardware_info.log" "data/hardware/hardware_pcie.log" "data/hardware/hardware_cpu.log"
"data/hardware/hardware_disk.log" "data/software/system_version.log")
command_list=("dmidecode" "lspci -nnvv" "lscpu" "lsblk" "cat /proc/version")
command_desc=("服务器型号" "pci信息" "CPU信息" "硬盘分区" "内核信息")
length=${#file_name_list[@]}
for ((i = 0; i < "${length}"; i++)); do
file_name="${CURRENT_PATH}/${file_name_list[$i]}"
comm=${command_list[$i]}
desc=${command_desc[$i]}
if ! eval "${comm}" >"${file_name}"; then
write_messages e 0 4 "调用命令${comm}获取${desc}失败"
else
write_messages i 0 4 "调用命令${comm}获取${desc}完成"
fi
done
if hash smartctl 2>/dev/null ; then
smatrt_file="${CURRENT_PATH}/data/hardware/hardware_smartctl.log"
OLD_IFS="${IFS}"
IFS=$'\n'
for device in $(smartctl --scan|awk -F"#" '{print $1}');
do
smartctl_cmd="smartctl -a ${device}"
eval "${smartctl_cmd}" >> "${smatrt_file}" 2>> /dev/null;
done
IFS="${OLD_IFS}"
fi
if hash gcc 2>/dev/null ; then
gcc_file="${CURRENT_PATH}/data/software/system_version.log"
echo -e "\n=============gcc=============" >>${gcc_file} 2>> /dev/null;
gcc --version >> ${gcc_file} 2>> /dev/null;
fi
if hash clang 2>/dev/null ; then
echo -e "\n=============clang=============" >>${gcc_file} 2>> /dev/null;
clang --version >> ${gcc_file} 2>> /dev/null;
fi
if hash java 2>/dev/null ; then
echo -e "\n=============java=============" >>${gcc_file} 2>> /dev/null;
java -version >> ${gcc_file} 2>> /dev/null 2>&1;
fi
}
check_process_exits_stop() {
# 检查业务应用是否存在,如果存在停止进程。
step=$1
OLD_IFS="${IFS}"
IFS=','
read -r -a app_list <<< "$application_names"
read -r -a stop_comm_list <<< "$stop_app_commands"
length=${#app_list[@]}
sleep_time=10
STOP_APP_FLAG=0
for ((i = 0; i < "${length}"; i++)); do
process=${app_list[$i]}
ps_result="$(pgrep -lf ${process})"
if [[ "${ps_result}" != "" ]]; then
write_messages i 34 "${step}" "进程${process}存在"
STOP_APP_FLAG=1
else
if [[ ${step} -ne 4 ]]; then
write_messages i 34 "${step}" "进程${process}不存在"
fi
fi
done
if [[ "${step}" -eq 9 && "${STOP_APP_FLAG}" -eq 0 ]] ; then
for stop_comm in "${stop_comm_list[@]}"; do
eval "${stop_comm}" >> "${CURRENT_PATH}"/log/"${app_log_file}" 2>&1
if [[ "$?" -ne 0 ]]; then
cd "${CURRENT_PATH}"||exit
write_messages e 0 "${step}" "执行${stop_comm}出错"
else
cd "${CURRENT_PATH}"||exit
fi
done
fi
if [[ "${STOP_APP_FLAG}" -eq 1 ]] ; then
for stop_comm in "${stop_comm_list[@]}"; do
eval "${stop_comm}" >> "${CURRENT_PATH}"/log/"${app_log_file}" 2>&1
if [[ "$?" -ne 0 ]]; then
cd "${CURRENT_PATH}"||exit
write_messages e 0 "${step}" "执行${stop_comm}出错"
else
cd "${CURRENT_PATH}"||exit
fi
done
for ((i = 0; i < "${length}"; i++)); do
process=${app_list[$i]}
check_times=5
while [[ ${check_times} -gt 0 ]];do
sleep "${sleep_time}"
ps_result="$(pgrep -lf ${process})"
if [[ "${ps_result}" != "" ]]; then
write_messages e 0 "${step}" "执行${stop_comm}后,等待${sleep_time}秒,${process}存在"
kill_process ${process}
check_times=$((check_times -1))
else
if [[ ${step} -ne 4 ]]; then
write_messages e 34 "${step}" "进程${process}不存在"
fi
break
fi
done
if [[ ${check_times} -le 0 ]] ; then
write_messages e 0 "${start_step}" "停止业务应用${process}失败,请用户检查停止脚本。"
exit
fi
done
fi
IFS="${OLD_IFS}"
}
get_performance() {
# 进行CPU、内存、硬盘、网卡和功耗指标采集
# 参数1:采集时间间隔
# 参数2:采集时长
# 参数3:采集序列,0:表示兼容测前采集,1:表示性能测试采集,2表示兼容测试后采集
# 参数4:步骤
frequency=$1
seq=$3
during_time=$2
step=$4
if [[ ${step} -eq 7 ]]; then
counting_time 150
else
counting_time 90
fi
times=$((during_time * 20 / frequency))
desc_array=('兼容性测试前采集' '性能测试采集' '兼容性测试后采集')
if [[ "${seq}" -eq 1 ]]; then
file_path="${CURRENT_PATH}/data/test/performance/"
file_seq=1
elif [[ "${seq}" -eq 0 ]]; then
file_path="${CURRENT_PATH}/data/test/compatiable/"
file_seq=0
else
file_path="${CURRENT_PATH}/data/test/compatiable/"
file_seq=1
fi
if [[ ! -d "${file_path}" ]]; then
mkdir -p "${file_path}"
fi
file_name="test_perf_cpu_${file_seq}.log"
write_messages i 0 "${step}" "${desc_array[${seq}]}:调用sar -u ${frequency} ${times}命令采集CPU指标"
if ! sar -u "${frequency}" ${times} >"${file_path}""${file_name}"; then
write_messages e 0 "${step}" "调用sar -u ${frequency} ${times}命令采集CPU指标失败"
write_messages s 0 "${step}" "${desc_array[${seq}]}调用sar -u ${frequency} ${times}命令采集CPU指标失败"
fi
file_name="test_perf_mem_${file_seq}.log"
write_messages i 0 "${step}" "${desc_array[${seq}]}:调用sar -r ${frequency} ${times}命令采集内存指标"
if ! sar -r "${frequency}" ${times} >"${file_path}""${file_name}"; then
write_messages e 0 "${step}" "调用sar -r ${frequency} ${times}命令采集内存指标失败"
write_messages s 0 "${step}" "${desc_array[${seq}]}调用sar -r ${frequency} ${times}命令采集内存指标失败"
fi
file_name="test_perf_net_${file_seq}.log"
write_messages i 0 "${step}" "${desc_array[${seq}]}:调用sar -n DEV ${frequency} ${times}命令采集网卡指标"
if ! sar -n DEV "${frequency}" ${times} >"${file_path}""${file_name}"; then
write_messages e 0 "${step}" "调用sar -n DEV ${frequency} ${times}命令采集网卡指标失败"
write_messages s 0 "${step}" "${desc_array[${seq}]}调用sar -n DEV ${frequency} ${times}命令采集网卡指标失败"
fi
file_name="test_perf_disk_${file_seq}.log"
write_messages i 0 "${step}" "${desc_array[${seq}]}:调用sar -d -p ${frequency} ${times}命令采集硬盘指标"
if ! sar -d -p "${frequency}" ${times} >"${file_path}""${file_name}"; then
write_messages e 0 "${step}" "调用sar -d -p ${frequency} ${times}命令采集硬盘指标失败"
write_messages s 0 "${step}" "${desc_array[${seq}]}调用sar -d -p ${frequency} ${times}命令采集硬盘指标失败"
fi
if [[ "${seq}" -ne 1 ]];then
write_messages i 0 "${step}" "${desc_array[${seq}]}:调用ipmitool采集功耗指标"
file_name="test_power_${file_seq}.log"
times=$((during_time * 20 / frequency))
while [[ ${times} -gt 0 ]];
do
if ! ipmitool -I open sensor get 'Power'|grep 'Sensor Reading '|awk '{print $4}' \
>>"${power_path}""${file_name}"; then
write_messages e 0 "${step}" "调用ipmitool -I open sensor get 'Power'采集功耗失败"
fi
sleep "${frequency}"
times=$((times-1))
done
write_messages i 0 "${step}" "功耗测试已完成"
fi
write_messages i 0 "${step}" "${desc_array[${seq}]}已完成"
}
start_app(){
# 启动业务应用进程
start_step=$1
if [[ ${start_step} -eq 5 ]];then
check_process_exits_stop "${start_step}"
fi
OLD_IFS="${IFS}"
IFS=','
read -r -a app_list <<< "$application_names"
read -r -a start_comm_list <<< "$start_app_commands"
length=${#app_list[@]}
SLEEP_TIME=10
for start_comm in "${start_comm_list[@]}"; do
if ! eval "${start_comm}" >> "${CURRENT_PATH}"/log/"${app_log_file}" 2>&1 ;then
cd "${CURRENT_PATH}"||exit
write_messages e 0 "${start_step}" "执行${start_comm}报错,请手动执行命令启动业务应用"
exit
fi
# cd "${CURRENT_PATH}"||exit
done
for ((i = 0; i < "${length}"; i++)); do
process=${app_list[$i]}
check_times=5
while [[ ${check_times} -gt 0 ]];do
sleep "${SLEEP_TIME}"
ps_result="$(pgrep -lf ${process})"
if [[ "${ps_result}" != "" ]]; then
write_messages i 0 "${start_step}" "业务应用${process}启动完成。"
write_messages a 0 "${start_step}" "业务应用${process}启动完成。"
break
else
check_times=$((check_times -1))
fi
done
if [[ ${check_times} -le 0 ]]; then
write_messages e 0 "${start_step}" "启动业务应用${process}失败,请用户检查启动脚本。"
exit
fi
done
IFS="${OLD_IFS}"
}
get_ps_snapshot() {
# 获取服务器进程的快照
file_path="${CURRENT_PATH}/data/product/"
file_name='product_name.log'
index=0
if ! ps aux >${file_path}${file_name}; then
snapshot_result_array[$index]='False'
write_messages e 0 5 "调用ps aux命令获取服务器进程快照失败"
exit
else
snapshot_result_array[$index]='True'
fi
}
port_scan() {
# 安全扫描,使用nmap进行端口扫描
file_path="${CURRENT_PATH}/data/test/safety/"
write_messages i 0 6 "现在进行端口安全测试"
ip_addrs=$(ifconfig -a | grep inet | grep -v '127.0.0.1\|172.17.0.1' | grep -v inet6 \
| awk '{print $2}' | sed -e 's/addr://g')
if [ -z "${ip_addrs}" ]; then
write_messages e 0 6 "获取主机IP地址出错"
fi
for ip in ${ip_addrs}; do
write_messages c 34 6 "安全测试采集:执行${ip}的 TCP 端口扫描"
if ! nmap -sS -A -v --reason -p- -n -Pn -oA ${file_path}"${ip}""tcp" "${ip}" --host-timeout 360\
>>${CURRENT_PATH}/log/"${nmap_log_file}" 2>&1; then
write_messages e 0 6 "${ip}的TCP 端口扫描出错"
fi
write_messages c 34 6 "安全测试采集:执行${ip}的 UDP 端口扫描"
if ! nmap -sU -A -v --reason -p- -n -Pn -oA ${file_path}"${ip}""udp" "${ip}" --host-timeout 360\
>>${CURRENT_PATH}/log/"${nmap_log_file}" 2>&1; then
write_messages e 0 6 "${ip}的UDP 端口扫描出错"
fi
write_messages c 34 6 "安全测试采集:执行${ip}的 protocol扫描"
if ! nmap -sO -v --reason -n -oA ${file_path}"${ip}""protocol" "${ip}" --host-timeout 360\
>>${CURRENT_PATH}/log/"${nmap_log_file}" 2>&1; then
write_messages e 0 6 "${ip}的Protocol 端口扫描出错"
fi
done
write_messages i 0 6 "端口安全测试结束"
}
start_performance_test(){
# 调用压力测试命令进行压力测试。
write_messages i 0 7 "启动压力测试工具"
OLD_IFS="${IFS}"
IFS=','
read -r -a start_performance_scripts <<< "$start_performance_scripts"
length=${#start_performance_scripts[@]}
for ((i = 0; i < "${length}"; i++)); do
start_script=${start_performance_scripts[$i]}
pattern='&$'
if [[ $start_script =~ $pattern ]];then
eval "${start_script}" >> ${CURRENT_PATH}/log/"${app_log_file}" 2>&1
PID=$!
cd "${CURRENT_PATH}"||exit
else
eval "(${start_script})&" >> ${CURRENT_PATH}/log/"${app_log_file}" 2>&1
PID=$!
cd "${CURRENT_PATH}"||exit
fi
if ! ps -fp "${PID}"> /dev/null; then
write_messages e 0 7 "调用命令${start_script}启动测试工具失败,请检查配置文件中应用软件的启动命令后,重新执行。"
exit
else
performance_test_pid_array[$i]="${PID}"
fi
done
IFS="${OLD_IFS}"
}
reliablity_test(){
# 可靠性测试
OLD_IFS="${IFS}"
IFS=','
read -r -a app_list <<< "$application_names"
read -r -a start_comm_list <<< "$start_app_commands"
SLEEP_TIME=20
RELIABLE_TEST_FLAG=0
for pid in "${performance_test_pid_array[@]}"
do
# 当前pid的所有子进程
sub_pids=$(pgrep -P ${pid})
for subpid in ${sub_pids};
do
kill -9 "${subpid}" >>${CURRENT_PATH}/log/"${log_file}" 2>&1
done
disown "${pid}"
kill -9 "${pid}" >>${CURRENT_PATH}/log/"${log_file}" 2>&1
if [[ $? -ne 0 ]] ; then
write_messages e 0 8 "压力测试工具停止${pid}失败."
fi
sleep "${SLEEP_TIME}"
done
length=${#app_list[@]}
for ((i = 0; i < "${length}"; i++));
do
process=${app_list[$i]}
ps_result="$(pgrep -lf ${process})"
if [[ "${ps_result}" != "" ]]; then
write_messages i 0 8 "可靠性测试前检查,业务应用进程${process}存在"
write_messages a 0 8 "可靠性测试前检查,业务应用进程${process}存在"
if ! kill_process ${process} >>${CURRENT_PATH}/log/"${log_file}" 2>&1 ; then
write_messages e 0 8 "可靠性测试,执行强制杀死进程${process}报错,可靠性测试失败。"
exit
else
write_messages i 0 8 "可靠性测试,执行强制杀死进程${process}"
write_messages a 0 8 "可靠性测试,执行强制杀死进程${process}"
fi
else
write_messages e 31 8 "可靠性测试前,业务应用${process}已停止,可靠性测试失败。"
exit
fi
done
sleep "${SLEEP_TIME}"
start_app 8
for ((i = 0; i < "${length}"; i++));
do
process=${app_list[$i]}
ps_result="$(pgrep -lf ${process})"
if [[ "${ps_result}" != "" ]]; then
write_messages i 0 8 "可靠性测试,业务应用${process}启动完成。可靠性测试成功"
write_messages a 0 8 "可靠性测试,业务应用${process}启动完成。可靠性测试成功"
else
write_messages e 31 8 "可靠性测试,业务应用${process}启动失败,可靠性测试失败。"
exit
fi
done
IFS="${OLD_IFS}"
}
HCS6_PREFIX="172.35.77.249:58089/rest/v2/virtualMachine/verifyIsHCS?mac="
HCS8_PREFIX="172.36.0.10:58089/rest/v2/virtualMachine/verifyIsHCS?mac="
check_physical_system(){
# 判断当前系统是否是物理服务器
CURRENT_SYS=""
CURRENT_SYS_=$(dmidecode -s system-product-name)
if [[ ${CURRENT_SYS}x == ""x ]];then
CURRENT_SYS="${CURRENT_SYS_}"
else
CURRENT_SYS="${CURRENT_SYS}"";""${CURRENT_SYS_}"
fi
if echo "${CURRENT_SYS_}" |grep -i "virtual" ; then
CURRENT_MAC=$(ifconfig `nmcli connection|grep -v 'virbr0' |grep -v 'NAME' |awk '{print $1}'|egrep -E "eth|enp"` |egrep "ether" |awk '{print $2}')
HCS_CHECK_FLAG=$(curl --connect-timeout 5 ${HCS6_PREFIX}${CURRENT_MAC} 2> /dev/null)
if [[ ${HCS_CHECK_FLAG} == "" ]]; then
HCS_CHECK_FLAG=$(curl --connect-timeout 5 ${HCS8_PREFIX}${CURRENT_MAC} 2> /dev/null)
fi
if [[ ${HCS_CHECK_FLAG} == "" ]]; then
write_messages i 0 1 "KVM类型:非旗舰店HCS虚拟机。"
else
write_messages i 0 1 "KVM类型:${HCS_CHECK_FLAG}"
fi
fi
}
# echo "===================测试开始: $(date "+%Y-%m-%d %H:%M:%S")==========================="
notice_users
production_env_waring
create_result_dir
# 1、检查配置文件是否正确
write_messages c 34 1 "第 1 步:配置文件检查, 开始"
check_configuration
write_messages c 34 1 "第 1 步:配置文件检查, 完成"
# 2
write_messages c 34 1 "第 2 步:软件依赖检查,开始"
# 检测依赖是否安装成功
env_preparation
write_messages c 34 1 "第 2 步:软件依赖检查,完成"
# 3、环境自检
write_messages c 34 3 "第 3 步:测试环境自检, 开始"
check_physical_system
sys_env_inspectation
write_messages c 34 3 "第 3 步:测试环境自检, 完成"
# 4,服务器信息
write_messages c 34 4 "第 4 步:应用启动前CPU、内存、硬盘、网卡和功耗系统资源采集"
# 4.1系统信息采集
get_service_info
# 4.2检查应用进程,若存在则停止
check_process_exits_stop 4
# 4.3兼容性测试前进行CPU,内存,硬盘、网卡和功耗指标采集
get_performance 10 1 0 4
sleep 10
write_messages c 34 4 "第 4 步:应用启动前采集结束"
# 5、启动业务
write_messages c 34 5 "第 5 步:启动业务应用,可通过${CURRENT_PATH}/log目录info.log查看进度。"
# 5.1应用启动
start_app 5
# 5.2完成快照
get_ps_snapshot
write_messages c 34 5 "第 5 步:启动业务应用完成"
# 6、安全检查
write_messages c 34 6 "第 6 步:安全测试,进行应用端口扫描,可通过${CURRENT_PATH}/log目录的nmap.log查看进度"
port_scan
write_messages c 34 6 "第 6 步:安全测试结束"
# 7进行压力测试
write_messages c 34 7 "第 7 步:进行业务压力下CPU、内存、硬盘和网卡系统资源采集"
# 7.1、压力测试采集
start_performance_test
# 7.2、兼容性测试时进行CPU,内存,硬盘、网卡和功耗指标采集
get_performance 10 2 1 7
sleep 20
write_messages c 34 7 "第 7 步:压力测试采集结束."
# 8、可靠性测试
write_messages c 34 8 "第 8 步:进行可靠性测试,强制KILL应用后正常启动测试"
reliablity_test
write_messages c 34 8 "第 8 步:可靠性测试结束."
# 9、
write_messages c 34 9 "第 9 步:应用停止后CPU、内存、硬盘、网卡和功耗系统资源采集"
check_process_exits_stop 9
get_performance 10 1 2 9
sleep 10
write_messages c 34 9 "第 9 步:应用停止后资源采集结束"
zip -r "compatibility-${current_time}.zip" ${CURRENT_PATH} > /dev/null
echo "================测试结果保存在: ${CURRENT_PATH} 文件夹下,压缩文件保存为compatibility-${current_time}.zip================"
echo "================测试结束:$(date "+%Y-%m-%d %H:%M:%S")==========================="
exit