使用Python学习selenium测试工具-3:unittest库介绍
来源:互联网 发布:php 伪造来路 编辑:程序博客网 时间:2024/04/27 14:38
主要组成如下:
Test Fixture:准备及清理工作。
Test Case: 通常是使用assert方法检查动作和输入的响应,一般是基于TestCase类扩充。
Test Suite:多个测试的集合。
Test Runner:测试执行。
Test Report:测试报告。
测试通常由3A组成:
Arrange:预置条件、相关配置和依赖等。
Act:实际功能。
Assert:断言。
其他框架有Pytest和Nose等。
TestCase类
测试方法以test_开头
import unittestfrom selenium import webdriverclass SearchTests(unittest.TestCase): def setUp(self): # create a new Firefox session self.driver = webdriver.Firefox() self.driver.implicitly_wait(30) self.driver.maximize_window() # navigate to the application home page self.driver.get("http://demo.magentocommerce.com/") def test_search_by_category(self): # get the search textbox self.search_field = self.driver.find_element_by_name("q") self.search_field.clear() # enter search keyword and submit self.search_field.send_keys("phones") self.search_field.submit() # get all the anchor elements which have product names displayed # currently on result page using find_elements_by_xpath method products = self.driver\ .find_elements_by_xpath("//h2[@class='product-name']/a") self.assertEqual(2, len(products)) def test_search_by_name(self): # get the search textbox self.search_field = self.driver.find_element_by_name("q") self.search_field.clear() # enter search keyword and submit self.search_field.send_keys("salt shaker") self.search_field.submit() # get all the anchor elements which have product names displayed # currently on result page using find_elements_by_xpath method products = self.driver.\ find_elements_by_xpath("//h2[@class='product-name']/a") self.assertEqual(1, len(products)) def tearDown(self): # close the browser window self.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)执行结果:
# python searchtests.py
test_search_by_category (__main__.SearchTests) ... ok
test_search_by_name (__main__.SearchTests) ... ok
----------------------------------------------------------------------
Ran 2 tests in 138.375s
OK
基于类的setUp()和tearDown()方法
上面每个用例都会初始化和清理一次,有时这不一定是必要的。@classmethod支持在一个类中只进行一次初始化和清理。
import unittestfrom selenium import webdriverclass SearchTests(unittest.TestCase): @classmethod def setUpClass(cls): # create a new Firefox session cls.driver = webdriver.Firefox() cls.driver.implicitly_wait(30) cls.driver.maximize_window() # navigate to the application home page cls.driver.get("http://demo.magentocommerce.com/") cls.driver.title def test_search_by_category(self): # get the search textbox self.search_field = self.driver.find_element_by_name("q") self.search_field.clear() # enter search keyword and submit self.search_field.send_keys("phones") self.search_field.submit() # get all the anchor elements which have product names displayed # currently on result page using find_elements_by_xpath method products = self.driver.\ find_elements_by_xpath("//h2[@class='product-name']/a") self.assertEqual(2, len(products)) def test_search_by_name(self): # get the search textbox self.search_field = self.driver.find_element_by_name("q") self.search_field.clear() # enter search keyword and submit self.search_field.send_keys("salt shaker") self.search_field.submit() # get all the anchor elements which have product names displayed # currently on result page using find_elements_by_xpath method products = self.driver.\ find_elements_by_xpath("//h2[@class='product-name']/a") self.assertEqual(1, len(products)) @classmethod def tearDownClass(cls): # close the browser window cls.driver.quit() if __name__ == '__main__': unittest.main(verbosity=2)
断言
断言有3种类型:相等、逻辑比较、异常。如果断言不通过,当前测试用例会停止,并报错。详细的断言参见unittest。
另外fail()可以无条件让用例失败。
测试用例集(Test suites)
通过TestSuite, TestLoader和TestRunner可以有效地组织测试用例集。
先添加文件homepagetests.py,演示上面部分断言。
import unittestfrom selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.webdriver.common.by import Byfrom __builtin__ import classmethodclass HomePageTest(unittest.TestCase): @classmethod def setUp(cls): # create a new Firefox session """ cls.driver = webdriver.Firefox() cls.driver.implicitly_wait(30) cls.driver.maximize_window() # navigate to the application home page """ cls.driver.get('http://demo-store.seleniumacademy.com/') def test_search_field(self): # check search field exists on Home page self.assertTrue(self.is_element_present(By.NAME, 'q')) def test_language_option(self): # check language options dropdown on Home page self.assertTrue(self.is_element_present(By.ID, 'select-language')) def test_shopping_cart_empty_message(self): # check content of My Shopping Cart block on Home page shopping_cart_icon = self.driver.\ find_element_by_css_selector('div.header-minicart span.icon') shopping_cart_icon.click() shopping_cart_status = self.driver.\ find_element_by_css_selector('p.empty').text self.assertEqual('You have no items in your shopping cart.', shopping_cart_status) close_button = self.driver.\ find_element_by_css_selector('div.minicart-wrapper a.close') close_button.click() @classmethod def tearDown(cls): # close the browser window cls.driver.quit() def is_element_present(self, how, what): """ Utility method to check presence of an element on page :params how: By locator type :params what: locator value """ try: self.driver.find_element(by=how, value=what) except NoSuchElementException, e: return False return Trueif __name__ == '__main__': unittest.main(verbosity=2)
再组合起来,见smoketests.py:
import unittestfrom searchtests import SearchTestsfrom homepagetests import HomePageTest# get all tests from SearchProductTest and HomePageTest classsearch_tests = unittest.TestLoader().loadTestsFromTestCase(SearchTests)home_page_tests = unittest.TestLoader().loadTestsFromTestCase(HomePageTest)# create a test suite combining search_test and home_page_testsmoke_tests = unittest.TestSuite([home_page_tests, search_tests])# run the suiteunittest.TextTestRunner(verbosity=2).run(smoke_tests)
执行结果:
# python smoketests.py
test_language_option (homepagetests.HomePageTest) ... ok
test_search_field (homepagetests.HomePageTest) ... ok
test_shopping_cart_empty_message (homepagetests.HomePageTest) ... ok
test_search_by_category (searchtests.SearchTests) ... ok
test_search_by_name (searchtests.SearchTests) ... ok
----------------------------------------------------------------------
Ran 5 tests in 223.231s
OK
生成HTML测试报告
插件 HTMLTestRunner可以帮助生成HTML报告。见 smoketests_with_html_report.py:
import unittestimport HTMLTestRunnerimport osfrom searchtests import SearchTestsfrom homepagetests import HomePageTest# get the directory path to output report fileresult_dir = os.getcwd()# get all tests from SearchProductTest and HomePageTest classsearch_tests = unittest.TestLoader().loadTestsFromTestCase(SearchTests)home_page_tests = unittest.TestLoader().loadTestsFromTestCase(HomePageTest)# create a test suite combining search_test and home_page_testsmoke_tests = unittest.TestSuite([home_page_tests, search_tests])# open the report fileoutfile = open(result_dir + '\SmokeTestReport.html', 'w')# configure HTMLTestRunner optionsrunner = HTMLTestRunner.HTMLTestRunner(stream=outfile, title='Test Report', description='Smoke Tests')# run the suite using HTMLTestRunnerrunner.run(smoke_tests)
- 使用Python学习selenium测试工具-3:unittest库介绍
- Selenium Python自动化测试学习知识积累-unittest
- 【Python】Unittest,DDT,Selenium测试百度搜索
- python unittest测试框架介绍
- python unittest测试框架介绍
- 使用Python学习selenium测试工具-2:快速入门
- 使用Python学习selenium测试工具-4:查找元素
- 使用Python学习selenium测试工具-5:元素交互
- 使用Python学习selenium测试工具-6:同步
- Selenium自动化测试-unittest单元测试框架使用
- 自动化测试工具selenium使用介绍
- 自动化测试工具selenium使用介绍
- python 使用unittest 测试接口
- 使用Python学习selenium测试工具-1:Selenium的前生今世
- 基于《Selenium 2自动化测试实战》的学习笔记(3)—— selenium 工具介绍
- python自动化测试unittest+selenium+HTMLTestRunner(一)
- python自动化测试unittest+selenium+HTMLTestRunner(二)
- 使用unittest测试框架来写selenium的TestCase
- webvirtmgr推荐
- svm从理论到opencv实践
- 图像处理类期刊
- csharp: Procedure with DAO and DAL
- android 6 中init.rc的生成过程
- 使用Python学习selenium测试工具-3:unittest库介绍
- 计算机系统概论
- 113. Path Sum II
- 高效能,大数据量存储方案SqlBulkCopy
- Js 获得SharePoint2013 指定的people Picker 全部用户信息
- 分布式TensorFlow:在Spark上将谷歌的深度学习库进行尺度变换
- spring boot 使用velocity模板
- sunlggggJAVA学习
- Git 常用命令整理