标签:__ unittest 单元测试 test print self def
unittest单元测试框架(python中自带单元框架)
一、unittst框架的作用
当我们写的用例越来越多时,我们就需要考虑用例编写的规范与组织,以便于后期的维护,而unittest正是这样一款工具
二、unittest是Python自带的标准库中的模块,其中包括:
1、TestCase类 (测试用例)
2、TestSuite类 (测试套件)
3、TestLoader类(搜索测试路径)
4、TextTestRunner类(run(test))
5、TextTestResult类(测试结果)
6、TestFixture类(setup 和 tear down)
解释下:
TestCase:
一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown
TestSuite:
对一个功能的测试往往需要多个测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中
TextTestRunner:
是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。
TextTestResult:
测试的结果会保存在TextTestResult实例中
TestFixture:
测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。
TestLoader:
是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中
图形化解释:如下图
三、框架的组成
在写测试类以及测试用例时要规定一个命名习惯,一般测试类可以以Test开头,也可以以Test结尾。测试用例一般是以test开头。
eg:结构如下:
import unittest #导入unittest包
#创建测试类:从unittest.TestCase继承
classRomanNumeralConverterTest(unittest.TestCase):
def setUp(self): #初始化测试环境
def tearDown(self): #还原测试环境
def test_case(self):测试用例
====================================================
四、
讲解内容
(1)unittest作用?
unittest 单元测试框架 是用来管理和组织测试用例,方便后期维护
(2)市场常见的测试单元测试框架?
unittest (自带标准库) 、pytest (第三库)
(3)unitttest 单元测试框架结构
案例1:框架第一种方法:
import unittest #导入 unittest框架 class hz10(unittest.TestCase):#定义 一个类,继承unittest 的用例 @classmethod #类的开始 只执行一次,如果不需要类就可以省略 def setUpClass(cls) -> None: print("类的开始") @classmethod def tearDownClass(cls) -> None: print("类的结束") def setUp(self) -> None: 方法开始 , print("方法开始") def tearDown(self): #方法结束 ,结束用例,释放资源 print("方法结束") def test001(self): #每一个自动化用例都是test开头 ,顺序1-9,A-Z,a-z print(1111) def test_a(self): print("a") def test_002(self): print(2222) def test_003(self): print(3333) def test_A(self): print("A") def hz(self): print("hz") if __name__ == '__main__': unittest.main( )# 第一种方法:调用所有的用例 结果:
类的开始
.....
方法开始
----------------------------------------------------------------------
1111
Ran 5 tests in 0.000s
方法结束
OK
方法开始
2222
方法结束
方法开始
3333
方法结束
方法开始
A
方法结束
方法开始
a
方法结束
类的结束
备注:1、unittest 运行的顺序:1-9,大写字母,小写字母
2、运行用例必须是test开头
3、每一次用例执行,放的开始和结束都会执行一次
4、类的开始和类的结束只执行一次
============================================
案例2: 执行部分用例(指定的用例)
import unittest #导入 unittest框架 class hz10(unittest.TestCase):# @classmethod #类的开始 def setUpClass(cls) -> None: print("类的开始") @classmethod def tearDownClass(cls) -> None: print("类的结束") def setUp(self) -> None: print("方法开始") def tearDown(self): print("方法结束") def test001(self): print(1111) def test_a(self): print("a") def test_002(self): print(2222) def test_003(self): print(3333) def test_A(self): print("A") def hz(self): print("hz") if __name__ == '__main__': #unittest.main( )# 第一种方法:调用所有的用例 suit=unittest.TestSuite() #创建一个套件 suit.addTest(hz10("test001")) # suit.addTests([hz10("test001"),hz10("test002")]) run=unittest.TextTestRunner() #创建一个执行对象 run.run(suit)
案例3:执行一个路径下所有所有用例
import unittest #导入 unittest框架 class hz10(unittest.TestCase):# @classmethod #类的开始 def setUpClass(cls) -> None: print("类的开始") @classmethod def tearDownClass(cls) -> None: print("类的结束") def setUp(self) -> None: print("方法开始") def tearDown(self): print("方法结束") def test001(self): print(1111) def test_a(self): print("a") def test_002(self): print(2222) def test_003(self): print(3333) def test_A(self): print("A") def hz(self): print("hz") if __name__ == '__main__': path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua" a=unittest.TestLoader().discover(start_dir=path,pattern="ui_框架*.py") run=unittest.TextTestRunner() run.run(a)
案例4:使用报告模板生成测试报告
import unittest #导入 unittest框架 from time import * from hz_ui_zidognhua.HTMLTestRunner3_New import HTMLTestRunner class hz10(unittest.TestCase):# @classmethod #类的开始 def setUpClass(cls) -> None: print("类的开始") @classmethod def tearDownClass(cls) -> None: print("类的结束") def setUp(self) -> None: print("方法开始") def tearDown(self): print("方法结束") def test001(self): print(1111) def test_a(self): print("a") def test_002(self): print(2222) def test_003(self): print(3333) def test_A(self): print("A") def hz(self): print("hz") if __name__ == '__main__': path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua" a=unittest.TestLoader().discover(start_dir=path,pattern="ui_框架*.py") bg_path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua" new=strftime("%y-%m-%d %H-%M-%S") filename=bg_path+"/"+str(new)+"_uizdf.html" f=open(filename,"bw") run=HTMLTestRunner(stream=f,title="xx自动化测试报告" ,description="用例执行情况如下:") run.run(a) f.close()
案例5:结合实际案例编写UI自动化单元测试框架
import unittest from selenium import webdriver from time import * from hz_ui_zidognhua.HTMLTestRunner3_New import HTMLTestRunner class Test_baidu(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.get("https://www.baidu.com/") self.driver.implicitly_wait(5) def tearDown(self) -> None: sleep(5) self.driver.close() def test001(self): self.driver.find_element_by_id("kw").send_keys("python") def test002(self): self.driver.find_element_by_id("kw").send_keys("html") def testa(self): self.driver.find_element_by_id("kw").send_keys("a") def test003(self): self.driver.find_element_by_id("kw").send_keys("mysql") def testA(self): self.driver.find_element_by_id("kw").send_keys("A") def abc(self): self.driver.find_element_by_id("kw").send_keys("abc") if __name__ == '__main__': # unittest.main() #第一种方法 tj=unittest.TestSuite()#第二种方法 # tj.addTest(Test_baidu("testa")) # tj.addTests([Test_baidu("testa"),Test_baidu("test001")]) # run=unittest.TextTestRunner() # run.run(tj) #第三种 # path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua" # lj=unittest.TestLoader().discover(start_dir=path,pattern="ui_框架*") # run=unittest.TextTestRunner() # run.run(lj) path=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua" lj = unittest.TestLoader().discover(start_dir=path, pattern="ui_框架*") bglj=r"C:\Users\Administrator\PycharmProjects\hz10\hz_ui_zidognhua" new=strftime("%y-%m-%d %H-%M-%S") filename=bglj+'/'+str(new)+ '_ui.html' f=open(filename,"bw") run=HTMLTestRunner(stream=f,title="百度ui自动化测试报告",description="用例执行情况如下:") run.run(lj)
标签:__,unittest,单元测试,test,print,self,def 来源: https://blog.csdn.net/YANGJUNMINGYEN/article/details/120295889
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。