0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

代码的黑盒测试(下)| 库接口测试Library Interface Testing

北汇信息POLELINK 2022-08-04 14:37 次阅读

书接上回:代码的黑盒测试(上)|目标文件测试Object File Testing,我们首先介绍了编译的基本过程——预处理(Prepressing)、编译(compile)、汇编(Assembly)和链接(Linking),然后着重介绍了代码黑盒测试的第一种方法——VectorCAST/C++的目标文件的测试方法,解决了在无可用源代码的情况下,对其相应目标文件的测试。

其实一个代码工程除了开发人员手写代码外,还包含了很多库文件,甚至有的库文件或是经过开发人员修改或是直接由开发人员编写的。那么对于这些文件又该如何测试呢?请看如下分解!

一、库接口测试

(一)库文件

这里的“库”,就是库文件,一般是指编译好的二进制文件,用于在链接阶段与目标文件一起生成可执行文件,或者运行可执行文件的时候被加载,以便调用库文件中的某段代码。

与可执行文件不同的是,库文件无法直接执行。直观上来看,库文件的源代码中没有main函数,而只是一些函数模块的定义和实现,没有运行的入口主函数,无法直接执行。

(二)静态库与动态库

库文件可分为静态库和动态库。它们区别主要体现在程序的链接阶段——静态库的代码是在编译过程中被载入程序中的,这就说明,只要程序编译完成,程序就不受静态库的影响;动态库的代码在编译的时候并没有被编译进入程序中,只是在程序运行时根据程序需要动态的加载到内存中。

(三)相关文件的一些扩展名

  1. win32平台下,静态库通常后缀为.lib,动态库为.dll。
  2. Linux平台下,静态库通常后缀为.a,动态库为.so。

从本质上来说,由同一段程序编译出来的静态库和动态库,在功能上是没有区别的;不同之处仅仅在于其名字上,也就是“静态”和“动态”。开发人员只需要将.h/.hpp头文件和.lib/.so文件提交给其他开发人员,他们就可以直接使用.lib/.so文件中定义的函数了。静态库和动态库的具体使用由开发人员决定。

(四)库接口测试

库接口测试允许客户在没有可用源代码的情况下,对现有库文件创建测试。在测试时,可以将第三方库或者被修改的第三方库作为一个对象库文件和API定义(头文件)。可以为API创建测试用例,来验证应用程序库函数的正确性,而无需访问源代码。

在代码开发中,通常会将一些常用的函数封装成一个库,提供接口给其它程序文件调用,省去重复写该函数接口。当使用该函数时,只需要直接将所需要的文件链接到程序中即可,大大提高了开发效率。依照这个原理,我们也可以针对一些代码程序根据测试需要,将某些源代码编译生成相应的静态库文件或动态库文件,以完成代码功能测试。

二、利用VectorCAST/C++进行库接口测试

对于如何使用VectorCAST/C++进行静态库或者动态库的单元测试,下面我们仍使用上篇文章中的点餐服务程序(采用GCC编译链),来具体说明。

(一)点餐服务程序的结构内容及说明

poYBAGLrOgiASp3RAAB36SL_x2w424.png

poYBAGLrOhCAF5n2AACE58UQyqM954.png

图 1点餐服务程序的结构内容及说明

(二)利用VectorCAST/C++进行静态库接口测试

1、静态库文件的生成

对于这个点餐主程序manager_driver.c,我们可以将manager.c和database.c分别作为一个调用的库文件来使用,也可以一起作为一个调用的库文件来使用。本例中,将manager.c和database.c一起作为一个调用的库文件来使用。

使用一个BAT脚本生成静态库文件,脚本内容如下:

set path=%VECTORCAST_DIR%\mingw\bin;%PATH%

gcc -c manager.c

gcc -c database.c

ar rcs manager_driver.lib manager.o database.o

说明:无论静态库,还是动态库,都是在*.o目标文件基础上生成的。

2、环境构建基本过程

VectorCAST环境构建的基本过程在代码的黑盒测试(上)|目标文件测试Object File Testing有详细说明,这里不再赘述,对于不同的以及需要注意的地方,有如下说明:

本例中,我们是利用manager.c和database.c一起生成静态库文件manager_driver.lib的,所以在构建测试环境的第3步需要选择“库接口测试方法”并在“Link Options”添加该文件及所在路径,如图2所示。同时在构建测试环境的第6步添加需要的头文件,有manager.h和database.h,如图3所示。

pYYBAGLrOi-AB43LAAGSTnfVKnk986.png

图2选择添加静态库文件manager_driver.lib

poYBAGLrOjWAdYEGAADByjzH0Gc062.png

图3选择添加头文件manager.h或database.h

3、测试用例编写与执行

按照上述说明成功构建测试环境。编写测试用例及执行测试用例,结果如下图4所示。

poYBAGLrOlSAEjWuAABhkE54dEQ448.png

pYYBAGLrOl2AQHHJAAEKsv_XNSM597.png

图4测试用例编写与执行

细心的小伙伴可以注意到上图左边部分只有显示了执行状态图标,因为我们采用的该种测试属于黑盒测试方法,所以我们在构建环境的第4步,没有勾选“Whitebox”前面的复选框,自然也没有结构覆盖度图标。

(三)利用VectorCAST/C++进行动态库接口测试

1、动态库文件的生成

与静态库文件生成类似,将manager.c和database.c一起作为一个调用的动态库文件来使用。

使用一个BAT脚本生成动态库文件,脚本内容如下:

set path=%VECTORCAST_DIR%\mingw\bin;%PATH%

gcc -c -fPIC manager.c -o manager_dyn.o

gcc -c -fPIC database.c -o database_dyn.o

