1.部署
a)编译框架
1.1下载gtest库1.6.0 并解压到文件夹 "/user/{user}/gtest.1.6.0"

下载地址:https://code.google.com/p/googletest/downloads/detail?name=gtest-1.6.0.zip&can=2&q=

1.2安装gcc 如果已有命令行操作,GCC跳过这个步骤

在mac下,我直接使用使用xcode4.6的扩展,操作是打开xcode ->preferences ->downloads->componnts 检查command line tools是否已安装,没有安装直接安装就行了

1.3把下面的脚本保存为 bash脚本并放到"/user/{user}/gtest.1.6.0",命名为 create.sh并运行脚本,成功后就会产生两个文件 (libgteste.a gtest-all.o)

g++ -I./include -I./ -c ./src/gtest-all.cc glib.o
ar -rv libgteste.a gtest-all.o

运行步骤:1)先打开终端运行 cd "/user/{user}/gtest.1.6.0"
2)再运行 create.sh

1.4创建运行环境

1)在目标机器上先创建一个部署的目录 "/user/{user}/utest"
2)再在创建好的文件目录下创建一个libs
3)把1.3运行后产生成的文件libgteste.a、gtest-all.o、以及gtest库文件中的include文件夹,src目录下的gtest_main.cc 一起放到上一步创建的libs中

b)编写脚本 (看附件run.sh)

创建测试脚本run.sh 放到到1.4.1创建的目录下与libs同一级("/user/{user}/utest")

c) 建立目标源码目录src 路径为 "/user/{user}/utest/src"

这个文件夹不是必须的,是用来放被测试的目标代码,将会在run.sh脚本中的 src_path变量指定,确保在运行脚本时能找到这个路径即可

d) 建立一个测试tests目录 "/user/{user}/utest/tests"
这个目标也不是必须的,用来存放测试代码,将会在run.sh脚本中的 src_tests变量指定,确保在运行脚本时能找到这个路径即可

2.编写测试

a)目标代码(直接使用下载库的sample1.cc sample1.h)并把这个文件放到src中(如果是其它位置,在run.sh脚本中指定src_path为到相应的位置)
b)测试用例(直接使用下载库中的sample1_unittest.h)并把这个文件放到tests中(如果是其它位置,在run.sh脚本中指定src_tests为到相应的位置)
c)测试用例编写看gtest教程
入门:https://code.google.com/p/googletest/wiki/V1_6_Primer
高级:https://code.google.com/p/googletest/wiki/AdvancedGuide

d)测试用例备注
a)代码清单:
测试目标代码 "/user/{user}/utest/src/sample1.h"
测试目标代码"/user/{user}/utest/src/sample1.cc"
测试用例 "/user/{user}/tests/tests/sample1_unittest.cc“

b)用例备注
1)测试目标代码 "/user/{user}/utest/src/sample1.h"
//声明两个函数
int Factorial(int n);
bool IsPrime(int n);

2)测试目标代码"/user/{user}/utest/src/sample1.cc"

//定义
#include "sample1.h"
#include <stdio.h>
#include <iostream>

//result = n!
int Factorial(int n) {
int result = 1;

for (int i = 1; i <= n; i++) {
result *= i;
}
//想要保持测试报告的可阅读性,请不要在程序中使用这样的日志
printf("inject messgae!");
std::cout<<"cout message"<<std::endl;
return result;
}

//模拟一个函数多个职责来测试不同的事件结果
bool IsPrime(int n) {
if (n <= 1) return false;
if (n % 2 == 0) return n == 2;

for (int i = 3; ; i += 2) {
if (i > n/i) break;

if (n % i == 0) return false;
}
return true;
}

3)测试用例 "/user/{user}/tests/tests/sample1_unittest.cc“

#include <limits.h>
#include "sample1.h"
#include "gtest/gtest.h" 引用测试框架头文件,因为我们在脚本中已设置好相应的路径关系,一定要按照这个路径来引用

