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:框架第一种方法:

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】unittest.main(verbosity=2)种的verbosity怎么使用


下一篇:【unittest】编写并运行测试用例方法