自动化测试框架
通常我们看的自动化测试框架,大部分是用于测试软件类产品,对于SSD这样的硬件产品来说,要进行自动化测试搭建,实现方案上可选择性并不太多。目前仅分享我自己接触到的几类比较方便的自动化测试框架
Pytest
远程执行模块:paramiko
本地执行模块:subprocess,OS
测试第三方工具:fio, vdbench, ipmitool, sysstat, nvme-cli等
实现方案:
- SSD 预留测试接口,可直接通过shell cmd或win cmd下发调控
- 将接口写成公共类,将远程模块自行定义封装格式及回显
- 通过pytest 框架进行用例编写
实现结果类似如下:
pytest调试过程如上
测试报告如下:
paramiko 封装实例
import paramiko
import time
import subprocess
import platform
class ssh1(object):
port = 22
usr = 'root'
def __int__(self,port, usr):
self.port = port
self.usr = usr
def ssh_Connect(self, hostid='1', cmd='ls',password='1234' ):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect(hostname=hostid, username=self.usr,password=password,port=self.port)
stdin, stdout, stderr = ssh.exec_command(r'%s' % cmd, get_pty=True)
result = {'ip':hostid, 'cmd': cmd, 'res': stdout.readlines(), 'stderr': stderr}
ssh.close()
return result
# def ssh_ht_Pid(self):
# ssh = paramiko.SSHClient()
# ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
# ssh.connect(hostname=hostid, username=self.usr, password=password, port=self.port)
# stdin, stdout, stderr = ssh.exec_command(r'%s' % cmd, get_pty=True)
# while stdout.readlines() :
if __name__ == '__main__':
sshconnect = ssh1()
sshconnect.ssh_Connect()
pytest 环境公用配置代码如下:
```python
import pytest
import sshconnect
@pytest.fixture(scope="class")
def getenv():
device = ["/dev/nvme0n1", "/dev/nvme1n1", "/dev/nvme2n1", "/dev/nvme3n1", "/dev/nvme4n1"]
hostip = "192.168.x.xxx"
envdict = {"device": device, "hostip": hostip}
return envdict
工具类接口代码如下
# coding=utf-8
import os
import sshconnect
import time
class commands(object):
def pcie_check_status(self):
kw = ['DevSta', 'MaxReadReq', 'LnkSta', 'UESta', 'CESta']
nvme_nu = ''.join(self.device).split('ev')[-1].replace('/', '')
bdf = "ls -l /sys/block/ |grep %s |awk -F /nvme/ '{print $1}'|awk -F / '{print $NF}'" % nvme_nu
ssh = sshconnect.ssh1()
bdf_value = ssh.ssh_Connect(hostid=self.ip, cmd=bdf)['recored']
for key in kw:
commands_pcie = 'lspci -vvv -s %s | grep %s' % (bdf_value[0].replace('\r\n', ''), key)
print commands_pcie
ssh = sshconnect.ssh1()
pcie_info = ssh.ssh_Connect(hostid=self.ip, cmd=commands_pcie)['recored']
if key != 'LnkSta':
if '+' not in ''.join(pcie_info):
print self.device + ' : ' + ''.join(pcie_info)
else:
print 'PCIe link error'
assert '+' in ''.join(pcie_info)
else:
if 'downgrade' not in ''.join(pcie_info):
print self.device + ' : ' + ''.join(pcie_info)
else:
print 'PCIe link error'
assert '+' in ''.join(pcie_info)
if __name__ == '__main__':
pass
上述函数为查询PCIE建链状态的方法
按照此模板方式扩展,即可实现自动化测试环境搭建。