我的设置

我正在使用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返回错误代码相关推荐

  1. python皮卡丘编程代码_再接再厉,用python编程13行代码解方程组(纯字符)

    因为是示例为主,我们将方程组限制在二元一次方程组:x,y两个变量,两个方程.类似这样: 每个方程有两个变量,x和y,形式为:ax+by+c=d 由于这次有了两个方程,我们提取参数的代码就适合提炼为一个 ...

  2. python画六边形的代码_跟我学python(1)——turtle

    嗨!大家好,欢迎大家跟我一起学习python,那首先我们需要先了解什么是编程?什么是python? python1-0 我们不套用百度或者其他官方的解答,就我的理解来说,编程是一门语言,就像英语可以让 ...

  3. python的简单程序代码_有那些用python修改python程序代码的简单方法?

    python源代码是用C写的. 想改源库用python实现好像不太现实. 按你的要求,用C来extend的话很简单. ============下面是扩展库的代码=========== 用C来exten ...

  4. python简单小游戏代码_一个简单的python小游戏---七彩同心圆

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...

  5. python画动态爱心代码_教你用python画动态爱心表白

    原标题:教你用python画动态爱心表白 初级画心 学Python,感觉你们的都好复杂,那我来个简单的,我是直接把心形看作是一个正方形+两个半圆: 于是这就很简单了,十行代码解决: import tu ...

  6. python判别性别的代码_学习文章—(Python实践)Python实现手机号自动判断男女性别...

    作者:西西里传说 来源:CSDN博客 链接:https://blog.csdn.net/qq_15687823/article/details/103645268 如果你觉得有用欢迎关注我吧 本文性别 ...

  7. python图形界面设计代码_(八)Python 图形化界面设计

    3.1.文本输入和输出相关控件:文本的输入与输出控件通常包括:标签(Label).消息(Message).输入框(Entry).文本框(Text).他们除了前述共同属性外,都具有一些特征属性和功能. ...

  8. python猜拳游戏编程代码_求助,用python编写一个猜拳游戏程序,要求有这样的开头...

    展开全部 #coding=utf8 import random changes = ["", "石头2113", "剪子", "布 ...

  9. python年份天干地支代码_好用的Python第三方日历库:sxtwl(可算天干地支)

    import sxtwl lunar = sxtwl.Lunar() Gan = ["甲", "乙", "丙", "丁" ...

最新文章

  1. 生产环境一次诡异的NPE问题,反转了4次
  2. C++ 多线程编程总结
  3. Zookeeper与Paxos
  4. 持续集成部署Jenkins工作笔记0008---创建用于测试的Maven工程
  5. Python Tricks(二十一)—— 排列组合的计算
  6. atitit.html编辑器的设计要点与框架选型 attilax总结
  7. c语言图形时钟编程,c语言程序+图形编程——打造简易的时钟
  8. 梦网云科技的短信接口怎么样,真实体验
  9. aspose-cad dwg转pdf dwg转png dwg转svg
  10. 拖放drag、drog
  11. 三维几何图形创作方法(Geometry3D)之三
  12. sis 最新_传统SIS系统面临考验——“可持续的安全仪表系统”来袭
  13. 多CPU和多核CPU对应多进程和多线程调度
  14. ICLR 2022:​PiCO,基于对比消歧的偏标签学习 丨AI Drive
  15. unity aces_评论:UiPath Aces机器人流程自动化
  16. x86 版的 Arduino Intel Galileo 开发板的体验、分析和应用
  17. 下载GHOST重新安装系统,四个硬盘分区变成一个,如何恢复其他硬盘中的资料
  18. 汉枫wifi--HF-LPB120模块驱动
  19. 数字图像处理——皮肤美白(Skin whitening)算法实现
  20. 电力缴费系统-台区同期线损管理系统_系统结构图_ER图_数据字典

热门文章

  1. 垃圾回收策略和算法,看这篇就够了
  2. 【IPF2020】浪潮集团副总裁、渠道管理部总经理王峰:赋能智慧生态 筑基新基建
  3. 漫话:如何给女朋友解释鸿蒙OS是怎样实现跨平台的?
  4. AWS CEO Andy Jassy 专访:我们一直思考的是未来 2-5 年的事 | 人物志
  5. 稳居亚太第一,阿里云进军全球;李彦宏候选工程院院士;苹果巨大损失:工业设计核心元老纷纷离职……...
  6. 要闻君说:特斯拉重磅推出影响力报告;三星官宣完成5纳米EUV工艺研发还承诺提供样品;国内首条5G智能制造生产线正式“上马”...
  7. 都道业务提升坑大事儿多,但英特尔云方案却说“简单”
  8. linux 拖动图标有拖影_想要实现元素拖动效果,但是一拖动出现禁止的图标
  9. geth 转账_eth客户端安装 geth使用 批量转账(一)
  10. ES启动异常:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]