点击上方“Python自动化社区”,选择“加为星标”
第一时间关注 Python 自动化技术干货!

系列导读
1. 前言
上一篇文章讲了 unittest 的基本用法,通过这部分内容可以编写一些测试用例,完成一些简单的单元测试。
本篇将继续聊聊 unittest 框架中的 Fixture、装饰器、discover、Web 自动化实战相关的内容。
2. Fixture
Fixture 是软件测试中的概念,相当于是一个钩子函数,unittest 框架提供了下面 3 组方法来管理测试用例的前后执行逻辑。
setUp() / tearDown()
setUpClass() / tearDownClass()
setUpModule() / tearDownModule()
其中,setUpModule() / tearDownModule() 是在整个模块的开始和结束的时候来调用。
setUpClass() / tearDownClass() 是在测试类的开始和结束时来进行调用。
至于 setUp() / tearDown(),是在执行每一个测试用例的开始、结束时进行调用。
需要注意的是,setUpClass() / tearDownClass() 为类方法,必须通过 @classmethod 装饰器,参数为:cls,代表测试类的实例对象。
import unittest
def setUpModule():
pass
def tearDownModule():
pass
class TestFoo(unittest.TestCase):
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(cls):
pass
def setUp(self):
pass
def tearDown(self):
pass
//下面编写测试用例
// pass
3. discover
unittest 框架可以使用 TestLoader 类下的 discover() 按照指定的规则去查找测试用例。
使用方法如下:
# 查找测试用例去执行
discover(start_dir,pattern="*.py",top_level_dir=None)
其中,start_dir 参数指定待测试的模块名或者测试用例目录
pattern 可以指定一个规则,利用文件名去匹配准备测试用例文件
top_level_dir 表示测试模块的顶级目录,如果没有顶级目录,默认为:None
比如,现在要查找某个相对目录下的,文件名以 test 开头的所有文件的测试用例组成的测试套件
import unittest
# 指定待测试用例的目录
test_dir_to_be = './testcase'
# 查找测试套件
suits = unittest.defaultTestLoader.discover(test_dir_to_be, pattern='test*.py', top_level_dir=None)
最后,利用 TestRunner 运行测试套件即可。
if __name__ == '__main__':
# 实例化TestRunner
runner = unittest.TextTestRunner()
# 执行测试套件:suits
runner.run(suits)
需要注意的是,为了保证 discover 查找到所有的测试用例,需要保证每一个子目录都包含一个 init.py 文件。
4. 装饰器
为了保证单元测试的高效性,unittest 内置了很多装饰器。
常用的 4 个装饰器如下:
unittest.skip(reason):跳过测试用例或者测试类
unittest.skipIf(condition,reason):如果第一个参数为 true,就跳过执行
unittest.skipUnless(condition,reason):如果第一个参数为 true,就执行测试用例或者测试类
unittest.expetedFailure():将测试案例结果设定为失败,无论执行结果是否失败
5. 实战
以 unittest 结合 Selenium 完成一个自动化测试实战。
第 1 步,自定义一个类继承于 TestCase
import unittest
class TestBaidu(unittest.TestCase):
# 编写测试案例及Fixture
pass
第 2 步,编写 Fixtrue
重写 setUpClass() 方法内实例化 WebDriver,tearDownClass() 方法内部释放资源
driver = None
@classmethod
def setUpClass(cls):
# 实例化 WebDriver
cls.driver = webdriver.Chrome()
cls.base_url = 'http://www.baidu.com'
@classmethod
def tearDownClass(cls):
# 释放资源
cls.driver.quit()
第 3 步,编写测试案例,比如打开 Google
def test_open_google(self):
# 打开Google
self.driver.get('https://www.google.com')
# 断言,判断标题
self.assertEqual(self.driver.title, "Google")
第 4 步,运行测试案例
if __name__ == '__main__':
unittest.main()
如此,就结合 Selenium + unittest,完成了 Web 端的自动化测试

喜欢本教程系列的同学
欢迎长按下图订阅!
⬇⬇⬇

本文是单元测试系列的第二篇,重点介绍了unittest框架中的Fixture、discover功能和装饰器的使用。Fixture包括setUp/tearDown等方法,用于管理测试用例执行逻辑。discover方法用于按规则查找测试用例,而装饰器如skip/skipIf/expecetdFailure则提供了灵活的测试控制。此外,文章还给出了unittest结合Selenium进行Web自动化测试的实战步骤。
:unittest&spm=1001.2101.3001.5002&articleId=104832725&d=1&t=3&u=ec1eb350c1e444b589e91e4237305950)
2万+

被折叠的 条评论
为什么被折叠?



