Jenkins+Pytest+Allure集成测试环境

1,447 阅读1分钟

内容简介

本文会介绍如何从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的安装方式参考:github.com/allure-fram…

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

pip install pytest==5.3.5
pip install allure-pytest==2.8.9
pip 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/bash
cd /Users/ayuliao/Desktop/workspace/CICD
source venv/bin/activate
pytest 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,你可以在「github.com/jenkinsci/a…

此外,还需要配置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配置成其他值,会出现各种问题。

至此大功告成。

技巧