今天在开发一个测试自动化脚本的时候,出现了一个BUG卡的蛮久的。使用的框架是unittest;这个框架可以自动执行脚本里的方法,下面看代码(这个代码是正常没问题的)

import unittest
import BeautifulReport
from selenium import webdriver
class Test(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Edge()
        self.driver.get('https://www.baidu.com/')


    def test_01(self):
        '''测试用例01'''
        self.driver.find_element_by_id('kw').send_keys('1111')


    def test_02(self):
        '''测试用例02'''
        self.driver.find_element_by_id('kw').send_keys('222')

    def test_03(self):
        '''测试用例03'''
        self.driver.find_element_by_id('kw').send_keys('333')

    def tearDown(self):
        self.driver.quit()

if __name__ == '__main__':
    
    testunit = unittest.TestSuite()
    # 加载用例
    #挂载类并执行里面所有的方法
    testunit.addTests(unittest.TestLoader().loadTestsFromTestCase(Test))
    result = BeautifulReport.BeautifulReport(testunit)
    result.report(filename='report', description='测试报告', log_path=None)

由于本人以前用的是java类语言,所以对缩进没什么概念,导致

if __name__ == '__main__':
    testunit = unittest.TestSuite()
    # 加载用例
    testunit.addTests(unittest.TestLoader().loadTestsFromTestCase(Test))
    result = BeautifulReport.BeautifulReport(testunit)
    result.report(filename='report', description='测试报告', log_path=None)

语句缩进和"def tearDown(self):"一样,导致这个if语句的作用域是在tearDown中,从而导致运行这个自动化脚本闪退。
解决方案把"if name == '__main__': 。。。。。"语句和class类同级就行了。
顺便说一下我的调试方法:1.用python的logging方法打印信息;2.用debugger打断点来进行调试。
总结:对于java,js,c,c++转过来学python的一定要注意缩进问题!还有点复制粘贴代码需谨慎。


阳哥
14 声望0 粉丝

一个code爱好者,一个户外运动的爱好者,一个喜欢音乐的爱好者。