Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

googletest の結果を appveyor に反映する際 XML 出力を使う #735

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions tests/run-tests.bat
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ set configuration=%2
set TEST_LAUNCHED=0
set ERROR_RESULT=0

set FILTER_BAT=%~dp0test_result_filter_tell_AppVeyor.bat
set UPLOAD_BAT=%~dp0upload.bat

pushd %~dp0
set BUILDDIR=build\%platform%
Expand All @@ -17,8 +17,9 @@ for /r %%i in (tests*.exe) do (
@echo %%i --gtest_list_tests
%%i --gtest_list_tests || set ERROR_RESULT=1

@echo %%i | "%FILTER_BAT%"
%%i | "%FILTER_BAT%" || set ERROR_RESULT=1
@echo %%i --gtest_output=xml:%%i.xml
%%i --gtest_output=xml:%%i.xml || set ERROR_RESULT=1
call "%UPLOAD_BAT%" %%i.xml || set ERROR_RESULT=1
)
popd
popd
Expand Down
53 changes: 0 additions & 53 deletions tests/test_result_filter_tell_AppVeyor.bat

This file was deleted.

1 change: 1 addition & 0 deletions tests/unittests/test-sample.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,6 @@ TEST(test, PointerSize)
#else
#endif
printf("pointerSize = %d\n", pointerSize);
RecordProperty("pointerSize", pointerSize);
ASSERT_EQ(sizeof(void*), pointerSize);
}
10 changes: 10 additions & 0 deletions tests/upload.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@echo off
set UPLOAD_XML=%1
set UPLOAD_PS=%~dp0upload.ps1

if "%APPVEYOR_BUILD_NUMBER%" == "" (
@echo This is not appveyor build. skip uploading xml files.
exit /b 0
)

powershell -ExecutionPolicy RemoteSigned -File "%UPLOAD_PS%" "%UPLOAD_XML%"
13 changes: 13 additions & 0 deletions tests/upload.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#-------------------------------------------------------------------------------------------------
# upload result of googletest.
# https://www.appveyor.com/docs/running-tests/#pushing-real-time-test-results-to-build-console
#-------------------------------------------------------------------------------------------------
$base = "https://ci.appveyor.com/api/testresults/junit/"
$url = $base + $env:APPVEYOR_JOB_ID
$xmlfile = $Args[0]

Write-Output $url
Write-Output $xmlfile

