• Python-Unittest


    TestCase——> Test Fixure测试固件

           |

    TestSuite测试套件——>TestRunner测试运行器

                                 |

                           TestReport

    测试断言

    verbosity=2

    0代表得到执行的测试总数和全局结果

    1代表得到成功的显示,失败的显示f,错误的显示e,默认的是1

    2可以得到详细的信息

    1.unittest各个组件

    2.unittest测试固件

    a.setUp&tearDown

    b.setUpClass&tearDownClass

    #!/usr/bin/env python
    #coding:utf-9

    import unittest
    import selenium import webdriver

    class F2(unittest.TestCase):
    @classmethod
    def selfUpClass(cls):
    cls.driver=webdriver.Chrome()
    cls.driver.maximize_window()
    cls.driver.implicityly_wait(30)
    cls.driver.get("http://www.baidu.com")
    @classmethod
    def tearDown(cls):
    cls.driver.quit()
    def test_baidu_new(self):
    self.driver.find_element_by_link_text('新闻').click()
    def test_baidu_map(self):
    self.driver.find_element_by_link_text('地图').click()
    if __name__=="__main__":
    unittest.main(verbosity=2)
    类方法:会出现找不到元素的问题
    改写成:
    def test_baidu_new(self):
    self.driver.find_element_by_link_text('新闻').click()
    self.driver.back()


    import  unittest
    from selenium import  webdriver

    class F3(unittest.TestCase):
        def setUp(self):
            self.driver=webdriver.Chrome()
            self.driver.maximize_window()
            self.driver.implicitly_wait(30)
            self.driver.get('http://www.baidu.com')

        def tearDown(self):
            self.driver.quit()

        def test_baidu_news(self):
            self.driver.find_element_by_link_text('新闻').click()

        def test_baidu_map(self):
            self.driver.find_element_by_partial_link_text('图').click()

    if __name__ == '__main__':
        unittest.main(verbosity=2)

    c.程序执行的顺序

    d.测试用例的编写方法

    写注释,好判断是哪个用例有错误

    3.测试执行

    4.构建测试套件,就是测试集

    a用例按顺序执行(addTest)

    #!/usr/bin/env python
    #coding:utf-9

    import unittest
    import selenium import webdriver

    class BaiduTest(unittest.TestCase):
    @classmethod
    def selfUpClass(cls):
    cls.driver=webdriver.Chrome()
    cls.driver.maximize_window()
    cls.driver.implicityly_wait(30)
    cls.driver.get("http://www.baidu.com")
    @classmethod
    def tearDown(cls):
    cls.driver.quit()
    def test_baidu_new(self):
    self.driver.find_element_by_link_text('新闻').click()
    self.driver.back()
    def test_baidu_map(self):
    self.driver.find_element_by_link_text('地图').click()
    self.driver.back()
    if __name__=="__main__":
    suite=unittest.TestSuite()初始化
    suite.addTest(BaiduTest('test_baidu_new'))
    suite.addTest(BaiduTest('test_baidu_man'))
    unittest.TextTestRunner(verbosity=2).run(suite)
    执行顺序还是会按照ASCII字母顺序执行,

    解决方法就是把用例名用数字编号显示,但是addTest会产生很多相同代码,解决办法就是按类执行
    if __name__=="__main__":
    suite=unittest.TestSuite()初始化
    suite.addTest(BaiduTest)
    unittest.TextTestRunner(verbosity=2).run(suite)

    b.测试用例执行顺序的详解

    c.按测试类执行makeSuite,是个函数

    #!/usr/bin/env python
    # coding:utf-8

    import unittest
    from selenium import webdriver

    class F7(unittest.TestCase):
    def setUp(self):
    pass
    def tearDown(self):
    pass
    def test_001(self):
    pass
    def test_002(self):
    pass
    if __name__=="__main__":
    suite=unittest.TestSuite(unittest.makeSuite(F7))
    unittest.TextTestRunner(verbosity=2).run(suite)

    d.加载测试类

    e按测试模块来执行

    if __name__=="__main__":
    suite=unittest.TestLoader().loadTestsFromModult('f8.py')
    unittest.TextTestRunner(verbosity=2).run(suite)

    f优化测试套件

    #!/usr/bin/env python
    # coding:utf-8

    import unittest
    from selenium import webdriver

    class BaiduLink(unittest.TestCase):
    def setUp(self):
    self.driver=webdriver.Chrome()
    self.driver.maximize_window()
    self.driver.implicitly_wait(30)
    self.driver.get('http://www.baidu.com')
    def tearDown(self):
    self.driver.quit()
    pass
    def test_001(self):
    self.driver.find_element_by_link_text('新闻').click()
    def test_002(self):
    self.driver.find_element_by_link_text('地图').click()
    @staticmethod
    def suite():
    suite = unittest.TestSuite(unittest.makeSuite(BaiduLink))
    return suite
    if __name__ =="__main__":
    unittest.TextTestRunner(verbosity=2).run(BaiduLink.suite())

    5.分离测试固件(模块化的应用)

    init.py

    #! /usr/bin/env python
    codring:utf-8

    import unittest
    from selenium import webdriver
    class Init(unittest.TestCase):
    def setUp(self):
    self.driver=webdriver.Chrome()
    self.driver.maximize_window()
    self.driver.implicity_wait(30)
    self.driver.get('http://www.baidu.com')
    def tearDown(self):
    self.driver.quit()



    #!/usr/bin/env python
    # coding:utf-8
    import unittest

    from Day10.Init import *
    class BaiduSo(Init):

    self test_baidu_news(self):
    self.driver.find_element_by_id('kw').send_keys('webdriver')

    if __name__=="__main__":
    unittest.main(verbosity=2)

    取消测试用例
    @unittest.skip('该功能已经取消,忽略该测试用例的执行')
    @unittest.expectedFailure 期望测试用例执行失败
     

    6.测试断言

    assertEqual(a,b)  内容一致,类型一致

    #coding:utf-8
    import unittest
    from Day10.init import *

    class BaiduLink(Init):
    def test_baidu_news(self):
    print(self.driver.title,type(self.driver.title))
    self.assertEqual(self.driver.title,u'百度一下,你就知道')

    if __name__=="__main__":
    unittest.main(verbosity=2)

    assertTrue(x)

    def test_baidu_so(self):
    so = self.driver.find_element_by_id('kw')
    print so.is_enable()
    self.assertTrue(so.is_enabled())

    assertIn(a,b)

    def test_baidu_title(self):
    self.assertIn('百度',self.driver.title)

    测试断言注意事项

       不正确的使用if

      不正确的使用异常

    7.批量执行测试用例(discover)

    #!/usr/bin/env python
    # coding:utf-8

    import unittest
    import os

    def allTests():
    suite=unittest.TestLoader.discover(
    start_dir = os.path.dirname(__file__),
    pattern = 'test_*.py',
    top_level_dir=None)
    return suite

    def run():
    unittest.TextTestRunner(verbosity=2).run(allTests())

    if __name__=="__main__":
    run()

    a.获取所有测试用例

    b.discover方法的解读

    8.生成测试报告

    a.python2测试报告的生成

    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')

    b.python3测试报告的生成

    !/usr/bin/env python
    # coding:utf-8

    import unittest
    import os
    import HTMLTestRunner

    def allTests():
    suite=unittest.TestLoader.discover(
    start_dir = os.path.dirname(__file__),
    pattern = 'test_*.py',
    top_level_dir=None)
    return suite

    def run():
    fp=os.path.join(os.path.dirname(__file__),'report','testReport.html')
    HTMLTestRunner.HTMLRunner(
    stream = open(fp,'wb'),
    title ='自动化测试报告',
    description='自动化测试详细信息').run(allTests())


    if __name__=="__main__":
    run()

    c.测试报告的注意事项

    d.新增当前时间

    9.unittest的缺陷

    10.Coverage的应用

  • 相关阅读:
    一分钟学会 ConstraintLayout 之从属性角度理解布局
    halcon采集一幅图像
    halcon连续采集图像
    LinearLayout布局
    Html input 标签
    Html 标签种类
    Html div 标签
    Html span 标签
    Html h1-h6 标签
    Html br 标签
  • 原文地址:https://www.cnblogs.com/hyzhang/p/10776060.html
Copyright © 2020-2023  润新知