zoukankan      html  css  js  c++  java
  • 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_workshoppython6
    evisefutureloan_API_framework
    python main.py

    这样不用改代码了,因为os.getcwd()表示的正是当前运行脚本所在的位置futureloan_API_framework目录,运行结果也是成功的

    个人比较倾向于第一种方法,无论windows cmd命令怎么变,它的结果都是成功的,而第二种则必须在特定的目录下运行脚本,有一定的局限性

  • 相关阅读:
    数字化工厂仿真系统-易景空间数字孪生工厂
    会议小程序-智能会议助手在会务系统中的优势
    商场室内地图制作-商场导航-智慧商业综合体
    室内定位室内导航到底能带来什么?
    医院导航系统-智慧医院室内导航-院内导航系统
    室内地图制作-首款实时室内绘制室内地图-3D室内地图
    城市综合三维管网管理-城市三维GIS管线系统-易景地图三维管线地图制作平台
    如何制作好看的室内地图-室内电子地图-在线制作室内地图
    jQuery ui中sortable draggable droppable的使用
    综合CSS3 transition、transform、animation写的一个动画导航
  • 原文地址:https://www.cnblogs.com/my_captain/p/9352247.html
Copyright © 2011-2022 走看看