【问题标题】:importing python netmiko library in robotframework在robotframework中导入python netmiko库
【发布时间】:2017-10-22 19:57:32
【问题描述】:

我是robotframework 和netmiko 的初学者。 我尝试在 python 中使用 netmiko 打印出 whoami。

import netmiko

mydevice = {
'device_type': 'linux',
'ip': '127.0.0.1',
'username': 'gns3',
'password': 'gns3',
'verbose':True
}

conn = netmiko.ConnectHandler(**mydevice)
cmd = 'whoami\n'
output = conn.send_command(cmd)

def display_cmd():
    print(conn.find_prompt() + cmd + output + '\n')

if __name__ == '__main__':
    print (display_cmd())

看起来工作正常。

gns3@gns3vm:~/project$ python netmiko_test.py
SSH connection established to 127.0.0.1:22
Interactive SSH session established
gns3@gns3vm:~$whoami
gns3

None

然后我尝试在这里制作快速简单的机器人文件。

*** Settings ***
Library         netmiko_test.py

*** Test Case ***
whoami      display whoami

*** Keywords ***
display whoami
    ${result}  display cmd
    Log To Console     ${result}

我预计 log.html 中会出现相同的 python 输出,并且全部通过,但出现以下错误。

gns3@gns3vm:~/project$ robot rf_test.robot
[ ERROR ] Error in file '/home/gns3/project/rf_test.robot': Importing test library '/home/gns3/project/netmiko_test.py' failed: SSHException: No existing session
Traceback (most recent call last):
  File "/home/gns3/project/netmiko_test.py", line 11, in <module>
    conn = netmiko.ConnectHandler(**mydevice)
  File "/usr/local/lib/python2.7/dist-packages/netmiko/ssh_dispatcher.py", line 131, in ConnectHandler
    return ConnectionClass(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/netmiko/base_connection.py", line 151, in __init__
    self.establish_connection()
  File "/usr/local/lib/python2.7/dist-packages/netmiko/base_connection.py", line 532, in establish_connection
    self.remote_conn_pre.connect(**ssh_connect_params)
  File "/usr/local/lib/python2.7/dist-packages/paramiko/client.py", line 391, in connect
    server_key = t.get_remote_server_key()
  File "/usr/local/lib/python2.7/dist-packages/paramiko/transport.py", line 718, in get_remote_server_key
    raise SSHException('No existing session')
PYTHONPATH:
  /usr/local/bin
  /usr/lib/python2.7
  /usr/lib/python2.7/plat-x86_64-linux-gnu
  /usr/lib/python2.7/lib-tk
  /usr/lib/python2.7/lib-old
  /usr/lib/python2.7/lib-dynload
  /usr/local/lib/python2.7/dist-packages
  /usr/lib/python2.7/dist-packages
==============================================================================
Rf Test
==============================================================================
whoami                                                                | FAIL |
No keyword with name 'display cmd' found.
------------------------------------------------------------------------------
Rf Test                                                               | FAIL |
1 critical test, 0 passed, 1 failed
1 test total, 0 passed, 1 failed
==============================================================================
Output:  /home/gns3/project/output.xml
Log:     /home/gns3/project/log.html
Report:  /home/gns3/project/report.html

你能告诉我哪里错了吗?

谢谢。

【问题讨论】:

  • 你的 Python 文件的名称是什么?
  • 代码中也是一样的,“netmiko_test.py”

标签: robotframework


【解决方案1】:

如果您发布的文件与您运行的文件相同,那么我猜您没有使用正确的功能来打印到控制台。也就是说,这是一个相当小的例子,我为你格式化为一个库。由于我没有运行Netmiko 的选项,我无法正确测试。

import netmiko

class NetmikoLibrary(object):

    ROBOT_LIBRARY_VERSION = 1.0

    def __init__(self):
        pass

    def display_cmd(self, cmd = 'whoami\n'):
        '''
            This is my Netmiko keyword to execute a command.
        '''
        mydevice = {
        'device_type': 'linux',
        'ip': '127.0.0.1',
        'username': 'gns3',
        'password': 'gns3',
        'verbose':True
        }

        conn = netmiko.ConnectHandler(**mydevice)

        output = conn.send_command(cmd)
        return output

这确实意味着您可以加载您的库略有不同:Library NetmikoLibrary

【讨论】:

    【解决方案2】:

    谢谢 Kootstra。我不知道所有变量都必须在执行命令(display_cmd)中,但认为所有内容即使位于 display_cmd 之外也可以解决。

    在 display_cmd 中重新定位变量后,它现在可以工作了。

    import netmiko
    
    def display_cmd():
        mydevice = {
        'device_type': 'linux',
        'ip': '127.0.0.1',
        'username': 'gns3',
        'password': 'gns3',
        'verbose':True
        }
    
        conn = netmiko.ConnectHandler(**mydevice)
        cmd = 'whoami\n'
        output = conn.send_command(cmd)
    
        return (conn.find_prompt() + cmd + output + '\n')
    
    if __name__ == '__main__':
        print (display_cmd())
    

    这样的结果,都通过了。

    gns3@gns3vm:~/project$ robot rf_test.robot
    ==============================================================================
    Rf Test
    ==============================================================================
    whoami                                                                gns3@gns3vm:~$whoami
    gns3
    
    whoami                                                                | PASS |
    ------------------------------------------------------------------------------
    Rf Test                                                               | PASS |
    1 critical test, 1 passed, 0 failed
    1 test total, 1 passed, 0 failed
    ==============================================================================
    Output:  /home/gns3/project/output.xml
    Log:     /home/gns3/project/log.html
    Report:  /home/gns3/project/report.html
    

    谢谢。

    【讨论】:

      猜你喜欢
      • 2020-01-03
      • 2015-10-10
      • 2020-07-22
      • 2022-12-06
      • 1970-01-01
      • 2017-02-02
      • 2014-12-19
      • 2018-07-08
      • 2018-01-17
      相关资源
      最近更新 更多