Unittest单元测试框架——二

接昨天的博客,今天继续学习Unittest单元测试框架

编写测试

搜索一个产品,检查是否返回一些相应的结果。test方法是在TestCase类中实现。重要的一点是需要给测试方法命名为test开头。
对于test runner能找到的每个测试方法,都会在执行测试方法之前先执行setUP()方法,确保每个测试方法都能依赖相同的环境,无论类中有多少测试方法。使用assertEqual()方法来验证用程序搜索该术语返回的结果是否和预期结果相匹配。

添加一个新的测试方法test_search_by_category(),通过分类来搜索产品,然后校验返回的产品的数量是否正确。如下所示:

import unitttest
from  selenium import webdriver

class 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 testbox
       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))

代码清理
TestCase类会在测试执行完成后调用tearDown()方法来清理所有的初始化值。在测试完成的时候清理掉由setUP() 方法初始化的数值。

在例子中,测试执行完成后,不需要Firefox的实例,将在tearDown()方法中关闭Firefox实例:

import unittest
from selenium import webdriver

class 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 testbox
       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 tearDown(self):
       #close the browser window
       self.driver.quit()

运行测试
通过命令运行测试,在测试用例中添加对main方法的调用。
将传递verbosity参数以便使详细的测试总量展示在控制台

if_name_=='_main_':
     unittest.main(verbosity = 2)

可以把测试脚本保存为普通的python脚本。通过运行python 脚本名字.py来执行测试。

添加其他测试
为测试类添加其他的测试,新的测试方法命名也要以test开头

def test_search_by_name(self):
       #get the search testbox
       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))

运行这个测试类会看到两个Firefox的实例打开和关闭

&通过setUPClass()方法和tearDownClass()方法以及@classmethod标识来实现让各个测试方法共用一个Firefox实例,不用每次创建一个新的实例,代码修改为下:

import unittest
from selenium import webdriver

class 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 testbox
       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 testbox
       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() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值