python怎么测试c代码_如何正确测试python中的C-API,C-API返回错误代码
我的设置
我正在使用Python中的pytest和ctypes测试C库中的函数。C库中的每个函数调用一个嵌入式linux PCI板上的函数,然后C库函数返回一个整数,该整数映射到一组返回代码。如果函数成功,则返回0,否则返回其他错误代码。在
问题
我正在寻找一些关于测试此设置的最佳方法的见解,基本上我正在尝试找出测试此库的最佳实践。抛出异常和断言测试用例的最佳方法。我使用的测试环境目前使用的是pytest,切换会很痛苦。在
为了测试所有不同的条件,需要设置很多状态来测试,因为嵌入式linux板有状态。因此理想情况下,python可以捕捉到测试中出现的所有错误(如果有错误)。在
我的当前设置
目前我已经有了包装C库代码的python函数。测试将调用python代码,如果函数没有返回0,则包装python函数将抛出异常。因为我使用ctypes来调用DLL上的函数,所以所有的C函数都被python包装起来,以便于调用,所以传递参数也更容易。在
优点如果在测试或任何中间测试的设置中出现问题,则将引发异常。当测试用例的设置失败时,这使得调试失败的测试用例变得更加容易。在
缺点断言一个函数是成功的(返回0)是无用的,因为在函数返回之前会抛出一个错误。在
如果测试在特定条件下调用函数会导致错误,则必须将测试用例包装得凌乱,try except块try:
return_code = call_to_c_api()
assert return_code == 0, "Message about test case"
except MyCustomException:
assert MyCustomException.message="Return code of python wrapped api"
另一个选择
不要用python库包装C库,如果其中一个安装函数不起作用,就要进行测试来断言失败。在
优点当您预期会发生故障时,很容易断言来自C API的返回值不是O
缺点为了使测试更易于调试,对C API的每一次调用都需要python测试中的代码来确保它通过。即使这只是一个测试设置的调用。这意味着每个测试的代码行数几乎是原来的两倍。(或者您无法捕获设置中的错误,只能在测试失败时断言。这意味着当测试用例的设置失败时调试会很痛苦)
如果有人能给我任何的最好的方法来测试这将是非常感谢!可能还有其他的方法来测试这个,我还没有考虑过!在
干杯!在
python怎么测试c代码_如何正确测试python中的C-API,C-API返回错误代码相关推荐
- python皮卡丘编程代码_再接再厉,用python编程13行代码解方程组(纯字符)
因为是示例为主,我们将方程组限制在二元一次方程组:x,y两个变量,两个方程.类似这样: 每个方程有两个变量,x和y,形式为:ax+by+c=d 由于这次有了两个方程,我们提取参数的代码就适合提炼为一个 ...
- python画六边形的代码_跟我学python(1)——turtle
嗨!大家好,欢迎大家跟我一起学习python,那首先我们需要先了解什么是编程?什么是python? python1-0 我们不套用百度或者其他官方的解答,就我的理解来说,编程是一门语言,就像英语可以让 ...
- python的简单程序代码_有那些用python修改python程序代码的简单方法?
python源代码是用C写的. 想改源库用python实现好像不太现实. 按你的要求,用C来extend的话很简单. ============下面是扩展库的代码=========== 用C来exten ...
- python简单小游戏代码_一个简单的python小游戏---七彩同心圆
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...
- python画动态爱心代码_教你用python画动态爱心表白
原标题:教你用python画动态爱心表白 初级画心 学Python,感觉你们的都好复杂,那我来个简单的,我是直接把心形看作是一个正方形+两个半圆: 于是这就很简单了,十行代码解决: import tu ...
- python判别性别的代码_学习文章—(Python实践)Python实现手机号自动判断男女性别...
作者:西西里传说 来源:CSDN博客 链接:https://blog.csdn.net/qq_15687823/article/details/103645268 如果你觉得有用欢迎关注我吧 本文性别 ...
- python图形界面设计代码_(八)Python 图形化界面设计
3.1.文本输入和输出相关控件:文本的输入与输出控件通常包括:标签(Label).消息(Message).输入框(Entry).文本框(Text).他们除了前述共同属性外,都具有一些特征属性和功能. ...
- python猜拳游戏编程代码_求助,用python编写一个猜拳游戏程序,要求有这样的开头...
展开全部 #coding=utf8 import random changes = ["", "石头2113", "剪子", "布 ...
- python年份天干地支代码_好用的Python第三方日历库:sxtwl(可算天干地支)
import sxtwl lunar = sxtwl.Lunar() Gan = ["甲", "乙", "丙", "丁" ...
最新文章
- 生产环境一次诡异的NPE问题,反转了4次
- C++ 多线程编程总结
- Zookeeper与Paxos
- 持续集成部署Jenkins工作笔记0008---创建用于测试的Maven工程
- Python Tricks(二十一)—— 排列组合的计算
- atitit.html编辑器的设计要点与框架选型 attilax总结
- c语言图形时钟编程,c语言程序+图形编程——打造简易的时钟
- 梦网云科技的短信接口怎么样,真实体验
- aspose-cad dwg转pdf dwg转png dwg转svg
- 拖放drag、drog
- 三维几何图形创作方法(Geometry3D)之三
- sis 最新_传统SIS系统面临考验——“可持续的安全仪表系统”来袭
- 多CPU和多核CPU对应多进程和多线程调度
- ICLR 2022:​PiCO,基于对比消歧的偏标签学习 丨AI Drive
- unity aces_评论:UiPath Aces机器人流程自动化
- x86 版的 Arduino Intel Galileo 开发板的体验、分析和应用
- 下载GHOST重新安装系统,四个硬盘分区变成一个,如何恢复其他硬盘中的资料
- 汉枫wifi--HF-LPB120模块驱动
- 数字图像处理——皮肤美白(Skin whitening)算法实现
- 电力缴费系统-台区同期线损管理系统_系统结构图_ER图_数据字典
热门文章
- 垃圾回收策略和算法,看这篇就够了
- 【IPF2020】浪潮集团副总裁、渠道管理部总经理王峰:赋能智慧生态 筑基新基建
- 漫话:如何给女朋友解释鸿蒙OS是怎样实现跨平台的?
- AWS CEO Andy Jassy 专访:我们一直思考的是未来 2-5 年的事 | 人物志
- 稳居亚太第一,阿里云进军全球;李彦宏候选工程院院士;苹果巨大损失:工业设计核心元老纷纷离职……...
- 要闻君说:特斯拉重磅推出影响力报告;三星官宣完成5纳米EUV工艺研发还承诺提供样品;国内首条5G智能制造生产线正式“上马”...
- 都道业务提升坑大事儿多,但英特尔云方案却说“简单”
- linux 拖动图标有拖影_想要实现元素拖动效果,但是一拖动出现禁止的图标
- geth 转账_eth客户端安装 geth使用 批量转账(一)
- ES启动异常:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]