3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ぼくのかんがえたさいきょうのふれーきーてすとはっけんほうほう - Jenkins+Jestの例 -

Last updated at Posted at 2022-06-28

はじめに

世界中のITエンジニアが悩まされている原因不明でテストが失敗する「フレイキーテスト」問題

自動テストを実装しているが成功したり失敗したりしていまいち信頼性が無いテストがあります。
文頭の記事からそれらをフレーキーテストと呼ぶということ、世のエンジニアの皆様もそれに苦慮されていることを知り、なにか対応策を考えられないか画策してみました。
本記事では1例としてJenkinsのプラグインを組み合わせると、フレーキーテストを見つけられそうなので、その設定方法を書き記しておきます。

環境

jenkins 2.320

使用プラグイン

・Jest
jest-junit
・jenkins
test-results-analyzer

Jestの設定

jestのテスト結果をjunitで出力する

プロジェクトにjest-junitを追加します。
jest-junit は Jest で実行したテスト結果をJUnitのXML形式のファイルで出力するパッケージです。
jest.config.jsに下記例のように出力設定を追加します。

 $ npm install --save-dev jest-junit
jest.config.js
    reporters: [
        'default',
        [
            'jest-junit',
            {
                suiteName: 'jest tests',
                outputDirectory: 'junit/',
                outputName: 'junit.xml',
                classNameTemplate: '{classname}-{title}', //{classname}はdescribeのクラス名を出力します
                titleTemplate: '{classname}-{title}', //{title}はtestまたはitのテスト名を出力します
                ancestorSeparator: '',
                suiteNameTemplate: '{filename}' //{filename}はjestのテストファイル名を出力します
            },
        ],
    ],

出力設定をしたあとにjestを実行すると下記のようなJUnit形式のテスト結果が出力されます。
これをjenkinで収集します。

junit.xml
<?xml version="1.0" encoding="UTF-8"?>
<testsuites name={suiteName} tests="8" failures="0" errors="0" time="XX.XXX">
  <testsuite name={suiteNameTemplate} errors="0" failures="0" skipped="0" timestamp="2022-XX-XXTXX:XX:XX" time="XX.XXX" tests="1">
    <testcase classname={classNameTemplate} name={titleTemplate} time="XX.XXX">
    </testcase>
  </testsuite>
</testsuites>

jenkinsの設定

Jenkinsはデフォルトでビルド毎のJUnitテスト結果が収集可能となっています。
そこにビルドのテスト結果を保存して解析表示するtest-results-analyzerプラグインをインストールします。

設定方法

ジョブの設定でビルド後の処理の追加で「JUnitテスト結果の修正」を追加し「テスト結果XML」にjest-junitで出力したxmlへのファイルパスを記載します。
image.png

設定後、実際にジョブを実行した後にメニューからのTest Results Analyzerを選択します。

image.png

テスト毎の結果を収集することで、各テストの成功率、よく不安定となるテストを確認することができます。
例えば、②の履歴から、成功したり失敗したりするテストを見つけられます。

<表の説明>
①各テストの一覧とその成功率
②各テストのビルド毎の成功と失敗
③全テスト中最も失敗するテストTOP10

image.png

最後に

本記事では1例としてCIにjenkinsを利用した方法を記載しました。
Jestを使用していますが、JUnitでも同等なことができると思います。
ご参考になれば幸いです。

参考

・世界中のITエンジニアが悩まされている原因不明でテストが失敗する「フレイキーテスト」問題
https://www.publickey1.jp/blog/22/itjenkinsdevops_days_tokyo_2022_1.html

・フレーキーテストにまつわるあれこれ
https://qiita.com/seigot/items/bec2c934b762a2f50821
※既存のCIツールにてフレイキーなテストの対策手段が記載されています。

・Detect and track flaky Jest tests  
https://buildpulse.io/test-frameworks/jest
※Jestのフレイキーなテストを解析、可視化する有料Webサービス

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?