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. cf984c Finite or not?

    一个十进制分数 \(p/q\) 在 \(b\) 进制下是有限小数的充要条件是 \(q\) 的所有质因子都是 \(b\) 的质因子. First, if \(p\) and \(q\) are not ...

  2. loj2049 「HNOI2016」网络

    好像复杂度来说不是正解--不加谜之优化(下叙)能被loj上的加强数据卡 #include <algorithm> #include <iostream> #include &l ...

  3. 接口测试之post和get的区别

    post和get都可以给服务器发送请求,在做接口测试的时候,我发现有些时候某些功能的接口文档中是用post请求发送的, 但是只要接口一致参数一致用post也能发送请求,并且获取到的返回也是正确的. 那 ...

  4. Python+Selenium练习篇之15-在浏览器中新开一个tab

    本文介绍如selenium方法打开一个新的tab,我们知道在浏览器里,我们按住 ctrl+ t 就可以新打开一个tab.所以我们学习如何利用webdriver中send_key 的方法去触发ctrl+ ...

  5. caffe工程配置问题

    一开始是碰到没有caffe/caffe.hpp文件的问题,不知道怎么弄.通过百度,知道了在makefile文件里加入头文件路径和库文件路径就行. 首先是caffe.pb.h丢失问题,解决方法:http ...

  6. django orm 基本Field介绍

    ORM:object relational mapping,对象关系映射 django中使用原生sql的弊端: 1.SQL语句重复率很高,利用率不高 2.如果业务逻辑生变,原生SQL更改起来比较多 3 ...

  7. webpack & async await

    webpack & async await ES 7 // async function f() { // return 1; // } const f = async () => { ...

  8. 【13】vuex2.0 之 state

    Vuex 的核心是 store, 它是一个通过 Vuex.Store 构造函数生成的对象.为什么它会是核心呢?因为我们调用这个构造函数创建store 对象的时候,给它传递参数中包装了state, mu ...

  9. L#中 int.TryParse 有问题

    今天发现了一个 L# 的异常..因此记录一下 List<string> strList = new List<string>(); ; i<; ++i) { ; j< ...

  10. 四个简单易用的demo,关于iOS定时器和延时的,非常好用。

    1,延时执行(不可重复) 效果我直接截取控制台的日志了,就不做UI了. 2,用NSTimer执行定时和延时(可重复) [objc] view plain copy /** ** timer 可重复 * ...