python unitest单元测试

注意测试用例方法需要用test开头
verbosity 默认值为1, 0代表执行测试总数和全局结果,2代表显示详细信息
0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功80
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
2 (详细模式):测试结果会显示每个测试用例的所有相关的信息。

uniitest相关模块介绍参考文献

测试固件

每一个测试用例均执行一次测试固件

from selenium import webdriver
import unittest
from time import sleep

class Zxw_test(unittest.TestCase):
    def setUp(self) -> None:    # 初始化方法  测试固件
        self.webdr= webdriver.Firefox()
        self.webdr.maximize_window()
        self.webdr.get("https://www.51zxw.net/")
        self.webdr.implicitly_wait(30)
    def tearDown(self) -> None:    # 测试完成后处理  测试固件
        self.webdr.quit()

    def test_design_programe(self):
        self.webdr.find_element_by_link_text("程序设计").click()
        sleep(5)
    def test_search(self):    
        self.webdr.find_element_by_id("keyWordsT").send_keys("python")
        sleep(5)
        self.webdr.find_element_by_css_selector(".Hui-iconfont-search2").click()
        sleep(5)
if __name__ == '__main__':
    unittest.main(verbosity=1)

所有测试用例均执行一次测试固件

from selenium import webdriver
import unittest
from time import sleep

