1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > WEB开发 > 正文

WEB开发

Jenkins+Pytest+Allure集成测试环境

1987web2023-10-06WEB开发125

内容简介

本文会介绍如何从 0 到 1 构建 Python 项目的集成测试环境,文中会详细提及部署过程中会遇到的各种问题。

  • Pytest 负责 Python 代码测试

  • Allure 负责测试报告 HTML 界面展示

  • Jenkins 负责自动化

部署环境为 MacOS,在 Windows 或 Linux 下可以通过类似的方式部署与操作,此外也会给出对应的参考链接。

正文

首先需要安装 Jenkins,Jenkins 依赖于 JDK,所以需要先安装 Java JDK,这块不赘述,随后安装 Jenkins,在 MacOS 中可以通过 HomeBrew 安装。

brew install jenkins

如果你 brew install 很慢,可以参考本文最后的技巧 [1]。

当然,你可以直接通过 Docker 进行安装,jenkins 在 Docker Hub 中提供了官方的源.

docker run -p 8080:8080 -p 50000:50000 -v /your/home:/var/jenkins_home jenkins

我使用 brew 安装,安装完后,使用如下命令运行 jenkins

$ jenkins

此时 jenkins 将会显式的运行在命令行终端,并且创建~/.jenkins目录作为 JENKINS_HOME,localhost:8080 作为默认 URL。

启动时,Jenkins 会给出初始的密码,该密码会在 JENKINS_HOME 的 secrets/initialAdminPassword 中。

登录后,Jenkins 会要求你安装一些插件,此时出现第一个坑,安装插件速度极慢,可以参考技巧 [2] 来解决这个问题,通过技巧 [2] 修改配置后,可以通过技巧 [3] 来重启 Jenkins

Jenkins 安装有几个关键点。

  • 1. 安装前知道自己安装的是什么版本的 Jenkins,因为 allure 在 Jenkins 中的插件对 Jenkins 有版本要求

  • 2. 知道 JENKINS_HOME 的位置

allure 是一种支持多种编程语言的可视化测试报告工具,allure 在 jenkins 中的插件让 Jenkins 可以轻松调用 allure(有坑),而 allure 在 pytest 的插件主要是为了让 pytest 可以生成满足 allure 要求的测试信息文件。

通过 allure 插件,将 jenkins、pytest、allure 链接在一起,pytest 负责测试,测试生成的报告可以通过 allure 生成图像化界面,而 jenkins 自动化两个过程。

在 MacOS 中,allure 同样通过通过 Homebrew 安装。

brew install allure

allure 在 Windows 与 Linux 的安装方式参考:https://github.com/allure-framework/allure2

allure 安装完后,先来安装 allure 关于 pytest 的插件,顺带将 pytest 也安装了。

pip install pytest==5.3.5pip install allure-pytest==2.8.9pip install allure-python-commons==2.8.9

安装完后,可以先来使用一下。

找一个使用 Pytest 的项目,直接去 github 拉取 requests 库,它的 tests 目录写满了通过 pytest 构建的测试用例。

通过 pytest 运行 requests/tests 中的代码并通过 --alluredir 指定生成数据的文件夹,这些数据就是 allure 可读取的数据,通常为一堆 JSON 文件。

pytest requests/tests --alluredir=./allure-results

获得 JSON 文件数据后,可以通过 allure generate 命令来生成 HTML 测试报告界面。

allure generate allure-results -o allure-report --clean

通过上述命令,allure 会将测试报告生成到 allure-report 目录中,至此整个流程走通了一半。

接着来安装 Allure 在 Jenkins 中的插件。

进入 Jenkins 的插件管理界面,安装「Allure Jenkins Plugin」,此外为了更好的显示 HTML 测试报告,继续安装「HTML Publisher Plugin」。

「Allure Jenkins Plugin」安装完后,还需要进行配置,进入「系统设置」->「Global Tool Configuration」。

进行如下配置,From Maven Central 选择了当前最新版 2.13.1。

配置完后,将 Jenkins 重启,让 Jenkins 加载最新安装的插件。

Jenkins 插件安装完后,在 Jenkins 中创建 Freestyle project,Description 描述可以随便填写,在 Build 构建处,选择 Execute Shell,如果你是 windows,则选择 Execute Windows batch command。

因为我在 MacOS 下执行,所以选择 Execute Shell,输入如下 Shell 代码

!/bin/bashcd /Users/ayuliao/Desktop/workspace/CICDsource venv/bin/activatepytest requests/tests --alluredir "${WORKSPACE}/target/allure-results"exit 0

cd 进入相应的目录,然后通过 source 激活相应的 Python 虚拟环境,我只在该虚拟环境中安装了 pytest 库,随后正常使用 pytest 则可,此时依旧使用 pytest 来跑 requests/tests 中的测试代码,但 --alluredir 设置的路径非常有讲究

简单而言, --alluredir 必须为"${WORKSPACE}/target/allure-results",因为 Jenkins 通过插件调用 allure genera 命令时,传入的路径固定为${WORKSPACE}/target/allure-results

${WORKSPACE}是 Jenkins 内置的变量,表示「分配给构建作为工作空间的目录的绝对路径。」。

如果 --alluredir 为其他值,通过 Jenkins 构建项目时,会抛出allure-results does not exists,你可以在「https://github.com/jenkinsci/allure-plugin/issues/201」看见问题的具体细节。

此外,还需要配置 Post-build Actions 构建后的动作,这里也非常关键。

选择「Allure Report」,将 Results 与 Report Path 分别配置成target/allure-resultstarget/allure-report,这是固定的,不要看其注释说你可以随意配置。

上述配置之所以是固定的,需要看 Jenkins Job 中的 console output,jenkins 调用 allure generate 命令是固定的。

$ /Users/ayuliao/.jenkins/tools/ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstallation/allure/bin/allure generate "/Users/ayuliao/.jenkins/workspace/allures report/target/allure-results" -c -o "/Users/ayuliao/.jenkins/workspace/allures report/target/allure-report"

如果将 Results 与 Report Path 配置成其他值,会出现各种问题。

至此大功告成。

技巧

  • [1] Homebrew 提速下载软件:https://mirror.tuna.tsinghua.edu.cn/help/homebrew/  https://shockerli.net/post/homebrew-install-download-error/

  • [2] Jenkins 插件安装提速:https://cnblogs.com/hellxz/p/jenkins_install_plugins_faster.html

  • [3] 通过 URL 来操作 Jenkins:https://cnblogs.com/dzblog/p/6962810.html

如果有权限管理,则在HOME目录下还会有users目录。

从目录结构来看,和CruiseController非常相似。其中config.xml是Jenkins重要的配置文件。我们都知道Jenkins用于monitor多个build,而jobs这个目录无疑就是存储每个build相关信息的地方。

关于jenkins持续集成、目录结构、分布式架构原理及构建方面介绍