test: add unit test cases for github reporting (#299)
Co-authored-by: rick <LinuxSuRen@users.noreply.github.com>
This commit is contained in:
parent
23355f9c91
commit
ceebdee381
|
@ -58,14 +58,6 @@ jobs:
|
||||||
sudo atest service status
|
sudo atest service status
|
||||||
|
|
||||||
atest convert -p .github/testing/core.yaml --converter jmeter -t sample.jmx
|
atest convert -p .github/testing/core.yaml --converter jmeter -t sample.jmx
|
||||||
# - name: Report API Test
|
|
||||||
# if: github.event.pull_request.user.login == 'linuxsuren'
|
|
||||||
# uses: thollander/actions-comment-pull-request@v2.4.3
|
|
||||||
# env:
|
|
||||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
# with:
|
|
||||||
# filePath: .github/workflows/report.md
|
|
||||||
# comment_tag: execution
|
|
||||||
- name: Run JMeter Tests
|
- name: Run JMeter Tests
|
||||||
uses: rbhadti94/apache-jmeter-action@v0.5.0
|
uses: rbhadti94/apache-jmeter-action@v0.5.0
|
||||||
with:
|
with:
|
||||||
|
@ -118,6 +110,8 @@ jobs:
|
||||||
- name: Run e2e
|
- name: Run e2e
|
||||||
env:
|
env:
|
||||||
GITEE_TOKEN: ${{ secrets.GITEE_TOKEN }}
|
GITEE_TOKEN: ${{ secrets.GITEE_TOKEN }}
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
PULL_REQUEST: ${{ github.event.number }}
|
||||||
run: |
|
run: |
|
||||||
sudo curl -L https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
|
sudo curl -L https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
|
||||||
sudo chmod u+x /usr/local/bin/docker-compose
|
sudo chmod u+x /usr/local/bin/docker-compose
|
||||||
|
|
|
@ -6,6 +6,8 @@ services:
|
||||||
dockerfile: e2e/Dockerfile
|
dockerfile: e2e/Dockerfile
|
||||||
environment:
|
environment:
|
||||||
GITEE_TOKEN: "$GITEE_TOKEN"
|
GITEE_TOKEN: "$GITEE_TOKEN"
|
||||||
|
GITHUB_TOKEN: "$GITHUB_TOKEN"
|
||||||
|
PULL_REQUEST: "$PULL_REQUEST"
|
||||||
depends_on:
|
depends_on:
|
||||||
etcd:
|
etcd:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
|
@ -19,6 +21,10 @@ services:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
# minio:
|
# minio:
|
||||||
# condition: service_started
|
# condition: service_started
|
||||||
|
volumes:
|
||||||
|
- type: volume
|
||||||
|
source: cache
|
||||||
|
target: /var/data
|
||||||
links:
|
links:
|
||||||
- etcd
|
- etcd
|
||||||
- mysql
|
- mysql
|
||||||
|
@ -91,3 +97,6 @@ services:
|
||||||
timeout: 30s
|
timeout: 30s
|
||||||
retries: 10
|
retries: 10
|
||||||
start_period: 3s
|
start_period: 3s
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
cache:
|
||||||
|
|
|
@ -2,14 +2,17 @@
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
mkdir -p /root/.config/atest
|
mkdir -p /root/.config/atest
|
||||||
|
mkdir -p /var/data
|
||||||
|
|
||||||
nohup atest server&
|
nohup atest server&
|
||||||
|
cmd="atest run -p test-suite-common.yaml --report github --report-github-identity e2e-testing --report-file /var/data/report.json --report-github-repo linuxsuren/api-testing --report-github-pr ${PULL_REQUEST:-0}"
|
||||||
|
|
||||||
echo "start to run testing"
|
echo "start to run testing: $cmd"
|
||||||
kind=orm target=mysql:3306 driver=mysql atest run -p test-suite-common.yaml
|
kind=orm target=mysql:3306 driver=mysql $cmd
|
||||||
kind=orm target=mariadb:3306 driver=mysql atest run -p test-suite-common.yaml
|
kind=orm target=mariadb:3306 driver=mysql $cmd
|
||||||
kind=etcd target=etcd:2379 atest run -p test-suite-common.yaml
|
kind=etcd target=etcd:2379 $cmd
|
||||||
kind=mongodb target=mongo:27017 atest run -p test-suite-common.yaml
|
kind=mongodb target=mongo:27017 $cmd
|
||||||
|
kind=orm target=postgres:5432 driver=postgres $cmd
|
||||||
|
|
||||||
# TODO online git repository is unstable, need to fix
|
# TODO online git repository is unstable, need to fix
|
||||||
# if [ -z "$GITEE_TOKEN" ]
|
# if [ -z "$GITEE_TOKEN" ]
|
||||||
|
@ -21,7 +24,6 @@ kind=mongodb target=mongo:27017 atest run -p test-suite-common.yaml
|
||||||
# fi
|
# fi
|
||||||
|
|
||||||
# TODO need to fix below cases
|
# TODO need to fix below cases
|
||||||
kind=orm target=postgres:5432 driver=postgres atest run -p test-suite-common.yaml
|
|
||||||
# kind=s3 target=minio:9000 atest run -p test-suite-common.yaml
|
# kind=s3 target=minio:9000 atest run -p test-suite-common.yaml
|
||||||
|
|
||||||
cat /root/.config/atest/stores.yaml
|
cat /root/.config/atest/stores.yaml
|
||||||
|
|
|
@ -46,7 +46,7 @@ func NewGithubPRCommentWriter(opt *GithubPRCommentOption) (ReportResultWriter, e
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
opt.Token = util.EmptyThenDefault(opt.Token, os.Getenv("GITHUB_TOKEN"))
|
opt.Token = util.EmptyThenDefault(opt.Token, os.Getenv("GITHUB_TOKEN"))
|
||||||
if opt.Repo == "" || opt.Identity == "" || opt.Token == "" || opt.PR <= 0 {
|
if opt.Repo == "" || opt.Identity == "" || opt.Token == "" {
|
||||||
err = fmt.Errorf("GitHub report parameters are not enough")
|
err = fmt.Errorf("GitHub report parameters are not enough")
|
||||||
}
|
}
|
||||||
return &githubPRCommentWriter{
|
return &githubPRCommentWriter{
|
||||||
|
@ -88,6 +88,11 @@ func (w *githubPRCommentWriter) loadExistData(newData []ReportResult) (result []
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *githubPRCommentWriter) Output(result []ReportResult) (err error) {
|
func (w *githubPRCommentWriter) Output(result []ReportResult) (err error) {
|
||||||
|
if w.PR <= 0 {
|
||||||
|
log.Println("skip reporting to GitHub due to without a valid PR number")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if result, err = w.loadExistData(result); err != nil {
|
if result, err = w.loadExistData(result); err != nil {
|
||||||
err = fmt.Errorf("failed to load exist data: %v", err)
|
err = fmt.Errorf("failed to load exist data: %v", err)
|
||||||
return
|
return
|
||||||
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
/*
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 API Testing Authors.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package runner
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
"github.com/h2non/gock"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGithubPRCommentWriter(t *testing.T) {
|
||||||
|
t.Run("lack of parameters", func(t *testing.T) {
|
||||||
|
_, err := NewGithubPRCommentWriter(&GithubPRCommentOption{})
|
||||||
|
assert.Error(t, err)
|
||||||
|
|
||||||
|
_, err = NewGithubPRCommentWriter(&GithubPRCommentOption{
|
||||||
|
Repo: "repo",
|
||||||
|
})
|
||||||
|
assert.Error(t, err)
|
||||||
|
|
||||||
|
_, err = NewGithubPRCommentWriter(&GithubPRCommentOption{
|
||||||
|
Identity: "id",
|
||||||
|
Token: "token",
|
||||||
|
})
|
||||||
|
assert.Error(t, err)
|
||||||
|
|
||||||
|
_, err = NewGithubPRCommentWriter(&GithubPRCommentOption{
|
||||||
|
Repo: "repo",
|
||||||
|
Identity: "id",
|
||||||
|
Token: "token",
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("pr number is invalid", func(t *testing.T) {
|
||||||
|
writer, err := NewGithubPRCommentWriter(&GithubPRCommentOption{
|
||||||
|
Repo: "linuxsuren/test",
|
||||||
|
Identity: "id",
|
||||||
|
Token: "token",
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
err = writer.Output(nil)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Nil(t, writer.WithAPIConverage(nil))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("error with getting comments", func(t *testing.T) {
|
||||||
|
defer gock.Off()
|
||||||
|
gock.New("https://api.github.com").Get("/repos/linuxsuren/test/issues/1/comments").Reply(http.StatusBadRequest)
|
||||||
|
writer := createWriter(t)
|
||||||
|
|
||||||
|
err := writer.Output(nil)
|
||||||
|
assert.Error(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
tmpF, tErr := os.CreateTemp(os.TempDir(), "report")
|
||||||
|
if !assert.NoError(t, tErr) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(tmpF.Name())
|
||||||
|
|
||||||
|
t.Run("create new comment", func(t *testing.T) {
|
||||||
|
defer gock.Off()
|
||||||
|
gock.New("https://api.github.com").Get("/repos/linuxsuren/test/issues/1/comments").Reply(http.StatusOK).JSON([]comment{})
|
||||||
|
gock.New("https://api.github.com").Post("/repos/linuxsuren/test/issues/1/comments").Reply(http.StatusCreated)
|
||||||
|
writer := createWriterWithReport(tmpF.Name(), t)
|
||||||
|
|
||||||
|
err := writer.Output([]ReportResult{{
|
||||||
|
API: "/api",
|
||||||
|
}})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("update comment", func(t *testing.T) {
|
||||||
|
defer gock.Off()
|
||||||
|
gock.New("https://api.github.com").Get("/repos/linuxsuren/test/issues/1/comments").Reply(http.StatusOK).JSON([]comment{{
|
||||||
|
ID: 1234,
|
||||||
|
Body: "id",
|
||||||
|
}})
|
||||||
|
gock.New("https://api.github.com").Patch("/repos/linuxsuren/test/issues/comments/1234").Reply(http.StatusOK)
|
||||||
|
writer := createWriterWithReport(tmpF.Name(), t)
|
||||||
|
|
||||||
|
err := writer.Output([]ReportResult{{
|
||||||
|
API: "/api",
|
||||||
|
}})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func createWriter(t *testing.T) ReportResultWriter {
|
||||||
|
return createWriterWithReport("", t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func createWriterWithReport(report string, t *testing.T) ReportResultWriter {
|
||||||
|
writer, err := NewGithubPRCommentWriter(&GithubPRCommentOption{
|
||||||
|
Repo: "linuxsuren/test",
|
||||||
|
Identity: "id",
|
||||||
|
Token: "token",
|
||||||
|
PR: 1,
|
||||||
|
ReportFile: report,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
return writer
|
||||||
|
}
|
Loading…
Reference in New Issue