【テスト自動化】JenkinsでTavernを使用したAPIテスト構築
はじめに
こんにちは。SHIFTのテスト自動化エンジニアの松岡です。
Tavernは、yamlに期待値を記載するだけで、APIのレスポンスJSONのアサーションを行うことができるテストツールです。
今回は実装したTavernのAPI自動テストを、Jenkinsで実行できるようにする方法をご紹介致します。
◆前提条件
使用するサーバはLinux
Jenkinsがマスター(コントローラー)となるサーバにインストールされ使用できるようになっていること。
AllureプラグインがJenkinsにインストールされ、使用可能になっていること。
DockerがJenkinsエージェントとなるサーバにインストールされていること。
Jenkinsノードの設定が完了していること。
◆全体構成図
システム構成は以下の通りです。
◆必要ファイル準備
必要なファイルは以下の3つです。
【1】Dockerfile
FROM python:3.7.15-alpine3.17
ENV TZ='Asia/Tokyo'
COPY requirements.txt
RUN apk add gcc g++
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY ./entrypoint.sh /
RUN chmod +x /entrypoints.txt
ENTRYPOINT ["/entrypoint.sh"]
Dockerで実行する場合に必須のファイルです。
`FROM`にてpythonを指定します。バージョンは必要に応じて変更してください。
なお、プロキシ環境では`ENV`に`HTTP_PROXY`、`HTTPS_PROXY`の設定を追加する必要がありますので、ご注意ください。
【2】entrypoint.sh
#!/bin/sh
OUTPUT_PATH=allure-output
rm -rf ${OUTPUT_PATH}
mkdir -p ${OUTPUT_PATH}
py.test -p no:chacheprovider --alluredir=${OUTPUT_PATH}/report $@
exitStatus=$?
echo "end test"
exit $exitStatus
実際にテストを実行するシェルです。
Docker内でこのシェルが動くことにより、テスト実行とレポートファイルの生成を行います。
`OUTPUT_PATH`は任意に変更可能です。
【3】requirements.txt
pytest==7.2.0
tavern=1.24.1
allure-pytest==2.12.0
pykwalify==1.8.0
実行に必要なツールとそのバージョンを記載します。
pytest, tavern: API自動テスト実行
allure-pytest: Allureレポート用ファイル生成
pykwalify: yamlファイルのバリデーション
◆ビルドイメージ作成
上記3つのファイルを同じ階層に配置したら、Jenkinsのスレーブにログインし、ビルドイメージを作成します。
ここでは例として「test_u」というユーザのhomeディレクトリに「tavern_test」というディレクトリを作成してファイルを配置した想定で説明します。
[test_u@jenkins_agent ~]$ cd tavern_test
[test_u@jenkins_agent tavern_test]$ sudo docker build . -t tavern-test:latest
パラメータ-tに「tavern-test:latest」を渡しています。
こうすることで、docker実行時にパラメータ「-it」で指定できるようになります。
◆Docker実行
イメージを作成したら、予めDockerを実行しておきます。
その際、テストケースを格納したディレクトリをDockerにマウントする必要があります。ここでは例として、「/home/test_u/tavern_test/yaml」というディレクトリをマウントします。
[test_u@jenkins_agent tavern_test]$ pwd
/home/test_u/tavern_test
[test_u@jenkins_agent tavern_test]$ cd yaml
[test_u@jenkins_agent yaml]$ docker run --name tavern_exe -v `pwd:/yaml --entrypoint="sh" -it tavern-test
先ほど作成した`tavern-test`というイメージ名をここで使用しています。
また実行中となるDockerに対してもここでパラメータ「--name」で`tavern_exe`と指定しています。
この値を設定すると、Jenkinsジョブから簡単に実行中のDockerを指定できます。
◆Jenkinsジョブの設定
テストケースのyamlとDockerが準備できたら、最後はJenkinsジョブの設定です。ここの例では、Jekinsのパイプライン設定で「Pipeline scripe from SCM」を選択しておき、Jenkinsfileを作成してGitに登録します
Jenkinsfile
pipeline {
agent { label "jenkins_agent" }
tools {
allure "allure2.x.x"
}
stages {
stage('Tavern Test') {
steps {
sh """
echo 'Start Tavern Test'
cd /home/test_u/tavern_test/yaml
docker exec tavern_exe /entrypoint.sh /yaml
"""
}
}
stage('Allure Report') {
steps {
sh """
docker cp tavern_exe:/allure-output/report ./
"""
script {
allure({
includeProperties: false,
properties: [],
reportBuildPolicy: 'ALWAYS',
results: [[path: 'report']]
})
}
}
}
}
}
Jenkinsfile全体は以上のようになります。
順番に見ていきます。
agent { label "jenkins_agent" }
tools {
allure "allure2.x.x"
}
`agent`で、ジョブを実行するエージェントを指定します。
`docker run`を行ったサーバのノード名を指定します。
(Jenkinsの管理>ノードの管理に表示される値)
`tools`では、レポート生成に使用するAllureを指定します。
括弧内は実際にJenkinsで設定した名前に置き換えてください。
(Jenkinsの管理>Global Tool Configuration>インストール済みAllure Commandlineの名前)
stage('Tavern Test') {
steps {
sh """
echo 'Start Tavern Test'
cd /home/test_u/tavern_test/yaml
docker exec tavern_exe /entrypoint.sh /yaml
"""
}
}
テスト実行するstageです。
yamlのあるディレクトリに移動したあと、`docker run`を行った際に指定した「name」を使用して、実行中のdockerを特定しています。
なお、ここではyamlファイルを直接配置している想定ですが、Tavern Testの前にstageを追加し、Gitからyamlファイルを(dockerが)マウントしているディレクトリに配置して実行することもできます。
stage('Allure Report') {
steps {
sh """
docker cp tavern_exe:/allure-output/report ./
"""
script {
allure({
includeProperties: false,
properties: [],
reportBuildPolicy: 'ALWAYS',
results: [[path: 'report']]
})
}
}
}
Allureレポートを生成するstageです。
shブロックでは、生成されたレポート用ファイルをdocker内からJenkinsエージェントのディレクトリにコピーしています。
コピー元のディレクトリは、entrypoint.shでパラメータ「--allure-dir」に指定したものと同じディレクトリを記載します。
あとはジョブを実行するとJenkinsの画面からTavernで実行したAPIテストのAllureレポートが参照できるようになります。
※ エディタの都合上インデントがずれてしまう場合があります。コピペ時にお手元でご確認ください。
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/