51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1966|回复: 0
打印 上一主题 下一主题

[转贴] VC2010+TFS2010结合Boost.Test库进行自动化测试

[复制链接]
  • TA的每日心情
    擦汗
    昨天 09:02
  • 签到天数: 1042 天

    连续签到: 4 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2016-6-6 15:08:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    最近做了一个实验,结合 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:ibrary    #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:ibrary;    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:iagnostics;  
    using namespace Sunrise::TDDSample:ibrary;  

    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 服务器返回的生成及测试结果并显示”封闭签入“结果对话框,点击”协调“即可。如下图:

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

    文章出自:http://www.uml.org.cn/Test/201412302.asp


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏1
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-8 07:54 , Processed in 0.065641 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表