注意测试用例方法需要用test开头
verbosity 默认值为1, 0代表执行测试总数和全局结果,2代表显示详细信息
0 (静默模式): 你只能获得总的测试用例数和总的结果 比如 总共100个 失败20 成功80
1 (默认模式): 非常类似静默模式 只是在每个成功的用例前面有个“.” 每个失败的用例前面有个 “F”
2 (详细模式):测试结果会显示每个测试用例的所有相关的信息。
测试固件
每一个测试用例均执行一次测试固件
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的几种方法
-
loadTestsFromTestCase(testCaseClass)
testCaseClass必须是TestCase的子类(或孙类也行) -
loadTestsFromModule(module, pattern=None)
test case所在的module -
loadTestsFromName(name, module=None)
name是一个string,string需要是是这种格式的“module.class.method” -
loadTestsFromNames(name, module=None)
names是一个list,用法与上同 -
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)