在python里面的单元测试框架 unitest
1.单元测试概述:
从软件架构的角度来说,测试最重要的步骤是在软件开发的时候界入比较好,所以在早期测试的界入,从软件经济学的角度上来说,发现的问题解决成本低,投入的资源比较少。因此,对一个测试的系统,开始最佳的测试就是源代码级别的测试,也就是单元测试阶段,这个过程也称为白盒测试。单元测试是最基本也是觜底层的测试类型,单元测试应用于最基本的软件代码,如类,函数。方法等。单元测试通过可执行的断言检查被测单元的输出是否满足期望结果,在测试金字塔的理论上来说,越往下的测试投入资源越高,得到的回报率就越大
测试用例:编写的每个具体的测试场景
测试固件(勾子方法):初始化和清理
测试执行testRunner:具体执行被编写的测试套件或者是测试用例
测试报告testReport:测试报告反馈实际的测试结果
自动化测试用例要素包含:
1、前提条件(初始化)setUp()
2、测试步骤
3、结果验证
4、清理 tearDown()
关于测试用例的书写规范:
1、每个测试用例都必须是test开头的,一般建议test_
2、每个测试用例都应该有标题
3、每个测试用例建议只写一个测试场景
4、每个测试用例都必须得有结果信息,也就是断言
5、每个测试用例都是独立的,测试用例之间不会因为业务的依赖关系而关系
2.运用类方法来进行测试
1 from selenium import webdriver 2 import unittest 3 4 class BaiduTest(unittest.TestCase): 5 @classmethod 6 def setUpClass(cls) -> None: 7 cls.driver=webdriver.Chrome() 8 cls.driver.get('http://www.baidu.com/') 9 cls.driver.maximize_window() 10 cls.driver.implicitly_wait(30) 11 @classmethod 12 def tearDownClass(cls) -> None: 13 cls.driver.quit() 14 15 def test_baidu_title(self): 16 '''百度测试:验证百度首页的title''' 17 # assert self.driver.title=='百度一下,你就知道' 18 self.assertEqual(self.driver.title,'百度一下,你就知道') 19 20 def test_baidu_url(self): 21 '''百度测试:验证百度首页的URL''' 22 assert self.driver.current_url=='https://www.baidu.com/' 23 24 def test_baidu_video(self): 25 '''百度测试:验证点击视频后跳转视频的页面''' 26 nowwindow=self.driver.current_window_handle #获取当前窗口 27 self.driver.find_element_by_link_text('视频').click() 28 allwindows=self.driver.window_handles 29 for handler in allwindows: #在handle里面循环所有窗口 30 if handler!=nowwindow: #如果handle不等于当前窗口(百度网址) 31 self.driver.switch_to.window(handler) #进入视频窗口 32 self.assertEqual(self.driver.current_url,'https://haokan.baidu.com/?sfrom=baidu-top') #断言当前窗口的网址 33 self.driver.close() 34 self.driver.switch_to.window(nowwindow) 35 def test_baidu_map(self): 36 '''百度测试:验证点击视频后跳转地图的页面''' 37 nowwindow=self.driver.current_window_handle 38 self.driver.find_element_by_link_text('地图').click() 39 allwindows=self.driver.window_handles 40 for handler in allwindows: 41 if handler!=nowwindow: 42 self.driver.switch_to.window(handler) 43 self.assertTrue(self.driver.current_url.startswith('https://map.baidu')) 44 self.driver.close() 45 self.driver.switch_to.window(nowwindow) 46 47 if __name__ == '__main__': 48 unittest.main(verbosity=2)
3.运用模块来进行测试
1 from selenium import webdriver 2 import unittest 3 class BaiduTest(unittest.TestCase): 4 @classmethod 5 def setUpClass(cls) -> None: 6 cls.driver=webdriver.Chrome() 7 cls.driver.get('http://www.baidu.com/') 8 cls.driver.maximize_window() 9 cls.driver.implicitly_wait(30) 10 @classmethod 11 def tearDownClass(cls) -> None: 12 cls.driver.quit() 13 14 def test_baidu_title(self): 15 '''百度测试:验证百度首页的title''' 16 # assert self.driver.title=='百度一下,你就知道' 17 self.assertEqual(self.driver.title,'百度一下,你就知道') 18 19 def test_baidu_url(self): 20 '''百度测试:验证百度首页的URL''' 21 assert self.driver.current_url=='https://www.baidu.com/' 22 23 def test_baidu_video(self): 24 '''百度测试:验证点击视频后跳转视频的页面''' 25 nowwindow=self.driver.current_window_handle #获取当前窗口 26 self.driver.find_element_by_link_text('视频').click() 27 allwindows=self.driver.window_handles 28 for handler in allwindows: #在handle里面循环所有窗口 29 if handler!=nowwindow: #如果handle不等于当前窗口(百度网址) 30 self.driver.switch_to.window(handler) #进入视频窗口 31 self.assertEqual(self.driver.current_url,'https://haokan.baidu.com/?sfrom=baidu-top') #断言当前窗口的网址 32 self.driver.close() #关闭 33 self.driver.switch_to.window(nowwindow) #切换到当前窗口 34 def test_baidu_map(self): 35 '''百度测试:验证点击视频后跳转地图的页面''' 36 nowwindow=self.driver.current_window_handle 37 self.driver.find_element_by_link_text('地图').click() 38 allwindows=self.driver.window_handles 39 for handler in allwindows: 40 if handler!=nowwindow: 41 self.driver.switch_to.window(handler) 42 self.assertTrue(self.driver.current_url.startswith('https://map.baidu')) 43 self.driver.close() 44 self.driver.switch_to.window(nowwindow) 45 46 if __name__ == '__main__': 47 # suite=unittest.TestLoader().loadTestsFromTestCase(BaiduTest) #进行实例化 运用类里面的方法 loadTestsFromTestCase 48 # unittest.TextTestRunner().run(suite) #调用loadTestsFromTestCase里面的run方法 49 50 #按照模块来进行执行 51 suite = unittest.TestLoader().loadTestsFromModule('按照测试类来执行') 52 unittest.TextTestRunner().run(suite)
3.加载所有的模块
在我们要进行自动化测试的时候,如果一个模块一个模块进行操作,在某种意义上也不算是一个合格的自动化测试人员,这时候我们就需要进行加载所有的测试模块:
代码如下:
1 def getTests(): 2 '''加载所有的测试模块''' 3 suite=unittest.TestLoader().discover( 4 start_dir=os.path.dirname(__file__), 5 pattern='test_*.py' 6 ) 7 return suite
在代码当中我们可以看到 start_dir当中为现开始执行的路径,pattern为正则,是以什么开头的文件 开始执行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!