day:27 unittest框架

自动化框架

一、介绍框架

1、unittest 框架是python中自带的框架

2、作用:管理和组织测试用例

当我们写的用例越来越多,我们就要考虑用例的编写的规范和组织,以便于后期的维护

3、常见的自动化框架:po框架、pytest 框架、unittest框架(我们讲解)

4、unitest 框架自带标准的库:有如下

a、TestCase类 (测试用例)
b、TestSuite类 (测试套件)
c、TestLoader类 (测试路径)
d、TextTestRunner类 (测试运行)
e、TextTestResult类 (测试结果)
f、TestFixture类 (测试前后准备)

解释下:

TestCase:
一个Testcase的实例就是一个测试用例,测试用例就是一个完整的测试流程,包括初始化setUp、运行run、测试后的还原tearDown

TestSuite:
对一个功能的测试往往需有多个测试用例,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中

TextTestRunner:

是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在TextTestResult实例中

TestFixture:

测试准备前要做的工作和测试执行完后要做的工作.包括setUp()和tearDown()。通过覆盖TestCase的setUp和tearDown来实现。

TestLoader:

是用来搜索所有以test开头的测试用例,然后将其加入到testsuite中去执行

5、unittest的框架的结构:

import unittest #导入unittest框架
class Cms(unittest.TestCase): #创建一个类,继承unittest.TestCase
@classmethod
def setUpClass(cls) -> None:
print("类开始")
@classmethod
def tearDownClass(cls) -> None:
print("类的结束")
def setUp(self) -> None:
print("方法开始")
def tearDown(self) -> None:
print("方法结束")
def test1(self):
print("1")
def test2(self):
print("2")
def testa(self):
print("a")
def testA(self):
print("A")
def dy(self):
print("独有")
if name == 'main':
unittest.main() #执行所有的用例
类开始

方法开始

1

方法结束

方法开始

2

方法结束

方法开始

A

方法结束

方法开始

a

方法结束

类的结束

==注意点:

1、类的开始,类的结束,方法开始,方法结束都可以不写

2、用例要以test开头,如果没有以test开头就不运行

3、test开头的用例运行顺序: 按ascllma标准:0-9 A-Z a-z

4、类的开始,类的结束在整个框架中就运行一次

5、方法开始和方法结束,每一条用例都执行==

二.unittest 运行部分用例

当运行的是整个框架,我们要运行单个用例:

(1)复制
代码存在的路径 C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled12\dd\kj1.py

(2)点击编辑路径

(3)再python添加解释器

(4)执行点击右上叫的运行

(5)代码

import unittest #导入unittest框架
class Cms(unittest.TestCase): #创建一个类,继承unittest.TestCase
@classmethod
def setUpClass(cls) -> None:
print("类开始")
@classmethod
def tearDownClass(cls) -> None:
print("类的结束")
def setUp(self) -> None:
print("方法开始")
def tearDown(self) -> None:
print("方法结束")
def test1(self):
print("1")
def test2(self):
print("2")
def testa(self):
print("a")
def testA(self):
print("A")
def dy(self):
print("独有")
if name == 'main':
# unittest.main() #执行所有的用例
tj=unittest.TestSuite() # 创建一个套件对象
tj.addTest(Cms("test2")) #将单个添加用例到集合中,
unittest.TextTestRunner().run(tj) #通过testrunner运行套件中的用例
案例2:

import unittest #导入unittest框架
class Cms(unittest.TestCase): #创建一个类,继承unittest.TestCase
@classmethod
def setUpClass(cls) -> None:
print("类开始")
@classmethod
def tearDownClass(cls) -> None:
print("类的结束")
def setUp(self) -> None:
print("方法开始")
def tearDown(self) -> None:
print("方法结束")
def test1(self):
print("1")
def test2(self):
print("2")
def testa(self):
print("a")
def testA(self):
print("A")
def dy(self):
print("独有")
if name == 'main':
# unittest.main() #执行所有的用例
tj=unittest.TestSuite() # 创建一个套件对象
# tj.addTest(Cms("test2")) #将单个添加用例到集合中,
tj.addTests([Cms("test2"),Cms("testA")])#将两个或两个以上添加用例到集合中,
unittest.TextTestRunner().run(tj) #通过testrunner运行套件中的用例

三.执行一个路径下的用例

代码:

import unittest #导入unittest框架
class Cms(unittest.TestCase): #创建一个类,继承unittest.TestCase
@classmethod
def setUpClass(cls) -> None:
print("类开始")
@classmethod
def tearDownClass(cls) -> None:
print("类的结束")
def setUp(self) -> None:
print("方法开始")
def tearDown(self) -> None:
print("方法结束")
def test1(self):
print("1")
def test2(self):
print("2")
def testa(self):
print("a")
def testA(self):
print("A")
def dy(self):
print("独有")
if name == 'main':
# unittest.main() #执行所有的用例
# tj=unittest.TestSuite() # 创建一个套件对象
# tj.addTest(Cms("test2")) #将单个添加用例到集合中,
# tj.addTests([Cms("test2"),Cms("testA")])#将两个或两个以上添加用例到集合中,
# unittest.TextTestRunner().run(tj) #通过testrunner运行套件中的用例
#运行py文件的相对路径
path=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled12\dd"
d=unittest.TestLoader().discover(start_dir=path,pattern="kj*.py")
unittest.TextTestRunner().run(d)

四.运用用例后生成报告

1.有固定的报告模板

2.将报告模板放在pycharm中,可以导入使用

3.编写代码

import unittest #导入unittest框架
import time
from dd.HTMLTestRunnerNew import HTMLTestRunner
class Cms(unittest.TestCase): #创建一个类,继承unittest.TestCase
@classmethod
def setUpClass(cls) -> None:
print("类开始")
@classmethod
def tearDownClass(cls) -> None:
print("类的结束")
def setUp(self) -> None:
print("方法开始")
def tearDown(self) -> None:
print("方法结束")
def test1(self):
print("1")
def test2(self):
print("2")
def testa(self):
print("a")
def testA(self):
print("A")
def dy(self):
print("独有")
if name == 'main':
# unittest.main() #执行所有的用例
# tj=unittest.TestSuite() # 创建一个套件对象
# tj.addTest(Cms("test2")) #将单个添加用例到集合中,
# tj.addTests([Cms("test2"),Cms("testA")])#将两个或两个以上添加用例到集合中,
# unittest.TextTestRunner().run(tj) #通过testrunner运行套件中的用例
#运行py文件的相对路径
# path=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled12\dd"
# d=unittest.TestLoader().discover(start_dir=path,pattern="kj.py")
# unittest.TextTestRunner().run(d)
bgpath=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled12\dd"
path=r"C:\Users\Administrator.USER-20231114RR\PycharmProjects\untitled12\dd"
d=unittest.TestLoader().discover(start_dir=path,pattern="kj
.py")
new=time.strftime("%y-%m-%d %H-%M-%S")
file=bgpath+"/"+str(new)+"ui.html"
f=open(file,"bw")
r=HTMLTestRunner(
stream=f,title="ui自动化测试报告",description="用例执行情况",
tester="dcs"
)
r.run(d)

4.运行结果

posted @ 2025-03-21 19:16  君庭  阅读(38)  评论(0)    收藏  举报