2017-06-01 40 views
2

我是Robot Framework的新手 - 我试图将此代码称为机器人框架,但无济于事。我只需要一些帮助,以便在机器人框架中运行我的python脚本并在该应用程序内返回PASS和FAIL。任何帮助,将不胜感激。从Robot Framework调用Python

# -*- coding: utf-8 -*- 
import paramiko 
import time,sys 
from datetime import datetime 
from time import sleep 

prompt = "#" 

datetime = datetime.now() 

ssh_pre = paramiko.SSHClient() 
ssh_pre.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh_pre.connect("192.168.0.1",22, "admin", "admin") 
output="" 
ssh = ssh_pre.invoke_shell() 
sys.stdout=open("ssh_session_dump.txt","w") 

print("Script Start Date and Time: ", '%s/%s/%s' % (datetime.month, datetime.day, datetime.year), '%s:%s:%s' % (datetime.hour, datetime.minute, datetime.second)) 

model="XV4-17034" 

ssh.send("more off\n") 
if ssh.recv_ready(): 
    output = ssh.recv(1000) 
ssh.send("show system-info\n") 
sleep(5) 
output = ssh.recv(5000) 

output=output.decode('utf-8') 
lines=output.split("\n") 

for item in lines: 
    if "Model:" in item: 
     line=item.split() 
     if line[1]==model+',': 
      print("Test Case 1.1 - PASS - Model is an " + model) 
     else: 
      print("Test Case 1.1 - FAIL - Model is not an " + model) 

ssh.send("quit\n") 
ssh.close() 

datetime = datetime.now() 

print("") 
print("Script End Date and Time: ", '%s/%s/%s' % (datetime.month, datetime.day, datetime.year), '%s:%s:%s' % (datetime.hour, datetime.minute, datetime.second)) 
print("") 
sys.stdout.close() 
+0

寻找那些机器人框架专家:-) – pythonian

+0

你想编写一个测试直接调用这个代码(即:执行python the_script.py),或者你是否想要将此代码转换为关键字,以便您可以编写一个使用关键字的测试? –

+0

@BryanOakley - 将直接调用我的脚本的测试就足够了。谢谢。我在网上查看过样本,但无法很好地理解它是如何正确完成的。 – pythonian

回答

3

如果这是我的项目,我会将代码转换为函数,然后创建一个包含该函数的关键字库。

例如,您可以创建一个名为CustomLibrary.py像这样定义的函数文件:

def verify_model(model): 
    prompt = "#" 
    datetime = datetime.now() 
    ssh_pre = paramiko.SSHClient() 
    ... 
    for item in lines: 
     if "Model:" in item: 
      line=item.split() 
      if line[1]==model+',': 
       return True 
      else: 
       raise Exception("Model was %s, expected %s" % (line[1], model)) 
    ... 

然后,你可以创建一个机器人实验是这样的:

*** Settings *** 
Library CustomLibrary 

*** Test cases *** 
Verify model is Foo 
    verify model foo 

当然,这比这更复杂一点。例如,您可能需要更改函数中的逻辑以确保在返回之前关闭连接。总的来说,这是一般的方法:创建一个或多个函数,将它们作为库导入,然后从机器人测试中调用函数。

+0

我似乎理解你正在采取的方向。让我看看我能否实现它的工作。谢谢一堆。 – pythonian

+0

是啊......我不明白。我只需要一个上面代码的示例。如果有人可以帮忙。 – pythonian

+0

@pythonian:你没有得到什么?你不明白如何将你的代码转换为函数?还是你不明白如何将功能导入机器人测试? –

1

要从Robot Framework调用Python代码,您需要使用与Robot Framework库相同的语法,但一旦这样做,就非常简单。这里有一个例子,在一个名为CustomLibrary.py位于同一文件夹中的测试文件:

from robot.libraries.BuiltIn import BuiltIn 
# Do any other imports you want here. 

class CustomLibrary(object): 
    def __init__(self): 
     self.selenium_lib = BuiltIn().get_library_instance('ExtendedSelenium2Library') 
     # This is where you initialize any other global variables you might want to use in the code. 
     # I import BuiltIn and Extended Selenium2 Library to gain access to their keywords. 

    def run_my_code(self): 
     # Place the rest of your code here 

我在我的测试中使用这个有很多。为了调用它,你需要类似这样的东西:

*** Settings *** 
Library  ExtendedSelenium2Library 
Library  CustomLibrary 

*** Test Cases *** 
Test My Code 
    Run My Code 

这将运行您放置在Python文件中的任何代码。就我所知,Robot Framework并不直接实现Python,而是用Python编写的。因此,只要您以可识别的形式提供Python,它就会像运行BuiltIn或Selenium2Library的其他关键字一样运行它。

请注意,ExtendedSelenium2Library与Selenium2Library完全相同,只是它包含处理Angular网站的代码。相同的关键字,所以我只是用它作为一个严格的升级。如果您想使用旧的Selenium2Library,只需将“Selenium2Library”的文本“ExtendedSelenium2Library”的所有实例替换掉即可。

请注意,为了使用来自BuiltIn或ExtendedSelenium2Library的任何关键字,您将需要分别使用语法BuiltIn().the_keyword_name(arg1, arg2, *args)或​​。