最近在学习python中的单元测试框架unittset,最后一步需要利用HTMLTestRunner 生成一个测试报告。但是整个程序执行完,代码无报错,html测试报告却没有生成。百度网上资料,借鉴各网友的解决方法,最后成功解决该问题。现将解决思路分析如下:

1.问题描述

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import unittest
from selenium import webdriver
import HTMLTestRunner

class TestDiv(unittest.TestCase):

    def setUp(cls):
        cls.driver=webdriver.Chrome()
        cls.driver.maximize_window()
        cls.driver.implicitly_wait(30)
        cls.driver.get('https://www.baidu.com')

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

    def test_baidu_news(self):
        self.assertTrue(self.driver.find_element_by_id('kw').is_enabled())

if __name__=='__main__':
    suite=unittest.TestLoader().loadTestsFromTestCase(TestDiv)
    runner=HTMLTestRunner.HTMLTestRunner(
        stream=open('testReport.html','wb'),
        title='TestReport',
        description='测试报告详细信息'
    )
    runner.run(suite)
    print('main函数测试')

上面没有生成测试报告,很可能是生成自动测试报告的那部分if语句(主函数)的代码没有执行,然后添加了一句打印来测试,果然,没有执行print语句。翻阅资料发现,pycharm执行py文件,有几种方式:
a.unittest框架
b.pytest框架
c.默认
d.等等

其实我们认真观察下pycharm的几处run,会发现不同地方的run原来是利用不同的方式或框架执行该程序。如果是用unittest框架执行,那就不会执行我们代码中的最后一部分主函数,主函数中的打印信息也出不来,即主函数中的自动生成报告也就执行不了。

2.解决方法,将pycharm中利用unittest框架执行的改为利用原python执行

a.首先点击run中的Configurations,再选中python tests下面的程序,点击"—"符号,选择移除。

b.再打开setting设置,选择Python Integrated Tools,此处的testing选择unittest,再保存。

3.最后再你的程序代码执行run时,选择不带unittest框架的执行就好,就能顺利生成测试报告。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