百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

使用python测试c++动态链接库(python获取动态数据)

toyiye 2024-07-26 22:03 12 浏览 0 评论

以下内容来自公众号:诗泽园

目标:

c++动态链接库测试时,若使用c++语言编写测试程序,成本较高,是否能快速生成python调用接口呢,本文旨在介绍swig工具的使用,让你掌握接口的c++api接口的封装,便于上层测试。其他方法还有cffi、boost python等; 此外也可以利用 python 完成c++函数的单元测试。

步骤:

1、编写 接口文件data.i

%module(directors="1") datasolution
%{
   #include "ServerApi.h"
   #include "BusPackage.h"
   #include "OpenBusApiStru.h"
%}
%feature("director") CServerApiSpi;
%include "BusStruct.h"
%include "OpenBusApiStru.h"
%include "ServerApi.h"
%include "BusPackage.h"

2、调用swig 生成python跟c++wrapper

swig -threads -c++ -python "D:\Program Files\datasolution\data.i"

3、生成文件目录结构如下

datasolution.py
data_wrap.h
data_wrap.cxx

4、生成python接口文件如下

# This file was automatically generated by SWIG (http://www.swig.org).
# Version 3.0.10
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.
from sys import version_info as _swig_python_version_info
if _swig_python_version_info >= (2, 7, 0):
    def swig_import_helper():
        import importlib
        pkg = __name__.rpartition('.')[0]
        mname = '.'.join((pkg, '_datasolution')).lstrip('.')
        try:
            return importlib.import_module(mname)
        except ImportError:
            return importlib.import_module('_datasolution')
    _datasolution = swig_import_helper()
    del swig_import_helper
elif _swig_python_version_info >= (2, 6, 0):
    def swig_import_helper():
        from os.path import dirname
        import imp
        fp = None
        try:
            fp, pathname, description = imp.find_module('_datasolution', [dirname(__file__)])
        except ImportError:
            import _datasolution
            return _datasolution
        if fp is not None:
            try:
                _mod = imp.load_module('_datasolution', fp, pathname, description)
            finally:
                fp.close()
            return _mod
    _datasolution = swig_import_helper()

5、创建c++项目生成datasolution.dll 重命名为_datasolution.pyd 1.新建一个空的dll项目 2.导入头文件与cxx文件 3.项目引入python\include目录及链接器导入lib 在c++工程中添加现有项,将这些文件全部添加到工程中去。下面还要做几步:1.将你安装的python下include文件夹的路径添加至C++附加包含目录。我的路径是C:\Python27\include;,C++附加包含目录在工程-属性-配置属性-c/c++处。 2.将你安装的python中python27.lib添加至工程附加依赖项中。我的lib路径是C:\Python27\libs\python27.lib;,附加依赖项在工程-属性-配置属性-链接器-输入处。

这样全部完成之后,选择Release版本,我们按F7编译,在_datasolution\Release目录底下可见datasolution.dll动态库文件,说明编译成功,将其重命名为datasolution.pyd,这样_datasolution Python API就编译成功了。 6、编写测试程序

#coding:utf-8
import datasolution as dsapi
class CApiSpi(dsapi.CServerApiSpi):
    def OnRcvReq(self, nReqID, pCondition, nLength, nSeqNO):
            print  nReqID
            print pCondition
            print nLength
            print nSeqNO
csapi=dsapi.CServerApi()
errormsg=dsapi.ERROR_INFO()
csapi.Init(errormsg)
errormsg=dsapi.ERROR_INFO()
csapi.Connect("172.28.10.25", 2008, errormsg)
print errormsg.nErrID
print errormsg.strErrMsg
errormsg=dsapi.ERROR_INFO()
csapi.AddService(2689, errormsg)
print errormsg.nErrID
print errormsg.strErrMsg
errormsg=dsapi.ERROR_INFO()

loginReq=dsapi.CFFEX_IN_OUT_MONEY()
loginReq.ACCOUNTID='801000849'
loginReq.AMOUNT=0.05
loginReq.BROKERID='0125'
loginReq.CURRENCY='USD'
loginReq.SECONDSERIALNO='00000012222'