//测试用例接口
//FactorialTest 测试用例名称, Negative 测试名称
TEST(FactorialTest, Negative) {
EXPECT_EQ(1, Factorial(-5)); //检查目标是输出是否与期望一致
EXPECT_EQ(1, Factorial(-1)); //检查目标是输出是否与期望一致
EXPECT_TRUE(Factorial(-10) > 0); //按范围来检查,为TRUE就通过,FALSH 就不通过
}

TEST(FactorialTest, Zero) {
EXPECT_EQ(1, Factorial(0));
}

TEST(FactorialTest, Positive) {
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
}

TEST(IsPrimeTest, Negative) {
EXPECT_FALSE(IsPrime(-1));
EXPECT_FALSE(IsPrime(-2));
EXPECT_FALSE(IsPrime(INT_MIN));
}

TEST(IsPrimeTest, Trivial) {
EXPECT_FALSE(IsPrime(0));
EXPECT_FALSE(IsPrime(1));
EXPECT_TRUE(IsPrime(2));
EXPECT_TRUE(IsPrime(3));
}

TEST(IsPrimeTest, Positive) {
EXPECT_FALSE(IsPrime(4));
EXPECT_TRUE(IsPrime(5));
EXPECT_FALSE(IsPrime(6));
EXPECT_TRUE(IsPrime(23));
}

3.运行测试

a)运行测试,打开终端,先cd "/user/{user}/utest/src"
b)再运行 sh run.h 就会产生一个测试结果报告

4.测试报告
测试报告放在run.sh的的输出重定向位置,run.sh脚本是直接在控制如显示的,运行结果会在控制台中输出

===========start test============
[==========] Running 13 tests from 4 test cases.
[----------] Global test environment set-up.
[----------] 3 tests from FactorialTest
[ RUN ] FactorialTest.Negative
[ OK ] FactorialTest.Negative (0 ms)
[ RUN ] FactorialTest.Zero
[ OK ] FactorialTest.Zero (0 ms)
[ RUN ] FactorialTest.Positive
[ OK ] FactorialTest.Positive (0 ms)
[----------] 3 tests from FactorialTest (0 ms total)

[----------] 3 tests from IsPrimeTest
[ RUN ] IsPrimeTest.Negative
[ OK ] IsPrimeTest.Negative (0 ms)
[ RUN ] IsPrimeTest.Trivial
[ OK ] IsPrimeTest.Trivial (0 ms)
[ RUN ] IsPrimeTest.Positive
[ OK ] IsPrimeTest.Positive (0 ms)
[----------] 3 tests from IsPrimeTest (0 ms total)

[----------] 4 tests from MyString
[ RUN ] MyString.DefaultConstructor
[ OK ] MyString.DefaultConstructor (0 ms)
[ RUN ] MyString.ConstructorFromCString
[ OK ] MyString.ConstructorFromCString (0 ms)
[ RUN ] MyString.CopyConstructor
[ OK ] MyString.CopyConstructor (0 ms)
[ RUN ] MyString.Set
[ OK ] MyString.Set (0 ms)
[----------] 4 tests from MyString (0 ms total)

[----------] 3 tests from QueueTest
[ RUN ] QueueTest.DefaultConstructor
[ OK ] QueueTest.DefaultConstructor (0 ms)
[ RUN ] QueueTest.Dequeue
[ OK ] QueueTest.Dequeue (0 ms)
[ RUN ] QueueTest.Map
[ OK ] QueueTest.Map (0 ms)
[----------] 3 tests from QueueTest (0 ms total)

[----------] Global test environment tear-down
[==========] 13 tests from 4 test cases ran. (0 ms total)
[ PASSED ] 13 tests.

5.mac下的完整包请看附件【请通过邮箱 索要czjone@126.com】

