selenium小白学习笔记(5) - unittest框架之二

介绍一下unittest测试框架中最重要的四个部分:TestCase测试用例、Test Suite测试套件、Test Runner测试执行、Test Fixture测试环境准备。

脚本例子

先上个脚本吧:

import unittest
import time
from selenium import webdriver

class testBaidu(unittest.TestCase):
    
    def setUp(self):
        self.driver=webdriver.Chrome()
        self.url=r"http://www.baidu.com"

    def test_news(self):
        self.driver.get(self.url)
        self.driver.find_element_by_link_text("新闻").click()
        time.sleep(3)
        self.assertEqual(self.driver.current_url,r"http://news.baidu.com/")

    def test_hao123(self):
        self.driver.get(self.url)
        self.driver.find_element_by_link_text("hao123").click()
        time.sleep(3)
        self.assertEqual(self.driver.current_url,r"https://www.hao123.com/")

    def test_tieba(self):
        self.driver.get(self.url)
        self.driver.find_element_by_link_text("贴吧").click()
        time.sleep(3)
        self.assertEqual(self.driver.current_url,r"https://tieba.baidu.com/index.html")

    def tearDown(self):
        self.driver.quit()

if __name__=="__main__":
    mysuite=unittest.TestSuite()
    mysuite.addTest(testBaidu("test_news"))
    mysuite.addTest(testBaidu("test_hao123"))
    
    myrunner=unittest.TextTestRunner()
    myrunner.run(mysuite)

脚本说明

其实上一个博客中,我们已经接触了TestCase和TestFixture了,这节里我们加上TestSuite和TestRunner。
1、TestCase:我们这里还是新建了类testBaidu,继承了unittest.TestCase类,也就继承了该类的所有变量和方法。在testBaidu类里,我们新建了test_news,test_hao123,test_tieba这三个测试方法,分别用来测试能否正确打开百度新闻、hao123、百度贴吧页面。
2、TestSuite:测试套件,实际上就是一个测试用例组,里面可包含多个测试用例。例子中,
mysuite=unittest.TestSuite()先实例化了一个TestSuite
mysuite.addTest(testBaidu(“test_news”))再向该套件中添加了要执行的测试用例。
3、TestRunner:测试执行,与TestSuite配合使用,用来执行测试套件。
4、TestFixture:测试环境准备,指的就是setUp和tearDown方法,用来定义测试用例的前置和后置动作。

执行结果

1、例子中我们向套件中添加了两个用例,而没有将test_tieba添加进去,所以执行时,test_tieba并不会执行。
2、执行顺序,按照套件中添加用例的顺序执行,即先执行test_news,再执行test_hao123。这里就解决了上个博客中使用unittest.main()执行时执行顺序与期望不一致的问题。

更多TestFixture介绍

在上面脚本执行时,每一个测试方法执行时,步骤都是启动浏览器 - 执行测试用例 - 关闭浏览器,即要执行3个用例的话,浏览器会打开和关闭3次,是很浪费时间的。这里我们可使用类方法setUpClass和tearDownClass,类方法在整个测试类开始和结束时执行,而不是在测试方法开始和结束时执行。

脚本调整为:

import unittest
import time
from selenium import webdriver

class testBaidu(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver=webdriver.Chrome()
        cls.url=r"http://www.baidu.com"

    def test_news(self):
        self.driver.get(self.url)
        self.driver.find_element_by_link_text("新闻").click()
        time.sleep(3)
        self.assertEqual(self.driver.current_url,r"http://news.baidu.com/")

    def test_hao123(self):
        self.driver.get(self.url)
        self.driver.find_element_by_link_text("hao123").click()
        time.sleep(3)
        self.assertEqual(self.driver.current_url,r"https://www.hao123.com/")

    def test_tieba(self):
        self.driver.get(self.url)
        self.driver.find_element_by_link_text("贴吧").click()
        time.sleep(3)
        self.assertEqual(self.driver.current_url,r"https://tieba.baidu.com/index.html")

    @classmethod
    def tearDownClass(cls):
        cls.driver.quit()

if __name__=="__main__":
    mysuite=unittest.TestSuite()
    mysuite.addTest(testBaidu("test_news"))
    mysuite.addTest(testBaidu("test_hao123"))
    mysuite.addTest(testBaidu("test_tieba"))
    
    myrunner=unittest.TextTestRunner()
    myrunner.run(mysuite)

脚本与之前区别:
1、由类方法setUpClass代替setUp方法,由类方法tearDownClass代替tearDown方法。
2、类方法setUpClass的上方需要加上类装饰器@classmethod,来标识这是个类方法。
3、类方法的参数由self变为cls。

执行效果:
启动浏览器,执行三个测试用例,关闭浏览器。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值