$webclient = New-Object System.Net.WebClient
$webclient.UploadFile($url , $xmlfile)
81 changes: 70 additions & 11 deletions unittest.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@
- [呼び出し構造](#呼び出し構造)
- [使用するバッチファイルの引数](#使用するバッチファイルの引数)
- [インクルードディレクトリ](#インクルードディレクトリ)
- [appveyor への結果の反映](#appveyor-への結果の反映)
- [googletest 側の対応](#googletest-側の対応)
- [appveyor 側の仕様](#appveyor-側の仕様)
- [実際の処理](#実際の処理)
- [参考サイト](#参考サイト)

<!-- /TOC -->

Expand Down Expand Up @@ -49,11 +54,13 @@ GUI でステップ実行することができます。
### 一覧

| バッチファイル | 説明 |
----|----
|[tests\create-project.bat](tests/create-project.bat)| 単体テスト用のプロジェクトファイル作成するバッチファイル |
|[tests\build-project.bat](tests/build-project.bat) | 単体テスト用のプロジェクトをビルドするバッチファイル |
|[tests\run-tests.bat](tests/run-tests.bat) | 単体テストを実行するバッチファイル |
|[tests\build-and-test.bat](tests/build-and-test.bat)| appveyor.yml から呼ばれて上記を呼び出すバッチファイル |
|--|--|
|[tests\create-project.bat](tests/create-project.bat)|単体テスト用のプロジェクトファイル作成するバッチファイル |
|[tests\build-project.bat](tests/build-project.bat) |単体テスト用のプロジェクトをビルドするバッチファイル |
|[tests\run-tests.bat](tests/run-tests.bat) |単体テストを実行するバッチファイル |
|[tests\upload.ps1](tests/upload.ps1) |単体テストの結果の XML ファイルを appveyor にアップロードするバッチファイル|
|[tests\upload.bat](tests/upload.bat) |[tests\upload.ps1](tests/upload.ps1) を呼び出すラッパー|
|[tests\build-and-test.bat](tests/build-and-test.bat)|appveyor.yml から呼ばれて上記を呼び出すバッチファイル |

### 呼び出し構造

Expand All @@ -64,17 +71,69 @@ GUI でステップ実行することができます。
- cmake --build
- [tests\run-tests.bat](tests/run-tests.bat)
- tests*.exe を実行
- [tests\upload.bat](tests/upload.bat)
- [tests\upload.ps1](tests/upload.ps1)

### 使用するバッチファイルの引数

| バッチファイル | 第一引数 | 第二引数 |
----|----|----
|[tests\create-project.bat](tests/create-project.bat)| platform ("Win32" または "x64") | configuration ("Debug" または "Release") |
|[tests\build-project.bat](tests/build-project.bat) | platform ("Win32" または "x64") | configuration ("Debug" または "Release") |
|[tests\run-tests.bat](tests/run-tests.bat) | platform ("Win32" または "x64") | configuration ("Debug" または "Release") |
|[tests\build-and-test.bat](tests/build-and-test.bat)| platform ("Win32" または "x64" または "MinGW") | configuration ("Debug" または "Release") |
| バッチファイル/powershell スクリプト| 第一引数 | 第二引数 |
|--|--|--|
|[tests\create-project.bat](tests/create-project.bat)|platform|configuration|
|[tests\build-project.bat](tests/build-project.bat) |platform|configuration|
|[tests\run-tests.bat](tests/run-tests.bat) |platform|configuration|
|[tests\build-and-test.bat](tests/build-and-test.bat)|platform|configuration|
|[tests\upload.bat](tests/upload.bat) |xml ファイル名|なし|
|[tests\upload.ps1](tests/upload.ps1) |xml ファイル名|なし|

|引数の値 (platform)|
|--|
|Win32|
|x64|
|MinGW|

|引数の値 (configuration)|
|--|
|Debug|
|Release|

## インクルードディレクトリ

[単体テスト用のCMakeLists.txt](tests/unittests/CMakeLists.txt) で [サクラエディタ用のディレクトリ](sakura_core) に
インクルードディレクトリを指定するので、そこからの相対パスを指定すれば、サクラエディタのヘッダをインクルードできます。

## appveyor への結果の反映

### googletest 側の対応

googletest の実行ファイルの引数に `-gtest_output=xml:tests.xml` というような引数を渡すと通常のコンソールへの
出力に加えて、`tests.xml` というファイルに XML 形式で出力を行います。

### appveyor 側の仕様

- https://www.appveyor.com/docs/running-tests/#pushing-real-time-test-results-to-build-console
- https://www.appveyor.com/docs/running-tests/#uploading-xml-test-results

以下の URL に googletest の出力の XML ファイルをアップロードすることにより、appveyor 側にテスト結果を
認識させることができます。


```
https://ci.appveyor.com/api/testresults/{resultsType}/{jobId}
```

|項目|値|参考|
|--|--|--|
|resultsType|`junit` (googletest が出力する XML の場合)|https://help.appveyor.com/discussions/questions/1843-uploading-test-results-from-google-test-lib-output|
|jobId|環境変数 `APPVEYOR_JOB_ID` の値|https://www.appveyor.com/docs/environment-variables/|

### 実際の処理

[upload.ps1](upload.ps1) の powershell スクリプトで System.Net.WebClient を使うことにより
XML ファイルのアップロードを行います。

### 参考サイト

- http://opencv.jp/googletestdocs/advancedguide.html#adv-generating-an-xml-report
- https://help.appveyor.com/discussions/questions/1843-uploading-test-results-from-google-test-lib-output
- https://www.appveyor.com/docs/running-tests/#pushing-real-time-test-results-to-build-console
- https://www.appveyor.com/docs/running-tests/#uploading-xml-test-results