ui自动化测试框架unittest
一、自动化框架
1、自动化框架类型
(1)unittest框架 (python中自带框架)
(2)pytest框架 (第三方库)
(3)po框架 (分层思维)
2、自动化框架作用:管理和组织用例
二、介绍下:unittest框架
代码:
import unittest #导入自动化测试框架
class Cms(unittest.TestCase): #创建一个类,并且集成unittest.testcase cms类名
@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): #用例1
print('1111')
def test2(self): ##用例2
print('3333')
def testA(self): ##用例3
print('AAAA')
def testa(self):
print('aaaa')
def bbb(self):
print('bbb')
if __name__ == '__main__': #main函数
unittest.main() #调用所有的用例
类的开始
方法开始
1111
方法结束
方法开始
3333
方法结束
方法开始
AAAA
方法结束
方法开始
aaaa
方法结束
类的结束
总结:
1、类的开始,类的结束只执行一次
2、方法开始,方法结束 每一次都执行了
3、运行时顺序按照ascii码排序:0-9,A-Z,a-z
4、用例必须用test开头,如果没有test开头就不运行
二、实际项目用例编写
from selenium import webdriver
import time
import unittest #导入自动化测试框架
class Cms(unittest.TestCase): #创建一个类,并且集成unittest.testcase cms类名
@classmethod #类方法
def setUpClass(cls) -> None: #类的开始
print('类的开始')
@classmethod
def tearDownClass(cls) -> None: #类的结束
print('类的结束')
def setUp(self) -> None: #方法的开始
self.dx = webdriver.Chrome() # 创建一个 webdriver对象
self.dx.get("https://www.baidu.com/") # 通过对象打开网址
time.sleep(3) #运行前准备工作,
def tearDown(self) -> None:
time.sleep(3)
self.dx.close()
# print('方法结束') #运行后的工作关闭窗口,时间等待
def test1(self): #用例1
self.dx.find_element_by_id("kw").send_keys('python')
def test2(self): ##用例2
self.dx.find_element_by_id("kw").send_keys('html')
def testA(self): ##用例3
self.dx.find_element_by_id("kw").send_keys('mysql')
def testa(self):
self.dx.find_element_by_id("kw").send_keys('linux')
def bbb(self):
self.dx.find_element_by_id("kw").send_keys('我不是test')
if __name__ == '__main__': #main函数
unittest.main() #调用所有的用例
三、unittest 调用方法
(1)第一种调用所有用例unittest.main()
from selenium import webdriver
import time
import unittest #导入自动化测试框架
class Cms(unittest.TestCase): #创建一个类,并且集成unittest.testcase cms类名
@classmethod #类方法
def setUpClass(cls) -> None: #类的开始
print('类的开始')
@classmethod
def tearDownClass(cls) -> None: #类的结束
print('类的结束')
def setUp(self) -> None: #方法的开始
self.dx = webdriver.Chrome() # 创建一个 webdriver对象
self.dx.get("https://www.baidu.com/") # 通过对象打开网址
time.sleep(3) #运行前准备工作,
def tearDown(self) -> None:
time.sleep(3)
self.dx.close()
# print('方法结束') #运行后的工作关闭窗口,时间等待
def test1(self): #用例1
self.dx.find_element_by_id("kw").send_keys('python')
def test2(self): ##用例2
self.dx.find_element_by_id("kw").send_keys('html')
def testA(self): ##用例3
self.dx.find_element_by_id("kw").send_keys('mysql')
def testa(self):
self.dx.find_element_by_id("kw").send_keys('linux')
def bbb(self):
self.dx.find_element_by_id("kw").send_keys('我不是test')
if __name__ == '__main__': #main函数
unittest.main() #调用所有的用例
(2)第二种:调用部分用例
TestSuite:(套件)
对一个功能的测试往往需要多测试用例的,可以把多的测试用例集合在一起执行,这就是TestSuite的概念。常用addTest()方法将一个测试用例添加到测试套件中
TextTestRunner:
是用来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存在
运行中出现全部修改路径:
案例:
import 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('1111')
def test3(self):
print('3333')
def test2(self):
print('2222')
def testA(self):
print('aaaa')
def testa(self):
print('AAAA')
def bbb(self):
print('bbb')
if __name__ == '__main__':
# unittest.main() #调用所有的用例
tj=unittest.TestSuite() #创建套件对象
# tj.addTest(Cms('test2'))
tj.addTests([Cms("test2"),Cms("test3")])
r=unittest.TextTestRunner()
r.run(tj)
(3)第三种:调用一个路径下的用例
TestLoader:
是用来搜索所有以test开头的测试用例,
import 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('1111')
def test3(self):
print('3333')
def test2(self):
print('2222')
def testA(self):
print('aaaa')
def testa(self):
print('AAAA')
def bbb(self):
print('bbb')
if __name__ == '__main__':
# unittest.main() #调用所有的用例 #第一种
# tj=unittest.TestSuite() #创建套件对象 #第二种
# # tj.addTest(Cms('test2'))
# tj.addTests([Cms("test2"),Cms("test3")])
# r=unittest.TextTestRunner()
# r.run(tj)
lj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2" #路径
d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*")
r=unittest.TextTestRunner()
r.run(d)
(4)第四种:使用html报告模板生成自动化测试报告
a、下载一个报告模板:
b、跑出来报告
import unittest #导入自动化测试框架
import time
from dcs.dsc2.HTMLTestRunner3_New 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('1111')
def test3(self):
print('3333')
def test2(self):
print('2222')
def testA(self):
print('aaaa')
def testa(self):
print('AAAA')
def bbb(self):
print('bbb')
if __name__ == '__main__':
# unittest.main() #调用所有的用例 #第一种
# tj=unittest.TestSuite() #创建套件对象 #第二种
# # tj.addTest(Cms('test2'))
# tj.addTests([Cms("test2"),Cms("test3")])
# r=unittest.TextTestRunner()
# r.run(tj)
# lj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2" #路径 #第三种
# d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*")
# r=unittest.TextTestRunner()
# r.run(d)
lj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2" #路径 #第三种
d=unittest.TestLoader().discover(start_dir=lj,pattern="kj*")
bglj=r"C:\Users\Administrator\PycharmProjects\untitled38\dcs\dsc2"
new=time.strftime("%y-%m-%d-%H-%M-%S")
file=bglj+"/"+str(new)+"_ui.html"
f=open(file,'wb')
r=HTMLTestRunner(
stream=f,title="ui自动化测试报告",description="用例执行情况" ,tester="dcs35"
)
r.run(d)