gtest 自动化测试 部署
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 自动化测试 部署的更多相关文章
- <自动化测试方案_10>第十章、自动化测试部署策略
第十章.自动化测试部署策略 按照以下顺序部署自动化框架 1,部署API自动化 时间:三周2,部署PC端UI自动化 时间:1个月 3,部署Sonar代码质量管理 时间:1个月 4,集成到Jenki ...
- 使用gtest自动化测试并给出性能测试结果(windows 版本,版本平台也可以使用,但并没有做完整的测试)
/************************************************************* *使用gtest自动化测试 * ********************* ...
- Robot Framework 自动化测试--部署篇
一.产品介绍 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架.它是为了端 到端的验收测试(End-To-End Acceptance Test)以及验收测试 ...
- 实现android自动化测试部署与运行Shell脚本分享
我的配置是linux 64, android4.2.2的sdk. 实现的细节都在代码注释里了,变量名以及echo的内容也是说明的一部分. 主流程为: 1.检测是否指定端口的模拟器已经运行,若有则关闭2 ...
- Travis-CI自动化测试并部署至自己的CentOS服务器
一直都想自己部署一下自动化测试部署,在了解了Travis-CI之后终于准备在这次和小伙伴一起做的一个博客类网站实验下了. 因为这是一个前后端分离的项目,所以我这里只管前端工程的自动化部署,前端主要用V ...
- 使用travis-ci自动部署github上的项目
travis-ci是什么? 一个使用yaml格式配置用于持续集成完成自动化测试部署的开源项目 官网:https://travis-ci.org/ 使用travis-ci集成vue.js项目 首先,您需 ...
- <自动化测试方案书>方案书目录排版
自动化测试方案书 一.介绍 QQ交流群:585499566 这篇是一个系列,用来给需要做自动化测试方案的人做个参考,文章的内容是我收集网上和自己工作经验所得,希望能够给你们有所帮助 背景:因为工作需要 ...
- Jmeter简单介绍与搭配Jenkins实现自动化
Jmeter简介 Apache JMeter 是 Apache 组织开发的基于 Java 的压力测试工具.用于对软件做压力测试,它最初被设计用于 Web应用测试,但后来扩展到其他测试领域. 它可以用于 ...
- 使用Jenkins pipeline流水线构建docker镜像和发布
新建一个pipeline job 选择Pipeline任务,然后进入配置页面. 对于Pipeline, Definition选择 "Pipeline script from SCM" ...
随机推荐
- Go语言之并发编程(四)
同步 Go 程序可以使用通道进行多个 goroutine 间的数据交换,但这仅仅是数据同步中的一种方法.通道内部的实现依然使用了各种锁,因此优雅代码的代价是性能.在某些轻量级的场合,原子访问(atom ...
- loj6392 「THUPC2018」密码学第三次小作业 / Rsa
还是挺好做的,\((e_1,e_2)=1 \Rightarrow e_1s+e_2t=0\),\(m \equiv m^1 \equiv m^{e_1s+e_2t} \equiv c_1^s c_2^ ...
- 我给女朋友讲编程总结建议篇,怎么学习html和css
总共写了11篇博客了,7篇讲html的,4篇讲网络的.不敢说写的多么好吧,最起码的是我迈出了写作的第一步,写作的过程中了解了一些其他的知识,比如SEO.几种重定向等,由于个人能力和见识有限,写出来的东 ...
- Python subprocess.Popen中communicate()和wait()区别
刚开始我是使用的wait(),但是当adb命令返回太多时,程序就会卡死,查询得知原因后,才使用了communicate(),communicate()返回一个元组:(stdoutdata, stder ...
- 并发编程——多进程——multiprocessing开启进程的方式及其属性(3)
开启进程的两种方式——Process 方式一:函数方法 from multiprocessing import Process import time def task(name): print('% ...
- C# 中的 #region 和 #endregion 的作用
C#中的 #region 和 #endregion 表示一块区域,这样在 Visual Studio 中可以将这块区域的代码折叠起来,便于查看. 虽然Visual Studio 也响应大括号的折叠,但 ...
- Matlab freqs 函数
freqs 模拟滤波器的频率响应 语法: h = freqs(b,a,w)[h,w] = freqs(b,a)[h,w] = freqs(b,a,f)freqs(b,a) 描述: freqs 返回一个 ...
- 【转】netstat 查看端口占用情况
netstat用来查看系统当前系统网络状态信息,包括端口,连接情况等,常用方式如下: netstat -atunlp,各参数含义如下: -t : 指明显示TCP端口 -u : 指明显示UDP端口 -l ...
- ValueStack 源码
/* * Copyright 2002-2007,2009 The Apache Software Foundation. * * Licensed under the Apache License, ...
- MySql数据库 - 5.用C#连接数据库
添加 dll 引用,dll 位置:C:\Program Files (x86)\MySQL\Connector NET 8.0\Assemblies\v4.5.2 引入命名空间:MySql.Data. ...