我想通过模拟netmiko.connectHandler在哪里测试我的代码。 由于netmiko.connectHanler返回的对象将具有一个名为send_command的函数,并且我需要从该函数获取动态值,因此我编写了以下测试。
def mock_device_login(device_type, host, user, password):
fixture_file = os.path.join("tests/fixtures", "device_health_status.json")
dummy_stuff = json.loads(open(fixture_file, "r").read())
class mock_class(object):
def send_command(self, command):
return_dict = {'sh module' : dummy_stuff['module_output'],
'sh env alarm' : dummy_stuff['environment_output'],
'sh process cpu | inc CPU utilization' : dummy_stuff['cpu_usage_output'],
'sh ip bgp summary' : 'bgp summary',
'sh int desc': 'sh int desc',
'sh clock' : "*09:01:10.516 UTC Sun Aug 15 1993"
}
return return_dict[command]
return { "response": {"logged_in": True, "details": "successfully logged in", "next_action": "execute command" }, "result": True, "connection": mock_class() }
@patch('device_health_status.device_login', side_effect = mock_device_login)
def test_device_status(self, mock_device_login):
action = self.get_action_instance()
actionResult,json_result = action.run(device_type, host, username, password)
print(json_result['error_summary'])
self.assertTrue(actionResult, True)
self.assertEquals(json_result['environment_status'], 'GOOD')
self.assertEquals(json_result['cpu_usage'], 'GOOD')
self.assertEquals(json_result['module_status'], 'GOOD')
self.assertEquals(json_result['overall_device_status'], "GOOD")
此代码用于堆栈风暴,因此action.run是主要功能。 这段代码绝对可以正常工作,我的问题是,我必须多次编写此代码块,就像通过更改return_dict中的命令输出一样,因为我想针对设备的各种输出来测试我的代码。
我知道有@ ddt / @ data / @ unpack之类的东西。但是我不确定如何在这里使用它们,这样我就不必一次又一次重复相同的代码块。
在我的测试文件中,我有13个这样的案例,并且测试文件很大。
请问问题是否解决。有关Netmiko的更多信息可以在这里找到: https://pypi.org/project/netmiko/