gtest 自動化測試 部署

1.部署
a)編譯框架
1.1下載gtest庫1.6.0 並解壓到文件夾 "/user/{user}/gtest.1.6.0"ios

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

1.2安裝gcc 若是已有命令行操做,GCC跳過這個步驟bash

在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)ide

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中ui

b)編寫腳本 (看附件run.sh)google

建立測試腳本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】

相關文章
相關標籤/搜索