• Python之Unittest记录


    介绍

    Unittest是什么?是Python的一款单元测试框架,就是可以对程序员写的代码(类、方法、函数等)进行测试。

    官方文档:请点击这里  本文基于该官方文档编写,如有错误,欢迎指出!

    直接上代码,文件名:Login.py

    import unittest
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    
    class Login(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print('setUpClass执行')
            ser = Service('../chromedriver.exe')
            cls.driver = webdriver.Chrome(service=ser)
    
        def setUp(self):
            print('setup执行')
            self.driver.get('https://www.baidu.com')
    
        def test_login_success(self):
            self.driver.find_element(By.CLASS_NAME,'logo_bg').click()
            pass
    
        @unittest.skip("showing class skipping")
        def test_login_error_password(self):
            pass
    
        def tearDown(self):
            print('tearDown执行')
    
        @classmethod
        def tearDownClass(cls):
            print('tearDownClass执行')
    
    def suite():
        suite = unittest.TestSuite()
        suite.addTest(Login('test_login_success'))
        suite.addTest(Login('test_login_error_password'))
        return suite
    
    if __name__ == '__main__':
        runner = unittest.TextTestRunner()
        runner.run(suite())
    View Code

    执行顺序:

    setUpClass->
    setUp->test_login_success->tearDown->
    setUp->test_login_error_password->tearDown->
    tearDownClass

    注意:

    (1)setUpClass和tearDownClass必须加注解@classmethod,表示是一个类的方法,它们在整个过程仅各执行一次,因此可以用来写初始化的代码;

    (2)unittest约定,测试用例必须以test开头;

    (3)setUp和tearDown在每个测试用例执行前后都会执行,因此可以用来写为用例初始化环境和清理环境的代码;

    
    

    运行

    1、如果用了工具Pycharm,有两种方式可以运行这个测试类,

    (1)写个main方法,在Run/Debug  Configurations选择Python,则是运行main中的代码;

    最简洁的写法:

    if __name__ == '__main__':
        unittest.main()

    (还有一些其他写法,可以通过一些规则去找测试类,例如unittest.loader中TestLoader类下有很多方法可以去找测试类,包括HTMLTestRuner中也通过discover方法去寻找的,具体的准备后面再补充)

    (2)在Pycharm中可以直接运行Login这个类,在类名左侧行号那里有个绿色向右的箭头;

      或在Run/Debug  Configurations选择Python tests,运行;

    2、在命令行(Pycharm的Terminal窗口或电脑cmd命令窗口),python -m unittest Login 或 python -m unittest Login.py 都是可以的,意思和上述一样;

    其他的命令选项:

    • -h 可以查看所有的命令行选项;python -m unittest -h
    • -v, --verbose Verbose output 详细的输出测试方法 例如 python -m unittest -v test_module
    • -q, --quiet Quiet output 简洁的输出
    • -f, --failfast Stop on first fail or error遇到第一个失败或错误则停止
    • -k  Only run tests which match the given substring 运行与给定子字符串匹配的测试;python -m unittest -k password Login 则只运行test_login_error_password,不运行test_login_success。

     

    断言

    Unittest的TestCase基类提供的assert*()方法。如果测试失败,异常将被抛出,并带有解释信息,unittest将识别测试用例为失败。任何其他异常将被视为错误。

      .   

    写法就是直接 self.assertEqual(1,2)  这样,更多的方法移步官方文档; 

    子测试subTest

    当测试用例之间有非常小的差异时,例如一些参数,unittest可以使用subTest()上下文管理器在测试方法体中区分它们。

    class NumbersTest(unittest.TestCase):
    
        def test_even(self):
            """Test that numbers between 0 and 5 are all even."""
            for i in range(0, 6):
                with self.subTest(i=i):
                    self.assertEqual(i % 2, 0)
    View Code

     

    测试套件

    测试套件可以用于指定执行哪些用例,比直接执行的方法更灵活一些。代码在介绍中。

     

    注解

    @unittest.skip(reason) 无条件跳过该测试用例,reason为原因;

    @unittest.skipIf(condition, reason)若condition为真,则跳过该测试用例;
    Skip the decorated test if condition is true.

    @unittest.skipUnless(condition, reason)跳过该用例除非condition为真,意思是condition为真则执行该用例。(这里有点绕)

    @unittest.expectedFailure 这个用例希望它失败。如果它本身成功了,则被视为失败;

     

    跳过的测试case将不会运行setUp()和tearDown()。被跳过的类将不会运行setUpClass()和tearDownClass()。

    chromedriver和chrome的版本对应驱动:点击这里

    End.

  • 相关阅读:
    Yii2的深入学习--行为Behavior
    使用WordPress搭建自己的博客
    php-resque的设计和使用
    PHP的学习--在Atom中使用XDebug(Mac)
    七牛镜像的使用
    macOS平台下虚拟摄像头的研发总结
    macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号
    XCode日常使用备忘录
    DirectShow Filter的开发实践
    Windows下程序启动时出现0xc000007b错误的解决方案
  • 原文地址:https://www.cnblogs.com/youreyebows/p/16140155.html
Copyright © 2020-2023  润新知