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)
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/153205.html