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'",
}