class Zxw_test(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.test_url = "https://www.51zxw.net/"
        cls.webdr = webdriver.Firefox()
        cls.webdr.maximize_window()
        cls.webdr.get(cls.test_url)
        cls.webdr.implicitly_wait(30)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.webdr.quit()
        print("测试关闭")

    def test_design_program(self):
        self.webdr.find_element_by_link_text("程序设计").click()
        sleep(3)
        self.assertEqual(self.webdr.title,"程序开发-我要自学网")
        self.webdr.find_element_by_css_selector("a.node:nth-child(14)")
        sleep(5)
        self.webdr.get(self.test_url)
        print("测试程序设计")
    def test_search(self):
        self.webdr.find_element_by_id("keyWordsT").send_keys("python")
        sleep(3)
        self.webdr.find_element_by_css_selector(".Hui-iconfont-search2").click()
        sleep(4)
        self.assertEqual(self.webdr.title,"网站搜索-我要自学网")

        self.webdr.get(self.test_url)
        print("测试搜索")

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

测试套件(用来组织测试用例的执行顺序)

1、按顺序执行

from selenium import webdriver
import unittest
from time import sleep

class Zxw_test(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.test_url = "https://www.51zxw.net/"
        cls.webdr = webdriver.Firefox()
        cls.webdr.maximize_window()
        cls.webdr.get(cls.test_url)
        cls.webdr.implicitly_wait(30)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.webdr.quit()
        print("测试关闭")

    def test_design_program(self):
        self.webdr.find_element_by_link_text("程序设计").click()
        sleep(3)
        self.assertEqual(self.webdr.title,"程序开发-我要自学网")
        self.webdr.find_element_by_css_selector("a.node:nth-child(14)")
        sleep(5)
        self.webdr.get(self.test_url)
        print("测试程序设计")
    def test_search(self):
        self.webdr.find_element_by_id("keyWordsT").send_keys("python")
        sleep(3)
        self.webdr.find_element_by_css_selector(".Hui-iconfont-search2").click()
        sleep(4)
        self.assertEqual(self.webdr.title,"网站搜索-我要自学网")
        self.webdr.get(self.test_url)
        print("测试搜索")

if __name__ == '__main__':
    suit = unittest.TestSuite()     #  将测试套件实例化
    suit.addTest(Zxw_test("test_design_program"))   #添加第一个测试用例
    suit.addTest(Zxw_test("test_search"))           #添加第二个测试用例
    unittest.TextTestRunner(verbosity=2).run(suit)      #根据添加顺序执行测试用例

2、按照测试类执行(makeSuite)

from selenium import webdriver
import unittest
from time import sleep

class Zxw_test(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.test_url = "https://www.51zxw.net/"
        cls.webdr = webdriver.Firefox()
        cls.webdr.maximize_window()
        cls.webdr.get(cls.test_url)
        cls.webdr.implicitly_wait(30)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.webdr.quit()
        print("测试关闭")

    def test_design_program(self):
        self.webdr.find_element_by_link_text("程序设计").click()
        sleep(3)
        self.assertEqual(self.webdr.title,"程序开发-我要自学网")
        self.webdr.find_element_by_css_selector("a.node:nth-child(14)")
        sleep(5)
        self.webdr.get(self.test_url)
        print("测试程序设计")
    def test_search(self):
        self.webdr.find_element_by_id("keyWordsT").send_keys("python")
        sleep(3)
        self.webdr.find_element_by_css_selector(".Hui-iconfont-search2").click()
        sleep(4)
        self.assertEqual(self.webdr.title,"网站搜索-我要自学网")
        self.webdr.get(self.test_url)
        print("测试搜索")

if __name__ == '__main__':
    suit = unittest.TestSuite(unittest.makeSuite(Zxw_test))   # 按照测试类组织测试
    unittest.TextTestRunner(verbosity=2).run(suit)

3、加载测试类(TestLoader)

unittest.TestLoader()提供了创建test suite的几种方法

  1. loadTestsFromTestCase(testCaseClass)
    testCaseClass必须是TestCase的子类(或孙类也行)

  2. loadTestsFromModule(module, pattern=None)
    test case所在的module

  3. loadTestsFromName(name, module=None)
    name是一个string,string需要是是这种格式的“module.class.method”

  4. loadTestsFromNames(name, module=None)
    names是一个list,用法与上同

  5. discover(start_dir, pattern=’test*.py’, top_level_dir=None)
    从python文件中获取test cases

测试用例(for_all.py)

class DefaultTestCase(unittest.TestCase):
    def setUp(self):
        print "Start to run"
    def tearDown(self):
        print "Close"

class CasesALL(DefaultTestCase):
    def ab_test_print_b(self):
        print 'b',
        print time.time()
        time.sleep(2)

运行测试用例

import unittest
from unittest import TestLoader
import for_all
from for_all import CasesALL

if __name__ == '__main__':
    suite = unittest.TestSuite()
    loader = TestLoader()
    loader.testMethodPrefix = 'ab'
    # loader.sortTestMethodsUsing = None
    # test_cases_name = loader.getTestCaseNames(CasesALL)
    test_cases1 = unittest.TestLoader().loadTestsFromTestCase(CasesALL)
    test_cases2 = unittest.TestLoader().loadTestsFromModule(for_all)
    test_cases3 = unittest.TestLoader().loadTestsFromName('for_all.CasesALL.ab_test_print_b')
    suite.addTests(test_cases1)
    suite.addTests(test_cases2)
    suite.addTests(test_cases3)
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(suite)

以上内容参考

from selenium import webdriver
import unittest
from time import sleep

class Zxw_test(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.test_url = "https://www.51zxw.net/"
        cls.webdr = webdriver.Firefox()
        cls.webdr.maximize_window()
        cls.webdr.get(cls.test_url)
        cls.webdr.implicitly_wait(30)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.webdr.quit()
        print("测试关闭")

    def test_design_program(self):
        self.webdr.find_element_by_link_text("程序设计").click()
        sleep(3)
        self.assertEqual(self.webdr.title,"程序开发-我要自学网")
        self.webdr.find_element_by_css_selector("a.node:nth-child(14)")
        sleep(5)
        self.webdr.get(self.test_url)
        print("测试程序设计")
    def test_search(self):
        self.webdr.find_element_by_id("keyWordsT").send_keys("python")
        sleep(3)
        self.webdr.find_element_by_css_selector(".Hui-iconfont-search2").click()
        sleep(4)
        self.assertEqual(self.webdr.title,"网站搜索-我要自学网")
        self.webdr.get(self.test_url)
        print("测试搜索")

if __name__ == '__main__':
    suit = unittest.TestLoader().loadTestsFromTestCase(Zxw_test)     #加载测试类
    unittest.TextTestRunner(verbosity=2).run(suit)

4、按照测试模块执行

含有测试用例的文件,名称temp2.py,其父目录为boss_job

from selenium import webdriver
import unittest
from time import sleep
from boss_job import temp2

class Zxw_test(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.test_url = "https://www.51zxw.net/"
        cls.webdr = webdriver.Firefox()
        cls.webdr.maximize_window()
        cls.webdr.get(cls.test_url)
        cls.webdr.implicitly_wait(30)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.webdr.quit()
        print("测试关闭")

    def test_design_program(self):
        self.webdr.find_element_by_link_text("程序设计").click()
        sleep(3)
        self.assertEqual(self.webdr.title,"程序开发-我要自学网")
        self.webdr.find_element_by_css_selector("a.node:nth-child(14)")
        sleep(5)
        self.webdr.get(self.test_url)
        print("测试程序设计")
    def test_search(self):
        self.webdr.find_element_by_id("keyWordsT").send_keys("python")
        sleep(3)
        self.webdr.find_element_by_css_selector(".Hui-iconfont-search2").click()
        sleep(4)
        self.assertEqual(self.webdr.title,"网站搜索-我要自学网")
        self.webdr.get(self.test_url)
        print("测试搜索")
class TianMao(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.test_url = "https://www.tmall.com/"
        cls.webdr = webdriver.Firefox()
        cls.webdr.maximize_window()
        cls.webdr.get(cls.test_url)
        cls.webdr.implicitly_wait(30)

    @classmethod
    def tearDownClass(cls) -> None:
        cls.webdr.quit()

    def test_electric(self):
        self.webdr.find_element_by_link_text("电器城").click()
        sleep(3)
        self.webdr.get(self.test_url)

用来执行测试用例的文件

from boss_job import temp2    # 需要先导入需要测试的模块
import unittest

if __name__ == '__main__':
    suit = unittest.TestLoader().loadTestsFromModule(temp2)
    unittest.TextTestRunner(verbosity=2).run(suit)

5、分离测试固件

将测试用例分离到单独一个模块,起名为temp2.py

from selenium import webdriver
import unittest


class InitTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.test_url = "https://www.51zxw.net/"
        cls.webdr = webdriver.Firefox()
        cls.webdr.maximize_window()
        cls.webdr.get(cls.test_url)
        cls.webdr.implicitly_wait(30)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.webdr.quit()
        print("测试关闭")

测试用例模块继承测试固件模块,命名for_all

import unittest
from time import sleep
from boss_job.temp2 import InitTest
from boss_job import for_all


class Zxw_Test(InitTest):
    def test_design_program(self):
        self.webdr.find_element_by_link_text("程序设计").click()
        sleep(3)
        self.assertEqual(self.webdr.title,"程序开发-我要自学网")
        self.webdr.find_element_by_css_selector("a.node:nth-child(14)")
        sleep(5)
        self.webdr.get(self.test_url)
        print("测试程序设计")
    def test_search(self):
        self.webdr.find_element_by_id("keyWordsT").send_keys("python")
        sleep(3)
        self.webdr.find_element_by_css_selector(".Hui-iconfont-search2").click()
        sleep(4)
        self.assertEqual(self.webdr.title,"网站搜索-我要自学网")
        self.webdr.get(self.test_url)
        print("测试搜索")


if __name__ == '__main__':
    suit = unittest.TestLoader().loadTestsFromModule(for_all)
    unittest.TextTestRunner(verbosity=2).run(suit)

6、批量执行测试用例

第一个测试网站测试代码,命名为Zxw_test.py

from time import sleep
from selenium import webdriver
import unittest
class Zxw_Test(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.test_url = "https://www.51zxw.net/"
        cls.webdr = webdriver.Firefox()
        cls.webdr.maximize_window()
        cls.webdr.get(cls.test_url)
        cls.webdr.implicitly_wait(30)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.webdr.quit()
        print("测试关闭")
        sleep(2)
    def test_design_program(self):
        self.webdr.find_element_by_link_text("程序设计").click()
        sleep(3)
        self.assertEqual(self.webdr.title,"程序开发-我要自学网")
        self.webdr.find_element_by_css_selector("a.node:nth-child(14)")
        sleep(5)
        self.webdr.get(self.test_url)
        print("测试程序设计")
    def test_search(self):
        self.webdr.find_element_by_id("keyWordsT").send_keys("python")
        sleep(3)
        self.webdr.find_element_by_css_selector(".Hui-iconfont-search2").click()
        sleep(4)
        self.assertEqual(self.webdr.title,"网站搜索-我要自学网")
        self.webdr.get(self.test_url)
        print("测试搜索")

第二个测试网站测试代码,命名为Baidu_test.py

import unittest
from selenium import webdriver

class Baidu_test(unittest.TestCase):
    @classmethod
    def setUpClass(cls) -> None:
        cls.webdr = webdriver.Firefox()
        cls.webdr.maximize_window()
        cls.webdr.get("http://www.baidu.com")
        cls.webdr.implicitly_wait(30)
    @classmethod
    def tearDownClass(cls) -> None:
        cls.webdr.quit()
    def test_newpage(self):
        self.webdr.find_element_by_link_text("新闻").click()
        self.assertEqual(self.webdr.title,"百度新闻——海量中文资讯平台")
        self.webdr.save_screenshot()
        print("百度测试")

批量执行

import unittest
import os

if __name__ == '__main__':
    suit = unittest.TestLoader().discover(start_dir=os.path.dirname(__file__), pattern="*_test.py", top_level_dir=None)
    unittest.TextTestRunner(verbosity=2).run(suit)

跳过测试和预期失败

unittest.skip() # 直接跳过
unittest.skipIf() # 条件为真,跳过测试
unittest.skipUnless() # 条件为假,跳过测试
unittest.expectedFailure() # 预期设置失败

import unittest
class Test1(unittest.TestCase):
    flag= False
    def setUp(self) -> None:
        print("Test1 start")
    def tearDown(self) -> None:
        print("Test1 end")
    @unittest.skip("说明跳过原因")    # 直接跳过
    def test_a(self):
        print("test_a")
    @unittest.skipIf(4>3,"No fininshed")  #条件为真,跳过测试,两个参数一个为条件,一个是说明
    def test_b(self):
        print("test_b")
    def test_e(self):
        print("test_e")
class Test2(unittest.TestCase):
    def setUp(self) -> None:
        print("Test2 start")
    def tearDown(self) -> None:
        print("Test2 end")
    @unittest.skipUnless(1<0,"前面条件不成立")               # 条件为假时跳过
    def test_c(self):
        print("test_c")
    @ unittest.expectedFailure
    def test_d(self):
        print("test_d")
    def test_f(self):
        print("test_f")

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

参考:
Python 单元测试 Python 单元测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值