jenkins构建中的除零错误
一. 除零错误(ZeroDivisionError)
今天在jenkins上运行接口自动化测试任务时,从控制台输出中看到了除零错误,大概是这样的

从上图中,通过分析,可以得出三个结论:
1. jenkins通过命令行执行任务时,其所在的位置是在jenkins中当前任务的工作空间下
2. 那么main.py中寻找测试用例时的os.getcwd(),得到的不是futureloan_API_framework目录,而是当前运行脚本的目录API_Auto_Test
3. 很有可能是因为找不到测试用例才发生除零错误,因为我们的代码用的是TestLoader类下的discover方法,它会匹配以test*开头的测试用例
来看代码,也印证了上述猜想
import unittest
import os
import time
from HTMLTestRunnerNew import HTMLTestRunner
from revise.futureloan_API_framework.Common.conf_dir import htmlreport_dir, testcases_dir
#实例化测试套件对象
suite = unittest.TestSuite()
#实例化TestLoader对象
loader = unittest.TestLoader()
#使用discover寻找当前目录下的所有测试用例,使用addTests将其放在测试套件下
suite.addTests(loader.discover(os.getcwd()))
#获取当前时间
now = time.strftime("%Y-%m-%d_%H-%M-%S")
#在当前目录下创建一个html文件
fs = open(htmlreport_dir + "/API Test Result_{0}.html".format(now), "wb")
#运行测试用例,生成测试报告
runner = HTMLTestRunner(stream=fs, title="API Test Report", tester="xiaozhai")
runner.run(suite)
二. 解决办法:
方法一: 采用配置目录路径的方法
在当前工程目录的Common目录下新建一个conf_dir.py的文件,利用os.path.abs(__file__)获得当前的目录路径,以及配置其他目录路径
import os
cur_dir = os.path.split(os.path.abspath(__file__))[0]
htmlreport_dir = cur_dir.replace("Common", "HtmlTestReport")
logs_dir = cur_dir.replace("Common", "Logs")
testcases_dir = cur_dir.replace("Common", "TestCases")
testdatas_dir = cur_dir.replace("Common", "TestDatas")
在main.py文件中引入conf_dir.py下的一些表示路径的变量
import unittest
import os
import time
from HTMLTestRunnerNew import HTMLTestRunner
from revise.futureloan_API_framework.Common.conf_dir import htmlreport_dir, testcases_dir
#实例化测试套件对象
suite = unittest.TestSuite()
#实例化TestLoader对象
loader = unittest.TestLoader()
#使用discover寻找当前目录下的所有测试用例,使用addTests将其放在测试套件下
suite.addTests(loader.discover(testcases_dir))
#获取当前时间
now = time.strftime("%Y-%m-%d_%H-%M-%S")
#在当前目录下创建一个html文件
fs = open(htmlreport_dir + "/API Test Result_{0}.html".format(now), "wb")
#运行测试用例,生成测试报告
runner = HTMLTestRunner(stream=fs, title="API Test Report", tester="xiaozhai")
runner.run(suite)
现在去jenkins立即构建,运行成功

方法二:在当前任务的配置中,找到构建,将构建命令修改如下
d: cd D:\python_workshop\python6\revise\futureloan_API_framework python main.py
这样不用改代码了,因为os.getcwd()表示的正是当前运行脚本所在的位置futureloan_API_framework目录,运行结果也是成功的

