(一) Test Suite测试套件
一个测试套件是多个测试或测试用例的集合,是针对被测程序的对应的功能和模块创建的一组测试,一个测试套件内的测试用例将一起执行。
应用unittest的TestSuites特性,可以将不同的测试组成一个逻辑组,然后设置统一的测试套件,并通过一个命令来执行测试。这都是通过TestSuites、TestLoader和TestRunn类来实现的。
(二) 类级别的setUp()方法和tearDown()方法
使用setUpClass()方法和tearDownClass()方法及@classmethod标识来实现各个测试方法共享初始化数据。具体看下面的代码。
(三) searchtest.py
import unittest
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChainsimport time
class SearchTest(unittest.TestCase): ‘‘‘通过setUpClass()和@classmethod标识,实现 在类级别初始化数据,所有测试方法共享这些初始化数据. 不使用这个的话,每个测试方法都会单独创建一个实例‘‘‘ @classmethod def setUpClass(cls): cls.driver = webdriver.Firefox() cls.driver.implicitly_wait(10) cls.driver.maximize_window() cls.driver.get("https://www.cnblogs.com/") def test_search_by_category(self): #读取category.txt文件,返回一个字典 with open(‘data/category.txt‘, encoding=‘UTF-8‘) as category_file: category_dict = dict() category_data = category_file.readline().strip().split(‘,‘) the_class = category_data.pop(0) category_dict[the_class] = category_data #定位首页网站分类中的编程语言 self.search_class = self.driver.find_element_by_xpath(‘//li/a[@href="/cate/2/"]‘) #光标悬停在“编程语言”上 ActionChains(self.driver).move_to_element(self.search_class).perform() # 以列表形式返回编程语言下的所有小类 self.search_small = self.driver.find_elements_by_xpath( ‘//div[@id="cate_content_block_2"]/div[@class="cate_content_block"]/ul/li‘) #休眠3秒 time.sleep(3) small_cate = [] for s in self.search_small: #去掉小类最后面的(0),并添加到列表small_cate中 small = str(s.text).split(‘(‘) small_cate.append(small[0]) #检查表达式是否为true(此处检查编程语言下的小类是否与预期结果一致) self.assertTrue(small_cate == category_dict["编程语言"]) # self.assertEqual(small_cate,category_dict["编程语言"]) def test_search_by_look(self): self.seach_class = self.driver.find_element_by_xpath(‘//li/a[@href="/cate/2/"]‘) #定位编程语言下的小类Python self.seach_small =self.driver.find_element_by_xpath(‘//li/a[@href="/cate/python/"]‘) ActionChains(self.driver).move_to_element(self.seach_class).perform() self.seach_small.click() #检查打开的网页标题是不是 Python - 网站分类 - 博客园 # assert "Python - 网站分类 - 博客园" in self.driver.title self.assertEqual(self.driver.title,"Python - 网站分类 - 博客园" ) ‘‘‘通过tearDownClass()和@classmethod标识,实现 在类级别初始化数据,所有测试方法共享这些初始化数据‘‘‘ @classmethod def tearDownClass(cls): cls.driver.quit() #加上下面2句,可以通过命令行运行测试,不加的话不影响通过IDE运行测试 if __name__ == ‘__main__‘: #加verbosity=2参数,在命令行中显示具体的测试方法 unittest.main(verbosity=2)
(四) homepagetest.py
import unittest from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from selenium.webdriver.common.by import By class HomePageTest(unittest.TestCase): ‘‘‘通过setUpClass()和@classmethod标识,实现 在类级别初始化数据,所有测试方法共享这些初始化数据. 不使用这个的话,每个测试方法都会单独创建一个实例‘‘‘ @classmethod def setUpClass(cls): cls.driver = webdriver.Firefox() cls.driver.implicitly_wait(10) cls.driver.maximize_window() cls.driver.get("https://www.cnblogs.com/") def test_search_field(self): #通过by,检查博客园首页有没有搜索框,is_element_present()是自定义的方法 self.assertTrue(self.is_element_present(By.ID,"zzk_q")) def test_search_btn(self): # 通过by,检查博客园首页有没有找找看按钮 self.assertTrue(self.is_element_present(By.CLASS_NAME,"search_btn")) def test_menu(self): #该方法检查博客园首页菜单栏信息是否与预期一致 #读取menu.txt文件数据 with open(‘data/menu.txt‘,encoding=‘UTF-8‘) as menu_file: menu_data = menu_file.readline().strip().split(‘,‘) #以列表形式返回博客园首页菜单栏信息 self.check_menu = self.driver.find_elements_by_xpath(‘//div[@id="nav_menu"]/a‘) the_menu = [] for c in self.check_menu: #将博客园首页的菜单名称和URL添加到列表the_menu the_menu.append(c.text + c.get_attribute(‘href‘)) #检查2个列表是否一致(检查博客园首页的菜单名称及URL是否和预期一致) self.assertListEqual(the_menu,menu_data) def is_element_present(self,how,what): #找到元素,返回True,否则返回False try: self.driver.find_element(by=how,value = what) except NoSuchElementException as e: return False return True @classmethod def tearDownClass(cls): cls.driver.quit() # 加上下面2句,可以通过命令行运行测试,不加的话不影响通过IDE运行测试 if __name__ == ‘__main__‘: # 加verbosity=2参数,在命令行中显示具体的测试方法 unittest.main(verbosity=2)
(五) smoketests.py (测试套件)
import unittest from searchtest import SearchTest from homepagetest import HomePageTest #获取SearchTest类 和 HomePageTest类中的所有测试方法 search_test = unittest.TestLoader().loadTestsFromTestCase(SearchTest) home_page_test = unittest.TestLoader().loadTestsFromTestCase(HomePageTest) #创建一个包括SearchTest和HomePageTest的测试套件 smoke_tests = unittest.TestSuite([home_page_test,search_test]) #运行测试套件 unittest.TextTestRunner(verbosity=2).run(smoke_tests)
(六) 其他说明
#另外一个文件在上一篇中已经说明
要完全使用上面的代码,需要创建一个文件menu.txt,输入以下数据:
园子https://home.cnblogs.com/,新闻https://news.cnblogs.com/,博问https://q.cnblogs.com/,闪存https://ing.cnblogs.com/,小组https://group.cnblogs.com/,收藏https://wz.cnblogs.com/,招聘https://job.cnblogs.com/,班级https://edu.cnblogs.com/,找找看http://zzk.cnblogs.com/
(七) 运行smoketests.py
原文地址:https://www.cnblogs.com/simple-free/p/8443463.html
时间: 2024-08-28 12:32:15