基于 jenkins 的持续测试方案

CI/CD

Continuous Integration;

Continuous Deployment;

  • 持续集成,将新代码和旧代码一起打包、构建;
  • 持续部署,将新构建的包进行部署;
  • 持续测试,将新代码、新单元测试一起测试;
  • 方案:
    • 公有云DevOps 平台,如gitlab runner,github action
      • 服务器在国外,速度慢
      • 使用YAML编写流程脚本
    • 自建CI/CD平台,如jenkins(java编写)/ BuildBot(python编写地址)
      • 可以执行任意的代码、搭建结果完全私有、开源的软件

持续测试

  1. 代码托管平台-gitee
    编写简单的python项目,并上传gitee仓库

app.py:

python 复制代码
# app.py
# __author__ = "laufing"

from fastapi import FastAPI # 异步web框架
import uvicorn # ASGI

app = FastAPI()


@app.get("/")
def index():
    return {
        "code": 200,
        "msg": "0k"
    }


# 数据模型、序列化
from pydantic import BaseModel


class UserData(BaseModel):
    name: str
    password: str
    phone: str


@app.post("/user/register") # post /user/register   {"name": "jack", "password": 123, "phone": 123}
def register(user: UserData) -> dict:
    print(user, type(user)) # UserData类型的对象
    return user # 将模型序列化为json


if __name__ == '__main__':
    uvicorn.run(app, host="localhost", port=8080, log_level="info")

test_app.py:

python 复制代码
# __author__ = "laufing"
import requests
import allure


HOST = "http://localhost:8080"


class TestApp:
    @allure.feature("index首页的功能模块")
    @allure.title("get_index") # 测试用例的名称
    def test_index(self):
        res = requests.get(HOST + "/")
        assert res.status_code == 200

    @allure.feature("注册的功能模块")
    @allure.title("user_register")
    @allure.severity(allure.severity_level.CRITICAL)
    def test_register(self):
        user = {
            "name": "jack",
            "password": 123,
            "phone": 123
        }
        res = requests.post(HOST + "/user/register", json=user)
        assert res.status_code == 200

将以上项目推送到gitee仓库。

  1. 在CentOS7中使用root用户启动jenkins,并在防火墙中开启对应端口。
bash 复制代码
# java11+  启动jenkins
java -jar jenkens.war --httpPort=8081 --httpListenAddress=0.0.0.0

# 防火墙开放端口
firewall-cmd --permanent --add-port=8081/tcp
firewall-cmd --reload
  1. 使用创建的admin账户登录jenkins,安装git 、allure 插件(Manage Plugins>Plugins>availablexx),并配置tool(需要在linux下安装git/allure);

    配置allure的安装家目录(bin的上级目录):

最后创建item;

  1. 配置创建的jenkins项目;

这里添加项目的描述、配置git仓库地址(需要在gitee代码托管平台配置启动jenkins的账户下.ssh的公钥)及分支、配置build steps执行的shell命令、build triggers poll SCM、post-build actions(构建后的动作,如测试报告、邮件通知等);

选择Poll SCM触发器,每两分钟轮询一次仓库,代码是否发生变化;若不设置轮询计划,则仅在仓库代码发生变化时,通过web hook 触发jenkins流水线;

这里是构建,执行shell的步骤,工作目录为~/.jenkins/workspace/my_py_test1/

配置构建后的动作,使用linux下安装的allure命令生成allure html报告;

  1. 手动执行构建(也可以提交代码到仓库自动触发构建)

流程总结

  • 本地开发代码
  • 提交到gitee仓库
  • jenkins监控代码变化(poll轮询、webhook钩子)
  • jenkins执行构建的命令
  • jenkins生成测试报告
  • 发送结果邮件通知
相关推荐
heimeiyingwang1 小时前
【CI/CD·Jenkins篇】环境搭建:从零部署 Jenkins 主从架构
ci/cd·jenkins
heimeiyingwang3 小时前
【CI/CD·Jenkins篇】Pipeline 基础:Declarative 与 Scripted 语法详解
ci/cd·pipeline·jenkins
遨游DATA1 天前
Jenkins 修改 config.xml 后页面仍是旧配置:让 live job 配置真正生效
ci/cd·jenkins·devops·故障排查·config.xml
Dobby_051 天前
【CICD】Jenkins Pipeline 快速学习入门
运维·学习·jenkins
上海安当技术2 天前
统一身份认证平台怎么落地?11 个异构业务系统接入 ASP 的完整实施路径
数据库·servlet·架构·kubernetes·jenkins
回眸不遇3 天前
Elasticsearch嵌套类型nested使用指南
大数据·elasticsearch·jenkins
回眸不遇4 天前
类型的区别和应用场景 nested 每个对象独立存储为隐藏的子文档 适合存储数组 查询的时候有特定的语法 nested查询 且字段要 ...
运维·jenkins
X1A0RAN5 天前
容器化部署 Jenkins 教程
运维·docker·jenkins
增量星球5 天前
《持续交付2.0系列九》从手动到自动之持续集成
运维·ci/cd·持续部署·持续集成
BullSmall5 天前
jenkins 全局工具变更后,构建的任务为什么没有刷新过来
运维·jenkins