gitlab cicd集成http runner实现自动化测试

背景

每次修改上线新的功能时,测试人员都需要对我们的主要业务流程做测试。所以为了提高效率,提升自动化测试能力,搭建了一个基于gitlab cicd pipline的test job。

1.编写测试脚本

因为虚拟机的python版本是2点几的版本,为了方便所以http runner的版本使用的是1.5.8.

测试用例采用的是yaml的编写方式, http runner的编写格式,可以在网上自行查阅。

api-test-case-dev.yaml

- config:
    name: test api(dev)
    variables:
      admin_url: your-url
      admin_token: 'your-token'
# test cases
- test:
    name: test customers one
    request:
      url: $admin_url/customers/1
      method: GET
      headers:
        User-Agent: 'iOS/10.3'
        authorization: $admin_token
    validate:
      - eq: [ content.data.phone,3486166218 ]

2.发送测试报告到邮箱

发送测试报告采用python的方式,先是读取到最新的测试报告,然后获取测试报告文件,最后发送邮件到我们邮箱。在这里没有直接发送邮件,目的是为了领域业务的统一管理。发送邮件内容的真实逻辑是写在我们后台的通知服务中。

import json
import os
import requests
import sys
import shutil

to_emails = ['your.email.com']

def send(file_new):
    f = open(file_new, "rb")
    sendFile = f.read()
    url = 'your.backend.url'
    token = 'your token'
    json_data = json.dumps({'identities': to_emails, "message": sendFile, "env":sys.argv[1]})
    header = {'Authorization': token}
    r = requests.post(url, data=json_data, headers=header)
    print(r)
    f.close()
    print("test report has been send")

def new_report(test_report):
    lists = os.listdir(test_report)  # list all file
    lists.sort(key=lambda fn: os.path.getmtime(test_report + "/" + fn))  # sort
    file_new = os.path.join(test_report, lists[-1])  # get latest report
    print(file_new)
    return file_new


if __name__ == '__main__':
     path = './reports'
     send(new_report(path))
     shutil.rmtree(path)

3.gitlab cicd 集成启动脚本

启动脚本start.sh

#!/bin/bash

#install test env
echo $PWD
echo "install test env"
pip install httprunner==1.5.8
pip install urllib3==1.22
# run testcase
echo "run testcase" $CI_COMMIT_REF_NAME
set -e
if [ $CI_COMMIT_REF_NAME == develop ];
then
  env=dev
else
  env=prod
fi
hrun ./scripts/test/api-test-case-$env.yaml
#send email
echo "send email " $env

python ./scripts/test/send_email.py $env

.gitlab-ci.yml 文件的test job编写: 

stages:
  - package
  - build
  - deploy
  - test

......

services-test:
  stage: test
  before_script:
    - apk update && apk add bash && apk add git && apk add python py-pip
  script:
    - /bin/bash ./scripts/test/start.sh
  only:
    refs:
      - test
      - master

你可能感兴趣的:(环境搭建,http,自动化,http,runner,python,gitlab)