gtest 自动化测试 部署的更多相关文章

  1. <自动化测试方案_10>第十章、自动化测试部署策略

    第十章.自动化测试部署策略 按照以下顺序部署自动化框架 1,部署API自动化    时间:三周2,部署PC端UI自动化 时间:1个月 3,部署Sonar代码质量管理 时间:1个月 4,集成到Jenki ...

  2. 使用gtest自动化测试并给出性能测试结果(windows 版本,版本平台也可以使用,但并没有做完整的测试)

    /************************************************************* *使用gtest自动化测试 * ********************* ...

  3. Robot Framework 自动化测试--部署篇

    一.产品介绍 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架.它是为了端 到端的验收测试(End-To-End Acceptance Test)以及验收测试 ...

  4. 实现android自动化测试部署与运行Shell脚本分享

    我的配置是linux 64, android4.2.2的sdk. 实现的细节都在代码注释里了,变量名以及echo的内容也是说明的一部分. 主流程为: 1.检测是否指定端口的模拟器已经运行,若有则关闭2 ...

  5. Travis-CI自动化测试并部署至自己的CentOS服务器

    一直都想自己部署一下自动化测试部署,在了解了Travis-CI之后终于准备在这次和小伙伴一起做的一个博客类网站实验下了. 因为这是一个前后端分离的项目,所以我这里只管前端工程的自动化部署,前端主要用V ...

  6. 使用travis-ci自动部署github上的项目

    travis-ci是什么? 一个使用yaml格式配置用于持续集成完成自动化测试部署的开源项目 官网:https://travis-ci.org/ 使用travis-ci集成vue.js项目 首先,您需 ...

  7. <自动化测试方案书>方案书目录排版

    自动化测试方案书 一.介绍 QQ交流群:585499566 这篇是一个系列,用来给需要做自动化测试方案的人做个参考,文章的内容是我收集网上和自己工作经验所得,希望能够给你们有所帮助 背景:因为工作需要 ...

  8. Jmeter简单介绍与搭配Jenkins实现自动化

    Jmeter简介 Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具.用于对软件做压力测试,它最初被设计用于 Web应用测试,但后来扩展到其他测试领域. 它可以用于 ...

  9. 使用Jenkins pipeline流水线构建docker镜像和发布

    新建一个pipeline job 选择Pipeline任务,然后进入配置页面. 对于Pipeline, Definition选择 "Pipeline script from SCM" ...

随机推荐

  1. loj2046 「CQOI2016」路由表

    大傻逼trie树,更傻逼的是我这都没独立想出来,以后要少看题解,多多思考 #include <algorithm> #include <iostream> #include & ...

  2. android 内存说明

    MemoryInfo的Field如下 dalvikPrivateDirty: The private dirty pages used by dalvik. dalvikPss :The propor ...

  3. Python-S9-Day114——Flask开始实战

    01 今日内容概要 02 课前分享 03 内容回顾 04 路飞学城表结构(一) 05 路飞学城表结构(二) 06 路飞学城立即支付思路 07 今日作业 08 初识Flask 09 werkzug 10 ...

  4. CentOS7安装Code::Blocks

    在CentOS7上安装Codelocks的过程. 1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可yum install gccyum instal ...

  5. 在IE浏览器下,PDF将弹出窗口遮挡了

    写了个embed标签里面放这个pdf 然后点击其他地方的弹框pdf把他遮盖住了 如下: 先是改z-index,没卵用. 百度了好久,终于找到了个有用的 https://blog.csdn.net/it ...

  6. c++矩阵

    这里讲的矩阵有创建矩阵,矩阵加法,矩阵乘法,输出矩阵这些功能. #include<iostream> using namespace std; template<class T> ...

  7. 菜鸟之路——机器学习之KNN算法个人理解及Python实现

    KNN(K Nearest Neighbor) 还是先记几个关键公式 距离:一般用Euclidean distance   E(x,y)√∑(xi-yi)2 .名字这么高大上,就是初中学的两点间的距离 ...

  8. TextBox的值随dropdownlist值而变化

    转自:http://bytes.com/topic/asp-net/answers/443065-textbox-value-change-select-other-item-dropdownlist ...

  9. nyoj 题目6 喷水装置

    喷水装置(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...

  10. 浏览器不支持JavaScript怎么办

    使用  noscript 标签,给用户提醒即可 <body> <noscript>需要js支持</noscript> </body>