gcc manager_dyn.o database_dyn.o -shared -o libmanager_drive.dll

2、环境构建基本过程

动态库接口测试与静态库接口测试基本一致,不同的地方如下说明:

此例中,我们仍利用manager.c和database.c一起生成动态库文件manager_driver.dll,所以在构建测试环境的第3步选择“库接口测试方法”并在“Link Options”添加该动态库dll文件,如图5所示。后面的操作与静态库接口测试一致,故不在赘述。

poYBAGLrOoWAQ7btAAEuGA59J2E457.png

图5选择添加动态库文件manager_driver.dll

三、总结

本文提供了代码黑盒测试的第二种方法——库接口测试,可以利用工具为API创建测试用例,来验证应用程序库函数的正确性,而无需访问源代码,感兴趣的同学可以尝试下。

VectorCAST/C++作为Vector公司的代码动态测试工具,支持自动生成测试用例,提供完善的覆盖度信息,还可以与Git/SVN/Jekins等工具集成等等;后续也会为大家带来更多基于VectorCAST/C++的动态测试相关内容;同时也欢迎垂询和沟通,共同探讨测试相关问题。

北汇信息作为Vector中国的合作伙伴,始终专注于汽车电子领域的新技术和新产品,为整车厂和零部件企业提供完整的研发、测试解决方案,为工程师在汽车领域提供“趁手装备“!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 测试
    +关注

    关注

    8

    文章

    5149

    浏览量

    126439
收藏 人收藏

    评论

    相关推荐

    什么是回归测试_回归测试测试策略

      1、什么是回归测试 回归测试(Regression testing) 指在发生修改之后重新测试先前的测试以保证修改的正确性。理论上,软件
    的头像 发表于 11-14 16:44 107次阅读

    端到端测试用例怎么写

    编写端到端测试用例是确保软件系统从头到尾能够正常工作的关键步骤。以下是一个详细的指南,介绍如何编写端到端测试用例: 一、理解端到端测试 端到端测试(End-to-End
    的头像 发表于 09-20 10:29 331次阅读

    接口测试怎么测多个服务器连接

    接口测试是软件开发过程中的一个重要环节,用于验证系统组件之间的交互是否符合预期。在多服务器环境中,接口测试的复杂性会增加,因为需要考虑服务器之间的连接和通信。本文将详细介绍如何在多服务
    的头像 发表于 05-30 15:16 369次阅读

    接口测试测试什么内容

    接口测试的定义、重要性、测试策略、测试方法、测试工具以及最佳实践。 一、接口
    的头像 发表于 05-30 15:11 1143次阅读

    接口测试的概念和重点是什么?

    是确保这些交互按照设计和规范进行,从而保证整个系统的稳定性和可靠性。 接口测试主要关注以下几个方面: 功能性:验证接口是否能够按照预期执行其功能,包括输入、处理和输出。 性能:评估接口
    的头像 发表于 05-30 15:08 630次阅读

    接口测试的工具有哪些种类

    接口测试是软件测试的一个重要环节,主要用于验证系统各模块之间的交互是否符合预期。随着软件行业的快速发展,接口测试工具也不断涌现,为
    的头像 发表于 05-30 15:07 616次阅读

    接口测试测试点有哪些类型

    接口测试是软件测试的一个重要组成部分,主要用于验证系统各模块之间的接口是否按照预期工作。接口测试
    的头像 发表于 05-30 15:04 1725次阅读

    接口测试的主要目的是什么

    接口测试的主要目的是什么? 在软件开发过程中,接口测试是一种重要的测试方法,用于验证不同模块、系统或服务之间的交互是否符合预期。本文将详细探
    的头像 发表于 05-30 15:02 988次阅读

    接口测试的流程和步骤有哪些

    接口测试是软件测试的一个重要组成部分,主要用于验证系统各模块之间的交互是否符合预期。 一、接口测试概述
    的头像 发表于 05-30 14:59 2639次阅读

    接口测试属于功能测试吗为什么

    接口测试和功能测试是软件测试中的两种不同类型,它们之间有一定的联系,但也存在明显的区别。本文将详细讨论接口
    的头像 发表于 05-30 14:57 416次阅读

    功能测试覆盖中最常见的是什么方法

    常见的方法,包括黑盒测试、白盒测试、灰盒测试、等价类划分、边界值分析、错误推测法、因果图法、状态迁移测试、场景法、决策表
    的头像 发表于 05-30 14:55 579次阅读

    功能测试是白盒还是黑盒测试

    功能测试是软件测试的一种方法,主要用于验证软件的功能是否满足需求规格说明书中的要求。功能测试可以采用白盒测试黑盒
    的头像 发表于 05-30 14:53 724次阅读

    功能测试接口测试的区别

    功能测试接口测试是软件测试的两个重要方面,它们在确保软件质量和性能方面发挥着关键作用。本文将详细介绍功能测试
    的头像 发表于 05-29 16:02 835次阅读

    什么是接口测试?如何开展接口测试

    接口其实就是前端页面或APP等调用与后端做交互用的,有朋友会问,我的功能测试都测好了,为什么还要测接口呢?
    发表于 03-14 14:15 500次阅读
    什么是<b class='flag-5'>接口</b><b class='flag-5'>测试</b>?如何开展<b class='flag-5'>接口</b><b class='flag-5'>测试</b>

    IZYTRONIQ测试软件介绍——管理测试设备数据

    一款完整的用于管理和记录测试过程的数据软件IZYTRONIQ
    的头像 发表于 01-11 11:11 380次阅读
    IZYTRONIQ<b class='flag-5'>测试</b>软件介绍——管理<b class='flag-5'>测试</b>设备数据<b class='flag-5'>库</b>