一. 除零错误(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构建中的除零错误的更多相关文章

  1. Jenkins实战应用–Jenkins构建中tag的应用

    Jenkins实战应用–Jenkins构建中tag的应用 文章目录[隐藏] *系列汇总* 1,缘起. 2,回滚功能. 1,添加mode选项. 2,再添加branch选项. 3,添加Git Parame ...

  2. mssql sqlserver避免sql脚本中出现除零错误的方法分享

    摘自:http://www.maomao365.com/?p=6612 摘要:下文介绍sql server中,sql脚本避免出现除零错误的方法分享 在各种业务系统开发中,通常会遇到除零的错误,下文分享 ...

  3. [原]Jenkins(八)---jenkins构建项目报错时发送错误报告邮件

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...

  4. Jenkins——构建、集成中的问题

      准备 Jekins   安装插件 MsBuild Plugin Team Foundation Server Plug-in 配置环境变量 我的电脑中设置环境变量,Path中添加msbuild的路 ...

  5. Jenkins 六: 构建中执行shell或者 windows的批处理程序

    Shell/ bat Jenkins 可以在构建中执行shell命令或者windows的batch 命令. 1. 选择一个项目,点击“配置”. 2. 找到“构建” –> “增加构建步骤”.选择 ...

  6. 使用Jenkins构建持续集成环境

    简介 Jenkins是一个开源的持续集成工具,提供了数百种插件供用户选择,能够完成整套持续集成环境的构建. 它具有如下的特点: 持续集成和持续发布 作为可扩展的自动服务器,Jenkins可以作为简单的 ...

  7. RF+Jenkins构建持续集成

    引入RF是为了能够快速的开展自动化验收测试,Jenkins而一种持续集成工具,用于监控持续重复的工作,持续的软件版本发布/测试项目,而通过RF+Jenkins可以有利的对RF构建的接口项目进行持续集成 ...

  8. Gitlab自动触发Jenkins构建打包

    一.目的 在部门的测试环境中,开发人员一旦向gitlab仓库提交成功代码,gitlab就会自动触发jenkins构建项目.当然在构建后还可以添加项目部署或者自动化测试的脚本.这里只针对测试环境. 二. ...

  9. 基于Jmeter+maven+Jenkins构建性能自动化测试平台

      一.目的: 为能够将相关系统性能测试做为常规化测试任务执行,且可自动无人值守定时执行并输出性能测试结果报告及统计数据,因此基于Jmeter+maven+Jenkins构建了一套性能自动化测试平台 ...

随机推荐

  1. cookies与session

    一.cookies 本质:浏览器端保存的键值对 方便客户按照自己的习惯操作页面或软件,例如:用户验证,登陆界面,右侧菜单隐藏,控制页面列表显示条数... cookies是由服务端写在浏览器端,以后每次 ...

  2. plotly绘制直方图示例

    计算数值出现的次数“ import cufflinks as cf cf.go_offline() import numpy as np import pandas as pd set_slippag ...

  3. Virtualbox报错------>make sure the kernel module has been loaded successfully

    错误描述 很久没有用virtualbox了,今天打算在virtualbox上安装一个Ubuntu系统的时候,新建好Ubuntu后启动的时候,直接报错: Cannot access the kernel ...

  4. 我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密

    前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密 ...

  5. Oracle 11g数据库详解(2)

    FAILED_LOGIN_ATTEMPTS 用于指定连续登陆失败的最大次数 达到最大次数后,用户会被锁定,登陆时提示ORA-28000 UNLIMITED为不限制 精确无误差 是 实时 PASSWOR ...

  6. 在windows上搭建redis集群

    一 所需软件 Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb 二 安装配置redis redis下载地址   ...

  7. 关于C# yield 你会使用吗?

    假设有这样一个需求:在一个数据源(下面代码arry)中把其中大于4的数据取出来遍历到前台,怎么做?(不使用linq) , , , , , , , , , }; 第一种情况:  不使用yield的情况下 ...

  8. Django中间件(含Django运行周期流程图)

    Django中的中间件(含Django完整生命周期图) Django中间件简介 django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,djang ...

  9. subprocess和struct模块

    subprocess import subprocess obj = subprocess.Popen('dir',shell=True, stdout=subprocess.PIPE, stderr ...

  10. 关于python中的查询数据库内容中用到的fetchone()函数和fetchall()函数(转)还有fetchmany()

    最近在用python操作mysql数据库时,碰到了下面这两个函数,标记一下: fetchone() : 返回单个的元组,也就是一条记录(row),如果没有结果 则返回 None fetchall() ...