内容简介
本文会介绍如何从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安装完后,先来安装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,你可以在「https://github.com/jenkinsci/...」看见问题的具体细节。
此外,还需要配置Post-build Actions构建后的动作,这里也非常关键。
选择「Allure Report」,将Results与Report Path分别配置成target/allure-results与target/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配置成其他值,会出现各种问题。
至此大功告成。
技巧