您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
VC2010+TFS2010结合Boost.Test库进行自动化测试
 
作者:sunrise918的博客 来源:CSDN 发布于: 2014-12-30
   次浏览      
 

最近做了一个实验,结合 VC2010 + TFS2010 + Boost.Test 建立自动化构建和自动化测试。实验成功实现了目标。下面简述一下整个过程。
前提是已经建立了 TFS2010 构建系统,VC2010 已经设置好引入 Boost 库的配置。

首先,需要建立测试的目标模块(TDDSample.Library)、 C++ 测试项目(TDDSample.Test)和用 Boost.Test 库构建的测试程序(TDDSample):

1、新建项目,项目名称:TDDSample,解决方案名称:TDDSample,选择“Visual C++”下的“Win32”下的"Win32 控制台应用程序",其他默认即可。如下图:

2、在解决方案 TDDSample 下新建项目,项目名称:TDDSample.Library,选择“Visual C++”下的“Win32”下的"Win32 项目",选择“静态库”,其他默认即可。如下图:

3、在解决方案 TDDSample 下新建项目,项目名称:TDDSample.Test,选择“Visual C++”下的“测试”下的"测试项目",其他默认即可。

4、把项目 TDDSample.Test 下的文件 UnitTest1.cpp 重命名为 TargetTest.cpp,类 UnitTest1 重命名为 TargetTest 。如下图:

5、设置项目依赖项如下:TDDSample.Test 依赖 TDDSample 和 TDDSample.Library,TDDSample 依赖 TDDSample.Library。如下图:

6、编译成功并签入 TFS2010 中。

然后,建立测试目标代码:

1、在项目 TDDSample.Library 下新建类,类名:Target,选择“Visual C++”下的“C++”下的"C++ 类",选择“内联”,其他默认即可。如下图:

2、在文件 Target.h 中,把代码改为如下:

#pragma once  
#ifndef _TARGET_H_  
#define _TARGET_H_  
  
namespace Sunrise { namespace TDDSample { namespace Library  
{  
  
template  
T Add(T const& a, T const& b)  
{  
    return a + b;  
}  
  
template  
class Target  
{  
public:  
    Target(void)  
    {  
    }  
  
    ~Target(void)  
    {  
    }  
  
    T Add(T const& a, T const& b)  
    {  
        return Library::Add(a, b);  
    }  
};  
  
}}} // namespace Sunrise::TDDSample::Library  
  
#endif  

然后,建立 Boost.Test 测试项目的测试代码:

1、在项目 TDDSample 下的文件 TDDSample.cpp 中,把代码改为如下:

// TDDSample.cpp : 定义控制台应用程序的入口点。  
//  
  
#include "stdafx.h"  
  
#include   
  
#define BOOST_TEST_MAIN  
#include   
  
namespace Sunrise { namespace TDDSample  
{  
using namespace std;  
  
struct GlobalFixture  
{  
    GlobalFixture()  
    {  
        cout << "开始测试..." << endl;  
    }  
  
    ~GlobalFixture()  
    {  
        cout << "测试结束!" << endl;  
        //system("pause");  
    }  
};  
  
BOOST_GLOBAL_FIXTURE(GlobalFixture)  
  
}}  // namespace Sunrise::TDDSample

2、在项目 TDDSample 下新建文件,文件名:TargetTest.cpp,选择“Visual C++”下的“代码”下的"C++ 文件(.cpp)"。代码如下:

#include "StdAfx.h"  
  
#include   
  
#define BOOST_TEST_INCLUDED  
#include   
#include   
  
#include "../TDDSample.Library/Target.h"  
  
namespace Sunrise { namespace TDDSample  
{  
using namespace std;  
using namespace boost;  
//using namespace boost::unit_test;  
using namespace Sunrise::TDDSample::Library;  
  
struct TargetFixture  
{  
    TargetFixture()  
    {  
        cout << "Target 开始测试..." << endl;  
    }  
  
    ~TargetFixture()  
    {  
        cout << "Target 测试结束!" << endl;  
    }  
};  
  
BOOST_FIXTURE_TEST_SUITE(s_Target, TargetFixture)  
  
    BOOST_AUTO_TEST_CASE(t_GlobalAdd)  
{  
    BOOST_CHECK_EQUAL(3, Add(1, 2));  
}  
  
BOOST_AUTO_TEST_CASE(t_ErrorAdd)  
{  
    // 模拟错误  
    //BOOST_CHECK_EQUAL(0, Add(1, 2));  
}  
typedef mpl::list <short, int, long, double> Types;  
BOOST_AUTO_TEST_CASE_TEMPLATE(t_TargetAdd, T, Types)  
{  
    Target target;  
    BOOST_CHECK_EQUAL(static_cast(3.0), target.Add(1, 2));  
}  
  
BOOST_AUTO_TEST_SUITE_END()  
  
}}  // namespace Sunrise::TDDSample