个人比较倾向于第一种方法,无论windows cmd命令怎么变,它的结果都是成功的,而第二种则必须在特定的目录下运行脚本,有一定的局限性
jenkins构建中的除零错误的更多相关文章
- Jenkins实战应用–Jenkins构建中tag的应用
Jenkins实战应用–Jenkins构建中tag的应用 文章目录[隐藏] *系列汇总* 1,缘起. 2,回滚功能. 1,添加mode选项. 2,再添加branch选项. 3,添加Git Parame ...
- mssql sqlserver避免sql脚本中出现除零错误的方法分享
摘自:http://www.maomao365.com/?p=6612 摘要:下文介绍sql server中,sql脚本避免出现除零错误的方法分享 在各种业务系统开发中,通常会遇到除零的错误,下文分享 ...
- [原]Jenkins(八)---jenkins构建项目报错时发送错误报告邮件
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...
- Jenkins——构建、集成中的问题
准备 Jekins 安装插件 MsBuild Plugin Team Foundation Server Plug-in 配置环境变量 我的电脑中设置环境变量,Path中添加msbuild的路 ...
- Jenkins 六: 构建中执行shell或者 windows的批处理程序
Shell/ bat Jenkins 可以在构建中执行shell命令或者windows的batch 命令. 1. 选择一个项目,点击“配置”. 2. 找到“构建” –> “增加构建步骤”.选择 ...
- 使用Jenkins构建持续集成环境
简介 Jenkins是一个开源的持续集成工具,提供了数百种插件供用户选择,能够完成整套持续集成环境的构建. 它具有如下的特点: 持续集成和持续发布 作为可扩展的自动服务器,Jenkins可以作为简单的 ...
- RF+Jenkins构建持续集成
引入RF是为了能够快速的开展自动化验收测试,Jenkins而一种持续集成工具,用于监控持续重复的工作,持续的软件版本发布/测试项目,而通过RF+Jenkins可以有利的对RF构建的接口项目进行持续集成 ...
- Gitlab自动触发Jenkins构建打包
一.目的 在部门的测试环境中,开发人员一旦向gitlab仓库提交成功代码,gitlab就会自动触发jenkins构建项目.当然在构建后还可以添加项目部署或者自动化测试的脚本.这里只针对测试环境. 二. ...
- 基于Jmeter+maven+Jenkins构建性能自动化测试平台
一.目的: 为能够将相关系统性能测试做为常规化测试任务执行,且可自动无人值守定时执行并输出性能测试结果报告及统计数据,因此基于Jmeter+maven+Jenkins构建了一套性能自动化测试平台 ...
随机推荐
- QTimeLine 控制动画(一步一步的往前变化,并在每次变化时都会发出一个frameChanged信号)
QTimeLine顾名思义表示一条时间线,即一个时间序列,该时间序列会按我们实现定义好的间隔一步一步的往前变化,并在每次变化时都会发出一个frameChanged()信号.所以,我们通常会使用该类来驱 ...
- Python位运算符
按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下: 下表中变量 a 为 60,b 为 13,二进制格式如下: a = 0011 1100 b = 0000 1101 ---- ...
- hibernate detached分离查询 与 抓取策略注意事项
1.detached在抓取策略为 jion显式左外连接查询情况下 会产生笛卡儿积现象 DetachedCriteria dc = DetachedCriteria.forClass(Topic.cla ...
- dplyr快速入门
RStudio Blog 介绍dplyr 包已发布 (Introducing dplyr), 此包将原本 plyr 包中的 ddply() 等函数进一步分离强化, 专注接受dataframe对象, 大 ...
- 1 TensorFlow入门笔记之基础架构
------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...
- PHP函数的创建
看代码 PHP函数的创建,包括参数,和其他的语言一样 <?php #PHP crate function function writeName($name) { echo 'Name is '. ...
- delphi winio 输入
var key:byte;//ASCII码 btScancode:DWord; //键码begin key:=VkKeyScan('b'); btScancode:= MapVirtualKey(ke ...
- Matplot相关(二)——统计图
Matplotlib:其能够支持所有的2D作图和部分3D作图.能通过交互环境做出印刷质量的图像. ————————缩写定义———————— import matplot.pyplot as plt — ...
- Bootstrap 简介二
什么是 Bootstrap? Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 历史 Bootstra ...
- Linux开发工具教程
今天把上个星期写的Linux开发工具相关的教程整理一下,方便阅读: 1.第一课 GCC入门: 2.第二课 GCC入门之静态库以及共享库: 3.第三课 Makefile文件的制作(上) : 4.第四课 ...