【Selenium】UnitTest测试框架的基本应用

文章目录

  • 1 UnitTest入门
  • 2 UnitTest测试框架应用

1 UnitTest入门

  • 介绍
    Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。随着自动化更新,能够完整地结合Selenium、Appium、Requests等实现UI自动化与接口自动化。

  • 四大特色

    1. TestCase:测试用例。所有的用例都是直接继承于UnitTest.TestCase类。
    2. TestFixture:setUp和tearDown,作为前置条件和后置条件。
    3. TestSuite 测试套件 + TestRunner 测试运行器:能够更有效地针对业务来进行用例管理,包括测试报告的集成
    4. 断言机制:在UnitTest中封装好了成熟断言,通过self.可以直接被调用。
  • 环境部署

    1. UnitTest是一个测试用例框架
    2. Python安装时就默认会有一个builtin模块,UnitTest框架是默认集成在python中的。意味着只要安装python就有UnitTest
    3. 只需通过import unittest即可实现调用

2 UnitTest测试框架应用

  1. 定义测试类:类名继承unittest.TestCase
  2. 定义测试用例:所有的测试用例,都是以函数的形式存在,函数的名称都要以test_开头;用例执行顺序遵循 0-9, A-Z, a-z
  3. 所有的前置后置都有等级存在:class级别,method级别
    method级别:与用例关联每一条用例运行前会执行前置,运行后会执行后置
    class级别:必须定义装饰器@classmethod,前置是在所有内容运行前运行一次,后置是所有内容运行结束后运行一次
  4. cls对象只在class级别前后置中定义,调用还是通过self进行调用
  5. 修改cls对象的值,在全局生效,需要通过类名.对象进行赋值操作才可以生效;而通过self.对象进行赋值只能在当下函数中生效(多流程之间有数据的交互)
  6. 定义断言
  7. 运行
# 导入unittest包
import unittest

from selenium import webdriver
from selenium.webdriver.common.by import By

# 定义测试类,必须继承unittest.TestCase
class Visit(unittest.TestCase):

    # class级别前置
    @classmethod
    def setUpClass(cls) -> None:
        cls.wd = webdriver.Chrome()

        cls.title = None

    # class级别前置
    @classmethod
    def tearDownClass(cls) -> None:
        cls.wd.quit()
        print(cls.title)    # 因为用例2中修改了cls.title的值,所以这里打印的是用例2执行完的title

    # 前置条件:method级别
    def setUp(self):
        print("======Testing Begin======")

    # 后置条件:method级别
    def tearDown(self):
        print("======Testing Done======")

    # 定义测试用例:测试用例的名称要以test_开头,否则不会当成测试用例执行
    def test_baidu(self):
        self.wd.get('https://www.baidu.com/')
        # 定义断言, 断言失败退出这个case执行下个case
        self.assertIn("百度一下", self.wd.title)
        print(self.title)   # 打印全局title=None
        # 临时修改,只在函数中生效
        self.title = self.wd.title
        print(self.title)   # 打印用例1执行完的title

    def test_music163(self):
        self.wd.get('https://music.163.com/')
        # 定义断言
        self.assertEqual('网易云音乐', self.wd.title, msg='断言失败')
        element = self.wd.find_element(By.ID, 'srch')
        # 当一个变量为空/0/None/False时,从布尔值的角度考虑都属于False;其他为True
        self.assertTrue(element, msg='断言失败')
        print(self.title)   # 因为用例1中是临时修改,所以这里打印的还是全局title=None
        # 修改cls.title的值,在全局生效
        Visit.title = self.wd.title
        print(self.title)   # 打印用例2执行完的title

if __name__ == "__main__":
    # 运行unittest测试用例
    unittest.main()

python方式运行结果如下:
【Selenium】UnitTest测试框架的基本应用_第1张图片

你可能感兴趣的:(Selenium,selenium)