• unittest


    1、用一段代码测试另一段代码,基本写法;

    import unittest
    from unittest import TestCase
    
    #写一个待测函数
    def add(a,b):
        return a+b
    
    class AddTest(unittest.TestCase):  #继承
    
        def test_add_normal(self):    #以test开头
            result = add(1,2)         #调用
            self.assertEqual(3,result)    #断言
    
        def test_add_error(self):
            er = 0
            result= add(1,2)
            self.assertEqual(er,result,msg="'预期结果%s,实际结果%s' %(result,er)")
    
    #执行第一种方式:运行当前python文件下所有以test开头的的所有用例
    unittest.main()
    
    #执行第二种方式-执行单条测试用例
    suite = unittest.TestSuite()
    suite.addTest(AddTest('test_add_normal'))
    
    #执行第二种方式-执行所有测试用例
    suite = unittest.makeSuite(AddTest)
    
    #执行
    runner = unittest.TextTestRunner()
    runner.run(suite)

    2、生成测试报告,用HTMLTestRunner;

    import HTMLTestRunner

    suite = unittest.makeSuite(AddTest) runner = unittest.TextTestRunner() f = open('测试报告1.html','wb') runner = HTMLTestRunner.HTMLTestRunner(f,title='测试报告1',description='add函数测试报告') runner.run(suite) f.close()

     3、生成测试报告,用nnreport,nnreport是牛牛在BeautifulReport模块的基础上改进的

    import unittest
    from unittest import TestCase
    import nnreport
    
    #写一个待测函数
    def add(a,b):
        return a+b
    
    class AddTest(unittest.TestCase):  #继承
    
        def test_add_normal(self):#以test开头
            '''正常情况'''        #用例描述,会提现在测试报告上
            result = add(1,2)         #调用
            self.assertEqual(3,result)    #断言
    
        def test_add_error(self):
            '''异常情况'''
            er = 0
            result= add(1,2)
            self.assertEqual(er,result,msg="'预期结果%s,实际结果%s' %(result,er)")
    
    suite = unittest.makeSuite(AddTest)
    runner = nnreport.BeautifulReport(suite)
    runner.report(description='测试报告2',filename='add测试报告',log_path=r'C:UserslenovoDesktop')

     4、参数化

    import unittest
    import requests
    import os
    import parameterized
    
    class GetData:       #从文件中读取参数
        @staticmethod
        def read_data_to_file(filename):
            data = []
            if os.path.exists(filename):
                with open(filename,'r',encoding='utf-8') as fr:
                    for line in fr:
                        d1 = line.strip().split(',')  #每行分隔完之后变成一个数组
                        data.append(d1)
            else:
                raise FileNotFoundError('参数化文件找不到')
            return data
    
    class Req_test:
        url = 'http://api.nnzhp.cn/api/user/stu_info'
    
        def test_singel(self,name,age):    #直接传参
            data = {'stu_name':name,'age':age}
            req = requests.get(self.url,data)
            return req.json()
    
        @parameterized.parameterized.expand(         #参数以列表的方式传入
            [
                ['xiaohei',10],
                ['xiaobai',15]
            ]
        )
        def test_more(self, name, age):  # 从列表中循环读取参数传入
            data = {'stu_name': name, 'age': age}
            req = requests.get(self.url, data)
            return req.json()
    
        @parameterized.parameterized.expand(GetData.read_data_to_file('stu_info.txt'))   #从文件中读取
        def test_more(self, name, age):
            data = {'stu_name': name, 'age': age}
            req = requests.get(self.url, data)
            return req.json()

    5、查找测试用例

    import unittest
    suite = unittest.defaultTestLoader.discover('cases','*.py')  # *查找cases下所有的python文件作为测试用例执行,默认查找以test开头的

     6、TestCase中测试用例执行顺序:

    import unittest
    class AddTest(unittest.TestCase): def setUp(self) -> None: #每条用例运行前都会执行 print('setup1') def tearDown(self) -> None: #每条用例执行后都会执行(例如清缓存) print('teardown1') @classmethod #最先开始执行 def setUpClass(cls) -> None: print('setup2') @classmethod #最后执行 def tearDownClass(cls) -> None: print('teardown2')
    ###普通以test开头的方法,默认是根据ASCII码的顺序加载测试用例,即按名称排序:数字与字母的顺序为:0-9,A-Z,a-z
    def test_a(self): pass def test_b(self): pass
  • 相关阅读:
    349. Intersection of Two Arrays
    346. Moving Average from Data Stream
    345. Reverse Vowels of a String
    344. Reverse String
    342. Power of Four
    POJ2823 Sliding Window
    《STL源码剖析》笔记
    [jobdu]扑克牌顺子
    [jobdu]第一个只出现一次的字符
    [jobdu]包含min函数的栈
  • 原文地址:https://www.cnblogs.com/whcp855/p/13178597.html
Copyright © 2020-2023  润新知