• 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开发环境中

  • 相关阅读:
    我的vimrc设置
    nginx
    选中
    vscode垂直选中列选中
    lsof
    bashrc和bash_profile
    centos安装tree命令
    linux查看磁盘大小df命令
    linux查看文件夹大小du命令
    git本地推送远程
  • 原文地址:https://www.cnblogs.com/brf-test/p/11918982.html
Copyright © 2020-2023  润新知