3、设置项目 TDDSample 属性,首先选择“所有配置”,然后选择“配置属性”下的“C/C++”下的“代码生成”下的“启用 C++ 异常”下的“是,但有 SEH 异常 (/EHa)”。如下图:

4、继续设置属性,选择“配置属性”下的“生成事件"下的“后期生成事件”下的“命令行”,输入如下命令行:

"$(TargetPath)" --result_code=no --report_level=no  

该步骤可以使 Boost.Test 项目编译后立即执行测试,并可以在输出中显示测试结果,并且可以利用 Visual Studio IDE 定位到出错的地方。如下图:

5、确定退出设置属性,以应用上面 3、4 步的设置。

6、编译成功并签入 TFS2010 中。

然后,建立 C++ 测试项目的测试代码:

1、在项目 TDDSample.Test 下的文件 TargetTest.cpp 中的如下代码:

[TestMethod]  
void TestMethod1()
{
//
// TODO: 在此处添加测试逻辑
//
};

改为:

[TestMethod]  
void TestGlobalAdd()
{
Assert::AreEqual(3, Add(1, 2));
};

[TestMethod]
void TestError()
{
// 模拟错误
//Assert::AreEqual(0, Add(1, 2));
};

[TestMethod]
void TestTargetAdd()
{
Target<double> target;
Assert::AreEqual(3.0, target.Add(1, 2));
};

[TestMethod]
void BoostTest()
{
// 调用 Boost.Test 项目,并检查返回值,非 0 值为失败
// 测试代码既可以在 C++ 测试项目中编写,也可以在 Boost.Test 项目中编写
// 同时可以结合 TFS 的自动化测试

String^ currentPath = AppDomain::CurrentDomain->BaseDirectory;
String^ fileName = currentPath + "\\TDDSample.exe";

ProcessStartInfo^ testProcessStartInfo = gcnew ProcessStartInfo(fileName);
testProcessStartInfo->UseShellExecute = false;
testProcessStartInfo->RedirectStandardOutput = true;
Process^ testProcess = Process::Start(testProcessStartInfo);
StreamReader^ testStreamReader = testProcess->StandardOutput;
testProcess->WaitForExit();

Console::Write(testStreamReader->ReadToEnd());
Assert::AreEqual(0, testProcess->ExitCode);
};

添加如下 #include 及 using 代码:

#include "../TDDSample.Library/Target.h"  
using namespace System::IO;
using namespace System::Diagnostics;
using namespace Sunrise::TDDSample::Library;

2、设置项目 TDDSample.Test 属性,首先选择“所有配置”,然后选择“配置属性”下的“常规”下的“公共语言运行时支持”下的“公共语言运行时支持(/clr)”。如下图:

3、编译成功并执行测试,选择菜单"测试"下的“运行”下的“解决方案中的所有测试”,测试全部通过。如下图:

然后,建立自动构建和自动测试:

1、首先需要启动”Team Foundation 生成通知“,选择”开始“菜单下的”所有程序“下的”Microsoft Visual Studio 2010“下的”Team Foundation Server Tools“下的”生成通知“。如下图:

2、选择菜单"视图"下的“团队资源管理器”,选择团队项目下的“生成”,并点击右键,选择”新建生成定义“,默认生成定义名称:TDDSample。如下图:

3、选择”触发器“下的”封闭签入 - 仅在成功合并和生成所提交的变更后接受签入“。如下图:

4、选择”工作区“下的”源代码管理文件夹“,设置为解决方案的根目录,类似”$/Sample/TDDSample“。如下图:

5、选择”生成默认值“,设置”将生成输出复制到以下放置文件夹“为 TFS 服务器配置的输出路径,类似”\\TFSServer\PublishProgram\Sample“。如下图:

6、”过程“和”保留策略“可以保持默认设置。

7、保存设置,并签入全部代码变更。此时将显示”封闭签入“对话框,点击”生成更改“即可。如下图:

8、过一段时间后,”生成通知“会收到 TFS 服务器返回的生成及测试结果并显示”封闭签入“结果对话框,点击”协调“即可。如下图:

最后,如果要测试失败的签入,可以修改代码中标记”模拟错误“处的代码,启用注释掉的代码即可。

   
次浏览       
相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

LoadRunner性能测试基础
软件测试结果分析和质量报告
面向对象软件测试技术研究
设计测试用例的四条原则
功能测试中故障模型的建立
性能测试综述
更多...   


性能测试方法与技术
测试过程与团队管理
LoadRunner进行性能测试
WEB应用的软件测试
手机软件测试
白盒测试方法与技术


某博彩行业 数据库自动化测试
IT服务商 Web安全测试
IT服务商 自动化测试框架
海航股份 单元测试、重构
测试需求分析与测试用例分析
互联网web测试方法与实践
基于Selenium的Web自动化测试
更多...