服务器CPU测试

1、测试项:位置、数量、厂商、版本、最大频率、当前运行频率、核数、线程数量、类型、电压、外频、状态、PN号等

2、Windows一般用CPU-z

3、Linux一般使用dmidecode

dmidecode命令通常需要root权限

dmidecode  打印所有硬件信息

dmidecode –q  打印所有硬件信息,比较简洁 

dmidecode | grep 'Product Name‘ 过滤的方式来查看指定的硬件信息

dmidecode -t processor |grep ‘Socket Designation’, 位置

dmidecode -t processor |grep ‘Socket Designation’|wc -l, CPU数量

dmidecode -t processor | grep {0} -A50 | grep ‘Manufacturer’,厂商,参数为Locate

dmidecode -t processor | grep {0} -A50 | grep ‘Version’,版本

dmidecode -t processor | grep {0} -A50 | grep ‘Max Speed’,最大频率

dmidecode -t processor | grep {0} -A50 | grep ‘Current Speed’,当前运行频率

dmidecode -t processor | grep {0} -A50 | grep ‘Core Count’,核数

dmidecode -t processor | grep {0} -A50 | grep ‘Thread Count’线程数量

4、测试原理

5、示例

import json
import subprocess
from time import sleep


class CPU_check(object):
    """CPU 测试"""

    def __init__(self):
        """初始化"""
        self.run_cmd_number = 0

    def get_cmd(self, myitem):
        """
        获取该测试项的指令
        :param myitem:为测试项
        :return: 返回指令
        """
        try:
            with open('./cpu_cmd.json', 'r', encoding='utf8') as fp:
                json_data = json.load(fp)
            return json_data.get(myitem)
        except Exception as e:
            print('获取该测试项的预期值,异常', e)

    def get_expected(self, myitem):
        """
        获取该测试项的预期值
        :param myitem:为测试项
        :return: 返回预期值
        """
        try:
            with open('./cpu_expected.json', 'r', encoding='utf8') as fp:
                json_data = json.load(fp)
                return json_data.get(myitem)
        except Exception as e:
            print('获取该测试项的预期值,异常', e)

    def run_cmd(self, myLocate, myitem,  mycmd):
        """
        运行指令获取实际值
        :param myLocate:为Locate
        :param myitem:为测试项
        :param mycmd:为运行的指令
        :return: 返回预实际值
        """
        # 若指令连续运行4次还是失败,则视为该条指令运行失败
        if self.run_cmd_number >= 3:
            return False
        if myitem == "Qty" or myitem == "Locate":
            cmd = f"sudo {mycmd}"
        else:
            cmd = f"sudo {mycmd.format(myLocate)}"
        print('cmd: ', cmd)
        status, res = subprocess.getstatusoutput(cmd)
        if status == 0:
            if mycmd == "dmidecode -t processor |grep 'Core Count'|wc -l":
                return res.strip()
            return res.split(':')[-1].strip()
        else:
            self.run_cmd_number += 1
            sleep(1)
            self.run_cmd(myLocate, myitem,  mycmd)  # 若指令运行失败,则重复运行4次

    def run(self, mytest_item):
        """
        入口函数
        :param mytest_item:为测试项列表
        """
        print("CPU测试开始")
        PASS = 0
        FAIL = 0
        if mytest_item:
            Locate = self.get_expected("Locate")
            for item in mytest_item:
                print("准备测试: {0}".format(item))
                expected = self.get_expected(item)
                mycmd = self.get_cmd(item)
                # print('cmd: ', mycmd)
                actual = self.run_cmd(Locate, item, mycmd)
                if expected == actual:
                    PASS += 1
                    print("{0}测试PASS, 预期值为: {1}, 实际值为: {2}".format(item, expected, actual))
                else:
                    FAIL += 1
                    print("{0}测试FAIL, 预期值为: {1}, 实际值为: {2}".format(item, expected, actual))
                sleep(1)
        print("CPU测试完成")
        print("共测试: {0}项,成功: {1}项,失败: {2}项, 测试成功率: {3}".format(PASS + FAIL, PASS, FAIL, '{:.2%}'.format(PASS / (PASS + FAIL))))


if __name__ == "__main__":
    test_item = [
        "Locate",
        "Qty",
        "Manufacturer",
        "Version",
        "Max_Speed",
        "Current_Speed",
        "Core_Count",
        "Thread_Count",
        "Type",
        "Voltage",
        "External_Clock",
        "Status",
        "Part_Number"
    ]
    cpu_check = CPU_check()
    cpu_check.run(test_item)

6、期望值、指令

{
  "Locate": "U3E1",
  "Qty": "1",
  "Manufacturer": "Intel(R) Corporation",
  "Version": "Intel(R) Core(TM) i5-10500 CPU @ 3.10GHz",
  "Max_Speed": "4500 MHz",
  "Current_Speed": "3100 MHz",
  "Core_Count": "6",
  "Thread_Count": "12",
  "Type": "Central Processor",
  "Voltage": "0.9 V",
  "External_Clock": "100 MHz",
  "Status": "Populated, Enabled",
  "Part_Number": "To Be Filled By O.E.M."
}
{
  "Locate": "dmidecode -t processor |grep 'Socket Designation'",
  "Qty": "dmidecode -t processor |grep 'Core Count'|wc -l",
  "Manufacturer": "dmidecode -t processor | grep {0} -A50 | grep 'Manufacturer'",
  "Version": "dmidecode -t processor | grep {0} -A50 | grep 'Version'",
  "Max_Speed": "dmidecode -t processor | grep {0} -A50 | grep 'Max Speed'",
  "Current_Speed": "dmidecode -t processor | grep {0} -A50 | grep 'Current Speed'",
  "Core_Count": "dmidecode -t processor | grep {0} -A50 | grep 'Core Count'",
  "Thread_Count": "dmidecode -t processor | grep {0} -A50 | grep 'Thread Count'",
  "Type": "dmidecode -t processor | grep {0} -A50 | grep '[^ ]Type'",
  "Voltage": "dmidecode -t processor | grep {0} -A50 | grep 'Voltage'",
  "External_Clock": "dmidecode -t processor | grep {0} -A50 | grep 'External Clock'",
  "Status": "dmidecode -t processor | grep {0} -A50 | grep 'Status'",
  "Part_Number": "dmidecode -t processor | grep {0} -A50 | grep 'Part Number'",
  "Id": "dmidecode -t processor | grep {0} -A50 | grep 'ID'",
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值