归志宁无五亩园,读书本意在元元。这篇文章主要讲述ui自动化__unittest单元测试框架相关的知识,希望能为你提供帮助。
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:框架第一种方法:
importunittest#导入 unittest框架
classhz10(unittest.TestCase):#定义 一个类,继承unittest 的用例
@classmethod#类的开始只执行一次,如果不需要类就可以省略
defsetUpClass(cls) -> None:
print("类的开始")
@classmethod
deftearDownClass(cls) -> None:
print("类的结束")
defsetUp(self) -> None: 方法开始 ,
print("方法开始")
deftearDown(self):#方法结束,结束用例,释放资源
print("方法结束")
def test001(self):#每一个自动化用例都是test开头 ,顺序1-9,A-Z,a-z
print(1111)
deftest_a(self):
print("a")
def test_002(self):
print(2222)
def test_003(self):
print(3333)
def test_A(self):
print("A")
defhz(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: 执行部分用例(指定的用例)
importunittest#导入 unittest框架
classhz10(unittest.TestCase):#
@classmethod#类的开始
defsetUpClass(cls) -> None:
print("类的开始")
@classmethod
deftearDownClass(cls) -> None:
print("类的结束")
defsetUp(self) -> None:
print("方法开始")
deftearDown(self):
print("方法结束")
def test001(self):
print(1111)
deftest_a(self):
print("a")
def test_002(self):
print(2222)
def test_003(self):
print(3333)
def test_A(self):
print("A")
defhz(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:执行一个路径下所有所有用例
importunittest#导入 unittest框架
classhz10(unittest.TestCase):#
@classmethod#类的开始
defsetUpClass(cls) -> None:
print("类的开始")
@classmethod
deftearDownClass(cls) -> None:
print("类的结束")
defsetUp(self) -> None:
print("方法开始")
deftearDown(self):
print("方法结束")
def test001(self):
print(1111)
deftest_a(self):
print("a")
def test_002(self):
print(2222)
def test_003(self):
print(3333)
def test_A(self):
print("A")
defhz(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:使用报告模板生成测试报告
importunittest#导入 unittest框架
fromtimeimport*
from hz_ui_zidognhua.htmlTestRunner3_New import HTMLTestRunner
classhz10(unittest.TestCase):#
@classmethod#类的开始
defsetUpClass(cls) -> None:
print("类的开始")
@classmethod
deftearDownClass(cls) -> None:
print("类的结束")
defsetUp(self) -> None:
print("方法开始")
deftearDown(self):
print("方法结束")
def test001(self):
print(1111)
deftest_a(self):
print("a")
def test_002(self):
print(2222)
def test_003(self):
print(3333)
def test_A(self):
print("A")
defhz(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()
【ui自动化__unittest单元测试框架】案例5:结合实际案例编写UI自动化单元测试框架
importunittest
fromselenium importwebdriver
fromtime import*
fromhz_ui_zidognhua.HTMLTestRunner3_New import HTMLTestRunner
classTest_baidu(unittest.TestCase):
defsetUp(self) -> None:
self.driver=webdriver.Chrome()
self.driver.maximize_window()
self.driver.get("https://www.baidu.com/")
self.driver.implicitly_wait(5)
deftearDown(self) -> None:
sleep(5)
self.driver.close()
def test001(self):
self.driver.find_element_by_id("kw").send_keys("python")
deftest002(self):
self.driver.find_element_by_id("kw").send_keys("html")
deftesta(self):
self.driver.find_element_by_id("kw").send_keys("a")
deftest003(self):
self.driver.find_element_by_id("kw").send_keys("mysql")
deftestA(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)
推荐阅读
- 安全系列之:跨域资源共享CORS
- 密码学系列之:海绵函数sponge function
- 自定义帖子类型常规帖子类型
- “自定义存档”页面不适用于日期或标签,但适用于类别
- Contact-Form 7插件的CSS,没有得到平等挑选整个网站
- CSS-修复手机,平板电脑上的H3重叠
- 创建自定义页面模板
- 在自定义帖子类型metabox上创建复选框字段
- 创建没有插件的”中继器字段”