#loginReq['nEventHandle'] = 100000001
'''
{"BrokerID", STRING_TYPE_S},
{"AccountID", STRING_TYPE_S},
{"Currency", STRING_TYPE_S},
{"Amount", DOUBLE_TYPE_S},
{"AmountDirection", CHAR_TYPE_S},
{"SerialNo", STRING_TYPE_S},
{"Date", STRING_TYPE_S},
{"Time", STRING_TYPE_S}
'''
# reqid = reqid + 1                       # 请求数必须保持唯一性

print csapi.Request(5002,loginReq,1000, errormsg)
cpack=csapi.CreatePackage()

作者:lion (rywu),某科技公司测试专家

主页:https://testerhome.com/lion

以上内容来自公众号:诗泽园

相关推荐

「编程」Java GUI 基础(java编程语言基础)

图形化学习是外功,内功外功配合才能所向披靡。一、JFrameJAVASWING导入包importjavax.swing.*导入包importjava.awt.*JFrameframe=new...

这六个Java技术当年是多么风光,而现在又有几个人用过

嗨,雷猴啊,今天我给大家分享下我的开发历程中,我知道的那些被淘汰的技术或者框架。不知道你们都知道吗?也不知道你们都有没有用过,但是它们之前都是风靡一时,让我们再来了解一次吧。偷偷告诉大家有些我甚至都没...

开发第一个Swing程序(开发第一个java程序实验报告)

packagecom.web.www;importjavax.swing.*;/**第一个Swing程序*/publicclassSwing1extendsJFrame{publicSw...

Java课程设计项目实例《远程屏幕分享监视》第2部分

Java课程设计项目实例《远程屏幕分享监视》第2部分1、服务器端ScreenMonitoringServer程序类及相关的功能方法的编程实现(1)创建出服务器端的ScreenMonitoringSer...

新手学Java编程语言怎么入门?知识点都帮你整理好了

新手学Java编程语言怎么入门?下面和千锋广州小编一起来看看吧!掌握语言基础是第一步,了解Java基础知识,Java关键字、核心概念或者基本编码技术。掌握操作符、控制执行流程、访问权限控制、复用类、多...

Java Swing组件“HelloWorld”程序演示实例

Java源代码:/*首先导入Swing需要的包*/importjavax.swing.*;importjavax.swing.UIManager;importjava.awt.*;import...

新年Java小游戏之「年兽大作战」祝您笑口常开

这个游戏加上编写文章,上班摸鱼时间加上回家的空闲时间,大概花了三天多。java写这玩应真的很痛苦,各种状态位,各种图片和逻辑判断,脑袋都快炸了。而且肯定没有前端的精致,效果一般,偶尔会有卡顿,各位就图...

10分钟掌握 JMeter接口测试的基础入门

嘿。大家好,我是4U:...

JMeter 的简单安装说明(jmeter安装配置)

最近在做一组性能测试,接触到了JMeter这个测试工具,在这里记录一下JMeter的介绍以及简单安装过程。JMeter简介...

Jmeter压测实例分享——新手儿也能一学就会!

JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。它可以用于测试静态和动态资源,例如静态文件、Java...

过年必备Java动态烟花教程如何用Canvas和Timer实现炫酷烟花动画

烟花是一种常见的庆祝活动和节日的方式,它们在夜空中绽放出各种颜色和形状,给人们带来美丽和欢乐。你是否想过用Java编程来模拟烟花的效果呢?如果你对此感兴趣,那么这篇教程就是为你准备的。在这篇教程中,你...

全程软件测试(九十五):Jmeter技能基础—读书笔记

jmeter是一款优秀的开源性能测试工具,目前最新版本3.0版本,官网文档地址:http://jmeter.apache.org/usermanual/index.html一、优点...

原创 JAVA Swing JFrame窗口的建立

importjava.awt.*;importjavax.swing.*;publicclassExample1extendsJFrame{//定义一个类继承JFrame类public...

Java Swing组件下的JComboBox组件实例

运行成功的界面:java源代码:一定要注意:执行环境(JRE)javaSE-1.8/*首先导入JButtontest所需要的包*/importjavax.swing.*;importjavax.s...

Java引包的几种方法(java 引用)

第一种方法可以在Superclass这里输入javax.swing.JFrame进行引包也可以在类体外面输入importjavax.swing.JFrame;进行引包还可以点击JFrame然后点击I...

取消回复欢迎 发表评论:

请填写验证码