• unittest自动化测试框架


    unittest自动化测试框架

    1.单元测试框架Unittest简介

    单元测试:指的是在软件开发当中,对程序的最小单元(函数,方法)进行测试的过程。 unittest不仅可以用于单元测试,还可以用于自动化测试用例的开发和执行。组织执行自动 化测试用例。并且提供一些丰富的断言方法,判断用例是否通过,最终能够生成测试报告。

    2.基本使用

    2.1 基于Python的单元测试框架有哪些

    框架名称unittestpytest
    难易程度更简单,容易上手市场份额会更多
    使用规则1.新建一个类,必须继承unittest.TestCase(耦合)
    2.导入unitttest模块。Alt+Enter
    3.测试用例必须以test_开头。
    1.测试文件必须test_开头或者_test结尾。(非耦合)
    2.测试类名必须Test开头
    3.测试用例必须以test_开头
    夹具的差异setUp/tearDown 在每个用例的前后执行
    setUpClass/tearDownClass 在每个类的前后执行。
    setup/teardown 在每个用例的前后执行
    setup_class/teardown_class 在每个类的前后执行。
    断言的差异self.assertEqual()python原生的assert
    失败用例重跑差异没有支持
    参数化差异ddt@pytest.mark.parametrize()

    2.2 单元测试框架的作用

    1.找到测试用例。根据他们的默认的测试用例的规则。(原理,底层。BAT。) 
    2.执行测试用例。 
    3.判断测试用例的结果。 
    4.生成测试报告。 
    
    • 1
    • 2
    • 3
    • 4

    2.3 unittest重要组件

    TestCase测试用例:

    TestSuite测试套件: 整理测试用例,形成一个集合。

    TestLoader测试加载器: 加载测试用例套件或者测试用例。

    TestFixtrue测试固件

    TestRunner测试运行器:运行测试用例。

    2.4 unittest如何运行测试用例

    unittest的运行方式有两种:

    **1.命令行的运行方式。(unittest默认的执行方式) **

    python -m unittest test_api.py 
    python -m unittest test_api.TestApi 
    python -m unittest test_api.TestApi.test_baili 
    python -m unittest -v test_api.py 
    python -m unittest -v test_api.py -k *_baili 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    python -m的意思就是以命令行的方式运行测试用例。

    unitttest -v 表示以啰嗦的方式,详细的方式展示测试结果。

    -k表示通过通配符匹配的方式去查找测试用例。

    2.main方式运行

    if __name__ == '__main__': 
    print("-----------wwwww--------------") 
    unittest.main() 
    
    • 1
    • 2
    • 3

    2.5 unittest的运行结果

    字符含义
    .代表成功。如果加了-v,那么.会变成OK
    F代表用例执行失败
    E出错 有异常抛出
    S代表用例被跳过

    2.6 unittest测试用例的执行顺序

    ord() python的内置函数,作用是返回ASCII码。 根据ASCII的大小排序来执行测试用例。

    2.7 多种unittest的加载方式和运行测试用例的方式

    1.通过TestSuite加载多个测试用例的方式执行。

    if __name__ == '__main__':  # 创建一个测试套件
        suite = unittest.TestSuite()
        # 把测试用例加载到测试套件里面
        suite.addTest(TestApi('test_01_mashang'))
        suite.addTest(TestApi('test_02_baili'))
        suite.addTest(TestWeb('test_01_login')) 
        # 执行时一定要指定套件
        unittest.main(defaultTest='suite')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    if __name__ == '__main__':
        #创建一个测试套件
        suite = unittest.TestSuite()
        #把测试用例加载到测试套件里面
        testcases = [TestApi('test_01_mashang'),TestApi('test_02_baili'),TestWeb('test_01_login')] 
        suite.addTests(testcases)
        #执行时一定要指定套件
        unittest.main(defaultTest='suite')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.加载一个目录下所有的测试用例

    if __name__ == '__main__': 
        suite = unittest.defaultTestLoader.discover("./testcases", pattern='test _*.py') 
        unittest.main(defaultTest='suite')
    
    • 1
    • 2
    • 3

    九、为什么我们使用unittest.main()就可以执行所有的测试用例?

    名称用法
    TestCase测试用例
    TestSuite测试套件:整理测试用例,形成一个集合。
    TestLoader测试加载器:加载测试用例套件或者测试用例。
    TestFixtrue测试固件
    TestRunner测试运行器:运行测试用例。

    如何工作.,底层原理如何实现。

    类() 实例化一个对象,自动调用init方法。

    module:测试用例所在的路径,__main__代表当前模块。

    defaultTest:默认的待测试的测试用例或者测试套件的名称。

    argv:接收外部传递给程序的参数testRunner:测试运行器

    testLoader:测试加载器

    exit:是否在测试用例结束之后退出程序

    verbosity:显示详细信息的程度。

    <0 只显示用例总数以及全局执行结果

    1 默认值,显示用例总数以及全局执行结果外,还显示一个标记:

    . F E,S

    >=2 显示用例总数以及全局执行结果外,显示详解结果

    (1)测试加载器已经初始化

    1 def init(self, module=‘main’, defaultTest=None, argv=None,

    2 testRunner=None, testLoader=loader.defaultTestLoader,

    3 exit=True, verbosity=1, failfast=None, catchbreak=None,

    4 buffer=None, warnings=None, *, tb_locals=False):

    (2) 通过测试加载器加载测试用例保存到self.test

    1 def createTests(self, from_discovery=False, Loader=None):

    2 if self.testNamePatterns:

    3 self.testLoader.testNamePatterns = self.testNamePatterns

    4 if from_discovery:

    5 loader = self.testLoader if Loader is None else Loader()

    6 self.test = loader.discover(self.start, self.pattern, self.top)

    7 elif self.testNames is None:

    8 self.test = self.testLoader.loadTestsFromModule(self.module)

    9 else:

    10 self.test = self.testLoader.loadTestsFromNames(self.testNames,

    11 self.module)

    (3) 创建文本测试运行器

    1 if self.testRunner is None:

    2 self.testRunner = runner.TextTestRunner

    最后通过:self.result = testRunner.run(self.test)执行已经加载好的测试用

    例。并且把结果放到self.result

    2.9unittest夹具

    setUp/tearDown 在每个用例的前后执行setUpClass/tearDownClass 在每个类的前后执行。

    setUpModule/tearDownModule 在每个模块的前后执行

    import unittest
    
    class TestApi(unittest.TestCase):
    
        def setUp(self) -> None:
            print("在每一个测试用例之前执行:打开浏览器,加载网页")
    
        def tearDown(self) -> None:
            print("在每一个测试用例之后执行:关闭浏览器")
    
        @classmethod
        def setUpClass(cls) -> None:
            print("‐‐‐‐‐‐在每个类之前执行:初始化日志对象,创建数据库连接‐‐‐‐‐‐‐‐")
    
        @classmethod
        def tearDownClass(cls) -> None:
            print("‐‐‐‐‐‐在每个类之后执行:销毁日志对象,销毁数据库连接‐‐‐‐‐‐‐‐")
    
        def test_01_mashang(self):
            print("码尚教育软件测试")
    
        def test_02_baili(self):
            print("码尚百里")
    
        def test_03_weiwei(self):
            print("码尚微微")
    
        def test_04_qingtian(self):
            print("码尚晴天")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    什么算泄露公司机密的行为(什么程度算公司泄密行为)
    uni-app开发小程序实用技巧
    Mall脚手架总结(一)——SpringSecurity实现鉴权认证
    循环优先级仲裁~位屏蔽仲裁算法
    国产管理软件勒索病毒大爆发
    腾讯云轻量数据库1核1G性能测评、租用费用和详细介绍
    QT QChartView 鼠标随动 十字线
    sqli-labs(less-11)
    2. NLP基础 : 分词
    AI短视频矩阵运营软件|抖音视频矩阵控制工具
  • 原文地址:https://blog.csdn.net/naumy/article/details/126691060