pytest+jenkins+allure 生成测试报告发送邮件
前言第一部分:Pycharm for Gitee1. pycharm安装gitee插件2. gitee关联本地Git快速设置— 如果你知道该怎么操作,直接使用下面的地址简易的命令行入门教程:3. Git关联远程仓库第二部分:Jenkins for Gitee(一)简介1. 目前支持特性:2. 计划中特性(二)插件安装(三)插件配置1. 添加Gitee链接配置2. 新建构建任务3. 任务全局配置4. 源码管理配置5. 触发器配置6. 构建后步骤配置7. 构建结果回评至Gitee8. 构建成功自动合并PR9. 新建Gitee项目WebHook10. 测试推送触发构建11. 测试PR触发构建(四)环境变量(五)打包或运行测试第三部分:jenkins构建APIAutomation项目1.基础环境配置2. 构建项目第四部分:采坑记录一. 本地测试通过,上传代码等到gitee服务器运行到jenkins主机,出现如下目录or路径不存在二. 本地测试,生成的报告单独在桌面直接用index打开数据无法加载,但是在IDE里可以三. 集成到jenkins上发现结果无数据
前言
本次集成示意图
解释:
代码来自IDE、SVN、GIT、xCopy 此处我们用的IDE commit代码到 git(State)缓存区状态
多人协同的话merge代码到git(State), 否则直接 push 代码到中央仓库 (此处我们用Gitee)
如果推送成功,程序根据预先设置的webhook进行飞书机器人提醒
jenkins有两种方式检测是否进行拉取代码进行构建
自带的post build插件,自动检检测到代码有合并 ,trigger拉取事件进行CICD流程
手工设置定时任务进行触发 ,即SchemeTask定时任务
构建成功,发送邮件到飞书邮箱
飞书邮箱里的URL地址链接打开链接到jenkins上关联的报告,报告能否打开取决于先前在jenkins上设置的权限认证,匿名用户配置具有查看Job 以及报告的权限
第一部分:Pycharm for Gitee
1. pycharm安装gitee插件
点击File
点击Settings...
弹出
点击Plugins
输入gitee,如下图
点击Search in repositories
弹出下图
点击Install(绿色的)
等待安装即可
然后到重新启动pycharm
看到上图的Checkout from Version Control下有Gitee
说明安装成功了
2. gitee关联本地Git
快速设置— 如果你知道该怎么操作,直接使用下面的地址
强烈建议所有的git仓库都有一个README
, LICENSE
, .gitignore
文件
Git入门?查看 帮助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何连接本站, 如何导入仓库
简易的命令行入门教程:
Git 全局设置:
git config --global user.name "Young"
git config --global user.email "vincentsys@yeah.net"
创建 git 仓库:
mkdir test
cd test
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/vincentsys/test.git
git push -u origin master
已有仓库 ?
cd existing_git_repo
git remote add origin https://gitee.com/vincentsys/test.git
git push -u origin master
3. Git关联远程仓库
一.本地安装GIT版本控制软件
二.配置Git,设置用户信息
git config --global user.name "Youngg"
git config --global user.email "vincentsys@yeah.net"
git config --list
获取Git配置信息
注意:git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
三.Git连接远程仓库Gitee
在本地根据配置账户(user.name)生成密钥
命令: ssh-keygen -t rsa -C "vincentsys@yeah.net"
在GitHub里配置密钥
登录GitHub账户,在SSH keys里添加sshkey(打开.ssh文件下的 id_rsa.pub文件把密钥复制到Gitee )
检验是否链接上了github
The authenticity of host 'github.com (192.30.252.131)' can't be establis
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
直接yes
连接成功!
四.本地远程仓库关联
在Gitee上创建仓库
本地创建仓库
本地仓库连接远程仓库
远程本地仓库同步
修改本地提交远程
@1.添加文件
@2.把文件添加到版本库
第一步 git add 0701.txt ,命令git add
告诉Git,把文件添加到仓库
第二步git commit -m 'first commit
命令git commit
告诉Git,把文件提交到仓库,
-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
@3.把本地推送到远程
此时已提交到远程
常遇问题
第二部分:Jenkins for Gitee
(一)简介
Gitee Jenkins Plugin 是Gitee基于 GitLab Plugin 开发的 Jenkins 插件。用于配置 Jenkins 触发器,接受Gitee平台发送的 WebHook 触发 Jenkins 进行自动化持续集成或持续部署,并可将构建状态反馈回Gitee平台。
1. 目前支持特性:
推送代码到Gitee时,由配置的 WebHook 触发 Jenkins 任务构建。
评论提交记录触发提交记录对应版本 Jenkins 任务构建
提交 Pull Request 到Gitee项目时,由配置的 WebHook 触发 Jenkins 任务构建,支持PR动作:新建,更新,接受,关闭,审查通过,测试通过。
支持 [ci-skip] 指令过滤 或者 [ci-build] 指令触发构建。
过滤已经构建的 Commit 版本,若是分支 Push,则相同分支Push才过滤,若是 PR,则是同一个PR才过滤。
按分支名过滤触发器。
正则表达式过滤可触发的分支。
设置 WebHook 验证密码。
构建后操作可配置 PR 触发的构建结果评论到Gitee对应的PR中。
构建后操作可配置 PR 触发的构建成功后可自动合并对应PR。
对于 PR 相关的所有事件,若 PR 代码冲突不可自动合并,则不触发构建;且若配置了评论到PR的功能,则评论到 PR 提示冲突。
PR 评论可通过 WebHook 触发构建(可用于 PR 触发构建失败是便于从Gitee平台评论重新触发构建)
支持配置 PR 不要求必须测试时过滤触发构建。(可用于不需测试则不构建部署测试环境)
支持相同 PR 触发构建时,取消进行中的未完成构建,进行当前构建(相同 PR 构建不排队,多个不同 PR 构建仍需排队)
2. 计划中特性
PR 审查并测试通过触发构建(可用户触发部署,且可配合自动合并 PR 的特性完善工作流。)
勾选触发方式自动添加WebHook至Gitee。
(二)插件安装
在线安装
前往 Manage Jenkins -> Manage Plugins -> Available
右侧 Filter 输入: Gitee
下方可选列表中勾选 Gitee(如列表中不存在 Gitee,则点击 Check now 更新插件列表)
点击 Download now and install after restart
手动安装
从 release 列表中进入最新发行版,下载对应的 XXX.hpi 文件
前往 Manage Jenkins -> Manage Plugins -> Advanced
Upload Plugin File 中选择刚才下载的 XXX.hpi 点击 Upload
后续页面中勾选 Restart Jenkins when installation is complete and no jobs are running
(三)插件配置
1. 添加Gitee链接配置
前往 Jenkins -> Manage Jenkins -> Configure System -> Gitee Configuration -> Gitee connections
在
Connection name
中输入Gitee
或者你想要的名字Gitee host URL
中输入Gitee完整 URL地址:https://gitee.com
(Gitee私有化客户输入部署的域名)Credentials
中如还未配置Gitee APIV5 私人令牌,点击Add
- >Jenkins
Domain
选择Global credentials
Kind
选择Gitee API Token
Scope
选择你需要的范围Gitee API Token
输入你的Gitee私人令牌,获取地址:https://gitee.com/profile/personal_access_tokens
ID
,Descripiton
中输入你想要的 ID 和描述即可。Credentials
选择配置好的 Gitee APIV5 Token点击
Advanced
,可配置是否忽略 SSL 错误(视您的Jenkins环境是否支持),并可设置链接测超时时间(视您的网络环境而定)点击
Test Connection
测试链接是否成功,如失败请检查以上 3,5,6 步骤。
配置成功后如图所示:
2. 新建构建任务
前往 Jenkins -> New Item , name 输入 'Gitee Test',选择 Freestyle project
保存即可创建构建项目。
3. 任务全局配置
任务全局配置中需要选择前一步中的Gitee链接。前往某个任务(如'Gitee Test')的 Configure -> General,Gitee connection 中选择前面所配置的Gitee链接,如图:
4. 源码管理配置
前往某个任务(如'Gitee Test')的 Configure -> Source Code Management 选项卡
点击 Git
输入你的仓库地址,例如
git@your.gitee.server:gitee_group/gitee_project.git
点击 Advanced 按钮, Name 字段中输入
origin
, Refspec 字段输入+refs/heads/*:refs/remotes/origin/* +refs/pull/*/MERGE:refs/pull/*/MERGE
,注意新版jenkins不再接受多条同时包含 * 通配符的refs描述,如只对push触发可写前半部分,如只对PR触发可只写后半段。具体可见下图:
凭据Credentials 中请输入 git 仓库 https 地址对应的 用户名密码凭据,或者 ssh 对应的 ssh key 凭据,注意 Gitee API Token 凭据不可用于源码管理的凭据,只用于 gitee 插件的 API 调用凭据。
Branch Specifier选项:
对于单仓库工作流输入:
origin/${giteeSourceBranch}
对于 PR 工作流输入:
pull/${giteePullRequestIid}/MERGE
Additional Behaviours选项:
对于单仓库工作流,如果你希望推送的分支构建前合并默认分支(发布的分支),可以做以下操作:
点击 Add 下拉框
选择 Merge before build
设置 Name of repository 为
origin
设置 Branch to merge to 为
${ReleaseBranch}
即您要合并的默认分支(发布分支)
对于 PR 工作流,Gitee服务端已经将 PR 的原分支和目标分支作了预合并,您可以直接构建,如果目标分支不是默认分支(发布分支),您也可以进行上诉构建前合并。
配置如图所示:
5. 触发器配置
前往任务配置的触发器构建: Configure -> Build Triggers 选项卡
Enabled Gitee triggers
勾选您所需要的构建触发规则,如Push Event
,Opened Merge Request Events
,勾选的事件会接受WebHook,触发构建。目前支持触发事件有:Push Events :推送代码事件
Commit Comment Events :评论提交记录事件
Opened Merge Request Events :提交 PR 事件
Updated Merge Request Events :更新 PR 事件
Accepted Merge Request Events :接受/合并 PR 事件
Closed Merge Request Events :关闭 PR 事件
Approved Pull Requests : 审查通过 PR 事件
Tested Pull Requests :测试通过 PR 事件
Build Instruction Filter
:None
: 无过滤[ci-skip] skip build
:commit message 或者 PR 说明包含[ci-skip]
时,跳过构建触发。
[ci-build] trigger build
:commit message 或者 PR 说明包含[ci-build]
时,触发构建。
Ignore last commit has build
该选项可以跳过已经构建过的 Commit 版本。Cancel incomplete build on same Pull Requests
该选项在 PR 触发构建时,会判断是否存在相同 PR 且未完成的构建,有则取消未完成构建,再进行当前构建。Ignore Pull Request conflicts
该选项在 PR 触发构建时,会根据 PR 冲突情况选择是否进行构建。Allowed branches
可以配置允许构建的分支,目前支持分支名和正则表达式的方式进行过滤。Secret Token for Gitee WebHook
该选项可以配置 WebHook 的密码,该密码需要与Gitee WebHook配置的密码一致方可触发构建。注意:若 PR 状态为不可自动合并,则不触发构建。
6. 构建后步骤配置
前往任务配置的构建后配置: Configure -> Post-build Actions 选项卡
7. 构建结果回评至Gitee
点击
Add post-build action
下拉框选择:Add note with build status on Gitee pull requests
Advanced
中可以配置:Add message only for failed builds :仅为构建失败回评到Gitee
自定义各状态的回评内容(内容可以引用 Jenkins 的环境变量,或者自定义的环境变量)
若开启该功能,还可将不可自动合并的状态回评至Gitee
8. 构建成功自动合并PR
点击 Add post-build action
下拉框选择:Accept Gitee pull request on success
9. 新建Gitee项目WebHook
进入源码管理配置中设置的Gitee项目中,进入 管理 -> WebHooks
添加 WebHook, URL 填写
触发器配置:Build when a change is pushed to Gitee. Gitee webhook URL
中所示 URL,如:: http://127.0.0.1:8080/jenkins/project/fu密码填写:触发器配置第 5 点中配置的 WebHook密码,不设密码可以不填
勾选 PUSH, Pull Request
10. 测试推送触发构建
Gitee的 WebHook 管理中选择勾选了PUSH的 WebHook 点击测试,观察 Jenkins 任务的构建状态
Gitee项目页面编辑一个文件提交,观察 Jenkins 任务的构建状态
11. 测试PR触发构建
Gitee的 WebHook 管理中选择勾选了 Pull Request 的 WebHook 点击测试,观察 Jenkins 任务的构建状态
在Gitee项目中新建一个Pull Request,观察 Jenkins 任务的构建状态
(四)环境变量
目前支持环境变量见以下函数,其中不同的 WebHook 触发可能导致有些变量为空,具体请安装插件 EnvInject Plugin,于构建中查看 Environment Variables
public Map<String, String> getBuildVariables() {
MapWrapper<String, String> variables = new MapWrapper<>(new HashMap<String, String>());
variables.put("giteeBranch", branch);
variables.put("giteeSourceBranch", sourceBranch);
variables.put("giteeActionType", actionType.name());
variables.put("giteeUserName", userName);
variables.put("giteeUserEmail", userEmail);
variables.put("giteeSourceRepoHomepage", sourceRepoHomepage);
variables.put("giteeSourceRepoName", sourceRepoName);
variables.put("giteeSourceNamespace", sourceNamespace);
variables.put("giteeSourceRepoURL", sourceRepoUrl);
variables.put("giteeSourceRepoSshUrl", sourceRepoSshUrl);
variables.put("giteeSourceRepoHttpUrl", sourceRepoHttpUrl);
variables.put("giteePullRequestTitle", pullRequestTitle);
variables.put("giteePullRequestDescription", pullRequestDescription);
variables.put("giteePullRequestId", pullRequestId == null ? "" : pullRequestId.toString());
variables.put("giteePullRequestIid", pullRequestIid == null ? "" : pullRequestIid.toString());
variables.put("giteePullRequestTargetProjectId", pullRequestTargetProjectId == null ? "" : pullRequestTargetProjectId.toString());
variables.put("giteePullRequestLastCommit", lastCommit);
variables.put("giteePushCreated", created ? "true" : "false");
variables.put("giteePushDeleted", deleted ? "true" : "false");
variables.putIfNotNull("giteePullRequestState", pullRequestState);
variables.putIfNotNull("giteeMergedByUser", mergedByUser);
variables.putIfNotNull("giteePullRequestAssignee", pullRequestAssignee);
variables.put("giteeTargetBranch", targetBranch);
variables.put("giteeTargetRepoName", targetRepoName);
variables.put("giteeTargetNamespace", targetNamespace);
variables.put("giteeTargetRepoSshUrl", targetRepoSshUrl);
variables.put("giteeTargetRepoHttpUrl", targetRepoHttpUrl);
variables.put("giteeBefore", before);
variables.put("giteeAfter", after);
variables.put("giteeBeforeCommitSha", before);
variables.put("giteeAfterCommitSha", after);
variables.put("giteeRef", ref);
variables.put("ref", ref);
variables.put("beforeSha", beforeSha);
variables.put("isTag", isTag);
variables.put("sha", sha);
variables.put("status", status);
variables.put("stages", stages);
variables.put("createdAt", createdAt);
variables.put("finishedAt", finishedAt);
variables.put("duration", buildDuration);
variables.put("jsonBody", jsonBody);
variables.put("noteBody", noteBody);
variables.putIfNotNull("giteeTriggerPhrase", triggerPhrase);
return variables;
}
(五)打包或运行测试
打包 hpi 文件在仓库目录中执行: mvn package
直接运行测试执行:mvn hpi:run
第三部分:jenkins构建APIAutomation项目
1.基础环境配置
安装allure-report插件
JDK配置
参考上一章jenkins关联jmeter自动化部署教程
git配置
参考上一章jenkins关联jmeter自动化部署教程
allure配置
Manage Jenkisn -> 全局工具配置 ,配置如下图所示
gitee配置
Manage Jenkins -> 系统配置,配置如下图所示
配置全局凭证:选择Gitee API令牌
Gitee API 令牌生成,登录gitee ->设置->私人令牌->生成
将如上生成的令牌粘贴进入测试如下所示成功
全局属性配置
Manage Jenkins -> 系统配置->全局属性,配置如下图所示
字符编码配置
Manage Jenkins -> 系统配置->全局属性
Mange Jenkins -> Manage Nodes and Clouds
配置jenkins 启动文件
添加如下内容:
-Dhudson.model.DirectoryBrowserSupport.CSP= -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
配置服务器环境变量
设置jenkins所在服务器环境变量,右键我的电脑→属性→高级系统设置→环境变量,添加
JAVA_TOOL_OPTIONS
CMD配置
chcp 65001
在命令行标题栏上点击右键,选择"属性"->"字体",将字体修改为True Type字体"Lucida Console"
2. 构建项目
源码管理
配置凭证
所有配置的凭证在首页均可查看
构建触发器
生成的webhook钩子程序复制生成的密码粘贴到Gitee 项目 ->管理 ->
构建
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
pytest -s -q --alluredir result
rem D:\user\local\allure-2.13.8\bin\allure.bat generate result -o report --clean
rem xcopy /y/c/h/r/s report C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\APIAutomatormation\report
exit 0
构建后操作:添加Allure报告
第三部分:jenkins构建APIAutomation项目点击高级
构建后操作:邮件通知
邮件模板完整内容:
成功填写完成,build无误后 jenkins上会看到如下结果:
邮件成功通知:
邮件模板完整内容如下:
<!DOCTYPE html>
<html lang="en">
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
测试邮件,无需回复!<br/>
各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br>
<h4><font color="red">allure报告在线查看or下载allure-report.zip用firefox离线查看,测试用例见附件</font></h4>
<h2>在线图表测试报告:<br/>
<a HREF="${PROJECT_URL}${BUILD_NUMBER}/allure">${PROJECT_URL}${BUILD_NUMBER}/allure</a><h2>
</tr>
<tr>
<td><br/>
<b><font color="#0B610B">项目描述:${JOB_DESCRIPTION}<br></font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>SVN 版本: ${SVN_REVISION}</li>
<li>触发原因: ${CAUSE}</li>
<li>构建状态: ${BUILD_STATUS}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
<li>系统allure测试报告:<a HREF="${PROJECT_URL}${BUILD_NUMBER}/allure">${PROJECT_URL}${BUILD_NUMBER}/allure</a><li>
</ul>
</td>
<tr>
<td>
<b><font color="#0B610B">构建日志 (最后 100行):</font></b>
<hr size="2" width="100%" align="center" />
</td>
</tr>
<tr>
<td>
<textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
</td>
</tr>
${JELLY_SCRIPT}
</table>
</body>
</html>
第四部分:采坑记录
一. 本地测试通过,上传代码等到gitee服务器运行到jenkins主机,出现如下目录or路径不存在
本地排查思路:
看到有 unucodeescape 错误,开始以为乱码导致,然后在每个文件头加字符编码配置
# _*_ coding:utf-8 _*_
之后发现不可用看到提示No such file or directory :在本机排查发现该文件在当前目录存在,但是就是为何找不到,怀疑是sys.path没有将当前项目路径添加到 PYTHONPATH当中,修改代码如下:
execFilePath = os.path.dirname(__file__) + '/testcase'
# 追加logging
# D:\user\workspace\py_workspace\APIAutomationFramework\testcase
# execfile = execFilePath + '/test_API.py'
# execfile = r'D:/user/workspace/py_workspace/APIAutomationFramework/testcase/test_API.py'
#此处修改为绝对路径
execfile = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'testcase', 'test_API.py')
python_install_cmd = os.path.join(sys.path[10], 'python.exe')
os.system("python " + execfile)之后发现仍然不可用,
定位代码logUtils类, 怀疑该行代码有问题
查看对应的源码解析,排查到
**os.path.dirname(__file__)**
引用相对路径的问题,查询结果如下python3 获取当前路径及os.path.dirname的使用
方法一:
import sys,os
os.getcwd()#然后就可以看见结果了方法二:
import os
os.path.dirname(os.path.realpath('__file__'))#注意:添加单引号python中的os.path.dirname(file)的使用
(1)当"print os.path.dirname(file)"所在脚本是以完整路径被运行的, 那么将输出该脚本所在的完整路径,比如:
python d:/pythonSrc/test/test.py
那么将输出 d:/pythonSrc/test
(2)当"print os.path.dirname(file)"所在脚本是以相对路径被运行的, 那么将输出空目录,比如:
python test.py
那么将输出空字符串
python中的os.path.dirname(path)
语法:os.path.dirname(path) 功能:去掉文件名,返回目录 如:
print(os.path.dirname('W:\Python_File\juan之购物车.py'))
#结果
#W:\Python_File
print(os.path.dirname('W:\Python_File'))
#结果
#W:\参考博客:https://www.cnblogs.com/yuehouse/p/12028368.html
然后并没有卵用, 再次排查
定位到可能是否由于fileConfig(p) 加载参数配置只能以windows环境下“\” 标识,查阅相关资料如下
首先,"/"左倾斜是正斜杠,""右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Windows 不限制,都可使用
(一)目录中的斜杠们
python读文件需要输入的目录参数,列出以下例子:
path = r"C:\Windows\temp\readme.txt"
path1 = r"c:\windows\temp\readme.txt"
path2 = "c:\windows\temp\readme.txt"
path3 = "c:/windows/temp/readme.txt"
打开文件函数open()中的参数可以是path也可以是path1、path2、path3。
path:""为字符串中的特殊字符,加上r后变为原始字符串,则不会对字符串中的"\t"、"\r" 进行字符串转义
path1:大小写不影响windows定位到文件
path2:用一个""取消第二个""的特殊转义作用,即为"\"
path3:用正斜杠做目录分隔符也可以转到对应目录,并且在python中path3的方式也省去了反斜杠\转义的烦恼
(二)正则表达式中的斜杠们
正则表达式匹配反斜杠"",为什么是"\\"或是 r"\"呢?
因为在正则表达式中\为特殊符号,为了取消它在正则表达式中的特殊意义需要加一个\就变成了\,但是问题又来了,\也是字符串中的特殊字符,所以又要分别对两个\取消其特殊意义,即为\\。Python中有一个原始字符串操作符,用于那些字符串中出现特殊字符,在原始字符串中,没有转义字符和不能打印的字符。这样就可以取消了\在字符串中的转义功能,即r"\"。
然而仍然没有卵用 ,
最后排查到最后一行代码:
定位该行问题发现,该文件只有配置文件引用,在logging.conf 下
的确由于该路径被找不到,目前很疑惑根本原因暂未找到同样是windows操作环境,换台机器就无法操作,很让人疑惑,总之更改为项目路径好使
二. 本地测试,生成的报告单独在桌面直接用index打开数据无法加载,但是在IDE里可以
显示如下情况:
处于loading状态,说明有数据只是没法加载出来
问题解决
其实在allure-report下index.html文件是不能直接打开的,出现页面都是loading的情况,这是因为直接allure报告用浏览器是打不开的,需要用allure命令渲染之后打开才能展示效果(allure常识)。
allure使用了两种方式来渲染页面。分别是 allure open 和 allure serve。前者用于在本地渲染和查看结果,后者用于在本地渲染后对外展示结果。这里我们使用allure open。运行命令
allure open allure-report目录
即可自动打开浏览器展示渲染好的结果。这里的allure-report为allure generate生成的结果所在目录。
三. 集成到jenkins上发现结果无数据
这里有两两种场景:1. 一种是无数据 2. 一种是有数据只不过处于loading状态加载不出来
目前处于第1种结果:具体表现形式如下:
排查可能原因:
首先明确 pytest生成的数据默认在allure-result目录下,这里我更改了result目录,通过本地的IDE和cmd命令行发现没有问题,那么只能是jenkins windows Execute shell命令行有问题
命令行内容如下
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
python run_main.py
exit 0之后发现,是压根''python run_main.py '' 压根就没有执行,估计是jenkins内部没有识别python变量,手工添加python执行路径:
$PYTHON_PATH\python.exe run_main.py
发现执行到一半又不能执行了:
定位到如下位置:
发现代码里又引用了相对路径,再次添加绝对路径进行执行该命令,console控制乱码错误显示如下:
估计问题不在这里,再次查询Google, 查到原来jenkins集成allure执行的时候是不需要手工执行生成报告的,查看会自动帮你做
再次更改执行命令如下:
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
pytest -s -q --alluredir result
D:\user\local\allure-2.13.8\bin\allure.bat generate result -o report --clean
exit 0运行之后发现仍然没有数据,并且
pytest -s -q --alluredir result
这行命令似乎没有执行 ,发现pytest找不到该命令,实际path已经配置了python环境变量 , 手工将pytest所在目录也添加到path环境变量中,显示如下:终于pytest可以执行了,但是report没有结果数据,查看jenkins console发现 取的report是工作空间目录的结果report数据 , 于是手工复制生成的报告拷贝到jenkins工作空间当中
命令行变为如下
xcopy /y /c /h /r /s APIAutomatormation/report C:\Windows\System32\config\systemprofile\AppData\Local\Jenkins\.jenkins\workspace\APIAutomatormation\report
然而很坑爹并没有卵用
再次查看result路径,发现其实生成了 result是有数据的,只不过没有体现在report里,原来jenkins 不用你手工生成报告,插件会自动帮你生成,最后一步取消 ;完整结果显示如下:
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
PATH=$PATH;D:\user\local\Python\Python38-32\Scripts
xcopy /y /c /h /r /s APIAutomatormation D:\user\workspace\py_workspace\APIAutomatormation\
cd /d D:/user/workspace/py_workspace/APIAutomatormation
pytest -s -q --alluredir result
exit 0完美解决
最后构建后操作生成报告的地方一定要注意 result 和 report填写路径要正确,否则数据仍然不会展示的
Ending....
pytest+jenkins+allure 生成测试报告发送邮件的更多相关文章
- pytest(11)-Allure生成测试报告(一)
Allure是一个开源的测试报告生成框架,提供了测试报告定制化功能,相较于我们之前使用过pytest-html插件生成的html格式的测试报告,通过Allure生成的报告更加规范.清晰.美观. pyt ...
- python + pytest + allure生成测试报告
pytest结合allure生成测试报告 环境搭建 要安装java环境,版本要是jdk1.8的,配置好java环境变量,不然输入allure命令会报错,JAVA_HOME环境,自行配置 安装allur ...
- Pytest测试框架(五):pytest + allure生成测试报告
Allure 是一款轻量级.支持多语言的开源自动化测试报告生成框架,由Java语言开发,可以集成到 Jenkins. pytest 测试框架支持Allure 报告生成. pytest也可以生成juni ...
- 【Python】使用Pytest集成Allure生成漂亮的图形测试报告
前言 大概两个月前写过一篇<[测试设计]使用jenkins 插件Allure生成漂亮的自动化测试报告>的博客,但是其实Allure首先是一个可以独立运行的测试报告生成框架,然后才有了Jen ...
- Python&Selenium&pytest借助allure生成自动化测试报告
一.摘要 本篇博文将介绍Python和Selenium进行自动化测试时,如何借助allure生成自动化测试报告 二.环境配置 首先python环境中安装pytest和pytest_allure_ada ...
- pytest + allure 生成测试报告
pytest测试样例规则:测试文件以test_开头(以_test结尾也可以)测试类以Test开头,并且不能带有 init 方法测试函数以test_开头断言使用基本的assert即可 ubuntu 安装 ...
- python自动化之使用allure生成测试报告
Allure测试报告框架帮助你轻松实现"高大上"报告展示.本文通过示例演示如何从0到1集成Allure测试框架.重点展示了如何将Allure集成到已有的自动化测试工程中.以及如何实 ...
- Pytest+allure生成测试报告
1.Allure.zip包的下载地址: https://github.com/allure-framework/allure2 在跳转页面选择一个allure.zip包的版本下载 若以上方法无法下载z ...
- Pytest使用pytest-html和allure生成测试报告
Pytest-html 1.安装命令pip3 install pytest-html,如下图: 执⾏后,会在当前⽬录下⽣成 ⼀个report.html的⽂件,打开后会展示详细的测试报告,执行该命令py ...
随机推荐
- 鸟哥的linux私房菜——第六章学习(Linux文件与目录管理)
******************第六章学习****************** 1.[文件与目录管理] 在所有目录下面都会存在的两个目录,分别是 "." 与 "..& ...
- JS编程练习:将目标节点内部的子节点逆序
将目标节点内部的子节点逆序 1 <body> 2 <div> 3 <p></p> 4 <span></span> 5 <e ...
- windows信息收集
导语:介绍 特权升级总是被归结为适当的枚举.但要完成适当的枚举,你需要知道要检查和查找的内容.这通常需要伴随着经验的丰富而对系统非常熟悉.起初特权升级看起来像是一项艰巨的任务,但过了一段时间,你就 ...
- Watch the Wifi: Visually Stunning Look at the Digital World Invading Cities (video)
http://singularityhub.com/2011/04/01/watch-the-wifi-visually-stunning-look-at-the-digital-world-inva ...
- JavaScript for, for...in, for...of, for-await...of difference All In One
JavaScript for, for...in, for...of, for-await...of difference All In One for for...in for...of for-a ...
- Bearer Token & OAuth 2.0
Bearer Token & OAuth 2.0 access token & refresh token http://localhost:8080/#/login HTTP Aut ...
- Professional JavaScript for Web Developers 4th Edition
Professional JavaScript for Web Developers 4th Edition learning notes / 学习笔记 https://github.com/xgqf ...
- HaiYaaaa & 嗨呀
HaiYaaaa & 嗨呀 海呀... 嗨呀... refs Uncle Roger https://www.youtube.com/results?search_query=uncle+Ro ...
- chrome device remote debug
chrome device remote debug chrome://inspect/#devices chrome inspect devices Android chrome MIDI / MT ...
- import script module
import script module .mjs <script type="module"> import {addTextToBody} from './util ...