如何在Robot框架中集成C ++ API?

时间:2017-11-22 04:48:36

标签: c++ c robotframework

我为我的项目开发了C ++ API。还从这里创建了一个linux .so共享库。我需要使用机器人框架关键字来调用这些API。

提前致谢。

1 个答案:

答案 0 :(得分:0)

可以使用python库 ctypes 轻松调用C ++ API。您可能已经知道python库可以集成到机器人框架中。

假设你必须使用机器人框架调用SendMesg C ++ API。 请按照以下步骤操作:

<强> 1。创建C ++ API库.so文件

connect.cpp

extern“C” {

int Initialize(char* ip, int port)
{
    //creates socket connection with remote host
}

int SendMesg(char* msg)
{
    //Send mesg code
}

}

g ++ -std = c ++ 11 -fpic -c connect.cpp

g ++ -std = c ++ 11 -shared -g -o connect.so connect.o

现在,您已在与cpp文件相同的路径中创建了connect.so共享库。

<强> 2。为C ++ API创建python包装器

connectWrapper.py

导入ctypes

class connectWrapper:

def __init__(self, ip , port):
    self.Lib = ctypes.cdll.LoadLibrary('absolute path to connect.so')
    self.Lib.Initialize.argtypes = [ctypes.c_char_p, ctypes.c_int]
    self.Lib.Initialize(ip, port)

def SendMessageWrapper(self, msg):
    self.Lib.SendMesg.argtypes = [ctypes.c_char_p]
    print self.Lib.SendMesg(msg)

创建python包装器API时要记住的4件事。

a)python文件名与类名

相同

b)使用ctypes调用API时,应始终指定输入参数类型。否则,使用此python库运行robot文件时可能会出现以下错误:

  

NotImplementedError:尚不支持可变参数函数;指定一个     参数列表

在这种情况下,我们为字符串类型指定了参数ctypes.c_char_p,为整数指定了ctypes.c_int。有关更多信息,请使用以下:

[http://python.net/crew/theller/ctypes/tutorial.html#specifying-the-required-argument-types-function-prototypes][1]

c)connect.so的绝对路径在ctypes.cdll.LoadLibrary API中给出。

d)使用chmod + x connectWrapper.py

将python文件设置为可执行文件

第3。将python库添加到机器人文件

test.robot.txt

** *设置* **

库“absoulte path to connectWrapper.py”10.250.0.1 8080

** *测试用例* **

发送消息

     SendMessageWrapper "Hello World"

正如您可能已经注意到的那样,在设置部分添加了python库,其参数作为IP和端口传递。我们在测试用例部分添加了SendMessage关键字,并将字符串消息“Hello World”作为输入参数。

我希望在运行命令之后:

机器人test.robot.txt

一切正常:)