• DLL接口自动化测试总结


    1. DLL接口测试方法介绍

    在最近测试的项目中,系统给业务端提供DLL文件,业务端通过DLL文件中的C++接口实现系统功能,这就需要对DLL中的C++接口进行详细功能测试。 本文主要介绍项目测试中使用的DLL接口测试方法及基于AutoIT实现的DLL接口自动化测试方法。

     1.1 VS2005

    通过VS2005可以直接加载DLL文件中的C++接口,模拟业务端调用,传递一些参数值从而验证接口返回码等功能是否正确接口。这部分代码,类似与白盒测试中编写的驱动模块,需要有一定的C++编程基础。 项目初期就是请开发人员按照这种方法编写demo进行测试的,功能相对比较简单,可以正常完成接口的功能测试,但同时存在测试执行相对复杂、效率不高的问题(下图)。

    1.2 Loadrunner

    中间也调研了Loadrunner加载DLL文件C++接口的方法,如下:

    • 新建Loadrunner脚本,协议选择C Vuser 
    • 定义接口中的参数,并进行赋值
    • 使用lr_load_dll函数加载DLL 
    • 根据接口文档中的函数说明,即可正常调用DLL接口

    • 将接口输入参数进行参数化,可以批量调用接口进行测试

    • 定义一个参数保存预期的结果,调用接口得到接口返回值与其比较,判断成功与失败。如下图定义的预期结果参数IDExRes与IDRes比较:

    • 定义循环的次数,可一次执行多次测试,实现自动化测试,通过日志即可查看测试结果

    1.3 AutoIT

    AutoIT调用DLL接口方法基本与Loadrunner相似:

    • 首先使用DllOpen函数,加载DLL 
    • 之后定义接口中的参数,并进行赋值
    • 然后使用DllCall函数,调用DLL中的接口
    • 最后通过DllClose关闭已打开的DLL文件

    2. AutoIT DLL接口自动化测试方案

    使用AutoIT,通过操作Excel用例,读取表格中的参数输入值和期望结果,通过与调用接口得到返回码进行比较,可以完成DLL接口自动化测试。

    2.1 基本逻辑

    2.2 配置文件设计

    config.ini配置文件,主要配置了版本号、接口名称、参数个数及类型等信息,示例文件如下:

    [Version]
    Version=Build#1032
    [DFSInitDll]
    DFSInitDll =5
    defName=const char*
    nodeIP=const char*
    nodePort=int
    nodeName=const char*
    nodePwd=const char*

    2.3 测试用例设计

    测试用例表格是根据平台测试组通用的测试用例模版修改而来,主要是增加了详细的输入参数列,工具执行时根据读取这些数据作为接口的输入参数。

    2.4 代码设计

    AuotIT脚本简单来说,可以说是一个个函数堆起来的。本脚本里使用了一些自定义函数,如下:

    代码编写整体逻辑与设计一致,即首先从配置文件获取相关配置,读取Excel获取输入数据,调用DLL接口,保存结果至Excel中。

    2.5 存在的不足

    使用AutoIT编写接口自动化脚本过程中发现仍然存在一些局限及不足之处:

    • 对于异常或存在一定的逻辑关系的用例,很难开发做到可以统一处理,所以工具对于接口用例暂时无法做到100%覆盖
    • AutoIT打开非文本文件读取内容后,调用接口传输的16进制数据转化成了文本,上传后文件内容不正确(暂时只能实现txt文本文件的上传)

    3. 总结

    使用了三种方法测试DLL接口,对比总结如下:

    • 使用VS 2005直接测试接口,适合在时间比较紧的情况下进行使用。该方法建议由开发人员编写相应的驱动代码,测试人员进行执行。测试使用易用性及效率一般
    • 使用Loadrunner,测试人员可以快速便捷的根据接口设计文档,调用相关接口(类似WebService接口测试工具Webservice Studio),在对相应的参数进行参数化后可以进行"半自动化测试",节省不少时间
    • 使用AutoIT编写自动化测试工具,功能比较完善,可以进行完整的自动化测试。但工具编写相对繁琐与耗时,实际对测试工作效率提升有限
  • 相关阅读:
    教你一步一步做无线点餐项目(登录篇)
    用Android中的ActionBar来实现分页Title栏滑块效果
    IIS处理brower的一个页面请求(www.test.com/SX?a=1)的处理流程
    [转载]物化视图——数据仓库手册
    [WEB系统中的设计模式(暂时放在这里,看不大懂)]mvc在web系统中的模式与应用
    ORACLE的分布式管理
    C#中 中 A==B && C==D ? E: F语法的一点问题
    delete 和 truncate
    prototype.js开发者手册
    【一个不错的oracle数据库诊断例子,值得学习一下】Oracle数据库诊断案例redo log日志组处于高激活状态
  • 原文地址:https://www.cnblogs.com/shengs/p/3790058.html
Copyright © 2020-2023  润新知