Python-单元测试 unittest & HTMLTestRunner模块产生的测试报告

 1、单元测试:

——开发程序的人测已经已经写好的代码。

  • unittest框架,执行的顺序是按照方法名的字母来排序的

  • setUpClass方法是最开始执行的,只会执行一次

  • tearDownClass是最后执行的,只会执行一次

  • setUp方法是在每个测试用例执行前会执行

  • tearDown方法是在每个用例执行后会执行

import unittest

def add(a, b):
    return a + b

# 运行的顺序是按照函数名的字母排序的
class AddTest(unittest.TestCase):  # 继承unittest
    def setUp(self):
        #每条用例运行之前都会执行它
        print('我是set up方法')

    def tearDown(self):
        # 每条用例运行完之后都会执行它
        print('我是tearDown方法')

    @classmethod
    def setUpClass(cls):  # 最先开始执行的,如:大多数用例需要统一执行操作时、操作时先备份下数据
        print('我是setupclass方法')

    @classmethod
    def tearDownClass(cls):  # 最后执行的
        print('我是tearDownclass方法')

    def test_add_normal(self):
        print('add_normal')
        result = add(1, 4)
        self.assertEqual(5, result)  # 预期结果,实际结果

    def test_add_error(self):
        print('add_error')
        result = add(1, 1)
        yq = 1
        self.assertEqual(yq, result, 'add测试结果不通过,预计结果为%s,实际结果为%s' % (yq, result))

def test_a(self):
    print('a')

def test_b(self):
    print('b')

unittest.main()  # 运行当前python文件中的所用用例;如果要当作正常的函数方法来执行,需要加上unittest.main() 

assert表达式

——断言,正确就会通过,错误了就会报错AssertionError

  • 返回值是正确的
def add(a,b):
    return a+b

result = add(2,3)
assert result==5

#正确的结果:不返回任何值,直接通过
  • 返回值是错误的
def add(a,b):
    return a+b

result = add(2,3)
assert result==5  # 也可以这样写assert 'a' in result

#结果:
Traceback (most recent call last):
  File "E:/xb_python/day5/单元测试.py", line 5, in <module>
    assert result==6
AssertionError

2、产生测试报告

2.1 HTMLTestRunner

下载HTMLTestRunner.py放到python的环境变量里

import unittest
import HTMLTestRunner
import nnreport

class TestLogin(unittest.TestCase):
    def test_login_normal(self):
        '''正常登录'''
        self.assertEqual(1,1)

    def test_login_black_list(self):
        '''黑名单登录'''
        self.assertTrue(False,'黑名单登录运行失败')

    def test_login_exit(self):
        '''注销用户登录'''
        self.assertNotIn(1,[1,2,3],'这个是notin的')

    def test_login_max_count(self):
        '''达到最大错误次数登录'''
        self.assertNotEqual(1,2,'这个是不相等的')

# suite = unittest.TestSuite()#测试集合,手动一个个的把测试用例加入到测试集合中
 # suite.addTest(TestLogin('test_login_normal'))#加一个测试用例
suite = unittest.makeSuite(TestLogin)#将整个测试用例都放进集合中

#HTMLTestRunner
f = open('测试报告.html','wb')
runner = HTMLTestRunner.HTMLTestRunner(f,title='登录接口测试报告',description='这个是登录接口的测试报告')
#test_suite= unittest.makeSuite(AddTest) #使用makeSuite就是把自动把AddTest类里面遍历全都加到test_suite里面
runner.run(suite) #传一个测试集合进来,来运行所有的测试集合
f.close()

* 执行时,不要以unittest方式来执行,直接以运行普通模块的方式来运行;写了unittest.main(),需要注释掉,要不然不会产生报告

测试报告如何打开:

1.选中文件--右键--Copy Path...--拷贝路径--放到浏览器中打开

2.双击测试报告--在测试报告的html脚本中移动鼠标--会弹出浏览器的选项--选择对应的浏览器打开

执行的测试报告如图所示:

2.2 nnreport

pip install nnreport

import unittest
import HTMLTestRunner
import nnreport

class TestLogin(unittest.TestCase):
    def test_login_normal(self):
        '''正常登录''' #加上这个注释,产生的测试报告【描述】栏就会显示,不注释就会显示null
        self.assertEqual(1,1)

    def test_login_black_list(self):
        '''黑名单登录'''
        self.assertTrue(False,'黑名单登录运行失败')

    def test_login_exit(self):
        '''注销用户登录'''
        self.assertNotIn(1,[1,2,3],'这个是notin的')

    def test_login_max_count(self):
        '''达到最大错误次数登录'''
        self.assertNotEqual(1,2,'这个是不相等的')

# suite = unittest.TestSuite()#测试集合,手动一个个的把测试用例加入到测试集合中
 # suite.addTest(TestLogin('test_login_normal'))#加一个测试用例
suite = unittest.makeSuite(TestLogin)#将整个测试用例都放进集合中

#BeautifulReport
runner = nnreport.BeautifulReport(suite)
runner.report(description='登录接口测试报告8.15',
              filename='login_report.html') #不写后缀:html也可以,也会直接加上
              #log_path='D:\')#描述,文件名,指定路径

测试报告如图所示:


 注意:

  • 在运行时,如若选择如下图运行,会正常执行,但是不会产生测试报告——单独测试一个用例可使用

  • 想要产生测试报告,如图选择就可以了

  • 测试用例的函数名字必须要以test开头,否则不认为是一个测试用例

 def test_add_error(self):
        print("add_error")

PyCharm中导入HTMLTestRunner模块教程

1、先下载HTMLTestRunner.py文件

2、导入HTMLTestRunner.py文件到本地

将HTMLTestRunner.py拷贝到python安装目录的Libsite-packages下,这里需要说明一下我使用的python3的环境,比如我的python安装目录为:D:python,那么应该拷贝到D:pythonLibsite-packages目录下,注意不要搞错位置了

3、重新启动PyCharm

在需要用到的py文件中,使用import HTMLTestRunner语句即可将HTMLTestRunner模块导入到PyCharm开发环境中

原文地址:https://www.cnblogs.com/brf-test/p/11918982.html