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测试中的代码来确保它通过。即使这只是一个测试设置的调用。这意味着每个测试的代码行数几乎是原来的两倍。(或者您无法捕获设置中的错误,只能在测试失败时断言。这意味着当测试用例的设置失败时调试会很痛苦)

如果有人能给我任何的最好的方法来测试这将是非常感谢!可能还有其他的方法来测试这个,我还没有考虑过!在

干杯!在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机考试设计会议邀请函,计算机二级常见考点之使用合并技术制作邀请函

计算机01:37来自LearningYard学苑三月份的计算机二级考试即将到来,不知道各位童鞋准备得怎么样了呢,把握了多少。今天小编就给讲讲计算机二级MS office中常见的考核内容——使用合并技术制作邀请函。The computer second-level exam in March is coming …

添加一列_办公软件操作技巧023:如何给excel数据批量添加单位

在日常工作中,我们使用excel编辑电子表格时,经常需要给数据添加单位,单位是编制excel表格常用的元素,有时我们需要给一列数字都添加上单位,比如长度多少米,金额多少元,货物多少公斤等等&#xf…

html代码大全(很全的)_HTML教学(1):写一个属于自己的网址大全(新手版)

超文本标记语言(Hyper Text Markup Language),缩写为HTML,标准通用标记语言下的一个应用。HTML不是一种编程语言,而是一种标记语言 (markup language)只要你打开浏览器,第一眼看到的…

清华大学计算机系高考生源,清华大学在这个高考大省录取人数创新高,网友:仍然是同分不同命...

在众多高考学子眼中,只有“两个学校”,一个是“清华、北大”,一个是“其他学校”,不仅是高考学子,清华、北大在众多人心目中也是十分神圣的。很多学生家长把考上清华、北大作为子女的唯一追求,认为只有考上…

list的contains方法为什么不好使_道理都懂,为什么我们还打不好网球?

中年人的悲哀在于,懂得很多道理,可依然过不好自己的一生。打网球亦是如此。——题记人到中年,有了一定的社会经验,也懂得了很多道理,可大部分人还是过不好自己的生活。正如打网球一样。盯准球、早点打、降低重心、保持…

docker公共存储库_Docker Hub公共镜像仓库的使用

Docker Hub目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 15,000 的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。Docker Hub的功能Docker Hub被用于源代码管理集成,也用于构建和测试工具来加速部署周期&am…

html5登录界面源代码_最新版本尤娜博客已更新源代码(速拿!!!)

大家好,我是尤娜博客(una-boot)的作者树下魅狐,自2019年9月una-boot-1.0.0版本开源以来,陆续有热爱技术,钟爱技术写作的小伙伴为尤娜提出了宝贵的改进意见和建议,在此表示衷心的感谢,谢谢大家的支持&#x…

抓包红色_抓包三部曲 WebSocket 协议原理抓包分析

这篇文章通过抓包分析 WebSocket 协议的细节,学习一下 WebSocket 执行流程。1.WebSocket 流程说明(1)客户端和服务器之间完成三次握手建立 TCP 连接(TLS/SSL)握手。(2)客户端发起 HTTP 请求和服务器之间建立 WebSocket 握手。(3)WebSocket 连接建立之后,…

计算机农业sci,IEEE旗下JCR1区智慧农业类SCIEI期刊

原标题:IEEE旗下JCR1区智慧农业类SCI&EI期刊各位学者,EA-ISET 协会(www.ea-iset.org)重点期刊推荐,IEEE旗下JCR1区智慧农业类SCI&EI期刊 ,版面有限,录满即止,具体信息如下:一、期刊信息JCR1区智慧农…

python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数

题目前提是一定存在这样两个数 解法一就不写了...一般想不到吧 一开始想到的是解法二最后的用hash表 (其实是想到创建一个跟target一样大的数组啦..存在就写入index,但是要全部找出,那得二维数组,但是后面想到target要是很大的话&…

3d打印主要的切片参数类型_3D打印机切片参数详情说明

在使用3D打印机的过程中,切片是一个我们无法避免要操作的步骤,接下来我们将简单介绍一下切片的相关参数。底部类型设置模型打印第一层的类型,以适应不同打印需求Skirt模型底部不与模型接触,确保挤出正常SkirtBrim与模型底部接触&a…

西南科技大学研究生计算机,我们毕业啦……西南科技大学2020研究生毕业记!...

“各位旅客,列车前方到站是终点站,毕业。要下车的乘客,请带好您的行李和贵重物品,准备下车。”每当毕业季来临时,时间的流逝似乎开了倍速,掠过青春的云海,不因剧情的精彩而暂停。近日&#xff0…

决策树和随机森林算法 简介

决策树(Decision Tree) 是一种基础的分类和回归算法随机森林 是由多棵决策树集成在一起的集成学习算法 决策树生成过程: 特征选择决策树生成决策树剪枝 信息熵 用来衡量一个节点内信息的不确定性的。 信息熵越大, 不确定性越大, 样本就越多样, 样本…

java 抽象类_什么是final?Java抽象类又是什么?抽象类能使用 final 修饰吗?

第十三题讲解人:张小龙 8.23邮箱:2304940425qq.com一.什么是final?final是java中的一个关键字,可以用来修饰变量、方法和类。用关键词final修饰的域成为最终域。用关键词final修饰的变量一旦赋值,就不能改变&…

mysql范式与反范式_MySQL 三种范式以及反范式 | 剑花烟雨江南

第一范式确保数据表中每列(字段)的原子性,即每个字段都是最小单位,不可拆分。如:用户表(user)中的 user_name,password,nick_name。第二范式在第一范式的基础上,保证表中的每列都与主键相关。如果一个关系满…

查找微信公众号服务器地址,手把手教大家搭建微信公众号查题功能

最近比较主流的公众号输入查题功能比较火爆,现在手把手教大家搭建自己的公众号查题。如下图:准备:备案域名、服务器、公众号域名备案、服务器申请、公众号申请在这里就不单独介绍了。1、配置PHP文件把两个php代码上传服务器。更改api.php接口…

python更新excel内容_使用python将Excel表中的数据更新到数据库中

代码如下: # -*- coding: utf-8 -*- import pymysql import xlrd # 连接数据库 try: db pymysql.connect(host"127.0.0.1", user"root", passwd"root", db" test", charsetutf8) except: print("could not connect t…

mysql 中文字符排序规则_mysql中字符集和排序规则说明

数据库需要适应各种语言和字符就需要支持不同的字符集(Character Set),每种字符集也有各自的排序规则(Collation)。一.字符集字符集,即用于定义字符在数据库中的编码的集合。 常见的字符集:utf-8 gbk 等。二.排序规则数据库中的排序规则用来定…

sql server服务器位置,SQL语句实现查询SQL Server服务器名称和IP地址

获取服务器名称:SELECT SERVERPROPERTY(MachineName)select SERVERNAMEselect HOST_NAME()获取IP地址可以使用xp_cmdshell执行ipconfig命令:--开启xp_cmdshellexec sp_configureshow advanced options, 1reconfigure with overrideexec sp_configurexp_c…

如何卸载MySQL8.0.11_win10安装mysql8.0.11卸载5.7

卸载5.7的安装方式是免安装版本的,需要卸载。1、停止服务以管理员身份启动cmd命令窗口net stop mysql或是任务管理器找到mysql服务停止。2、删除sc delete mysql3、windowsR 开始运行里面输入regedit,打开注册表,有MySQL文件夹的对MySQL文件删除HKEY_LOCAL_MACHINE/…