1. 程式人生 > >jenkins構建中的除零錯誤

jenkins構建中的除零錯誤

ace 局限 con get 它的 unittest discover 接口 為我

一. 除零錯誤(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構建中的除零錯誤