unittest详解(一) unittest框架

unittest 介绍了4 个重要的概念: test case, test suite, test runner,test fixture。

    1、testcase: 一个TestCase 的实例就是一个测试用例, 就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),实现测试过程的代码(run),以及测试后环境的还原(tearDown)。元测试(unittest)的本质也就在这里,一个测试用例是一个完整的测试单元,通过运行这个测试单元,可以对某一个功能进行验证。

  setUp 用于设置初始化工作,在每一个测试用例前先被执行,它与tearDown方法相呼应,后者在每一个测试用例执行后被执行。这里的初始化工作定义了浏览器启动和基础URL 地址。

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.base_url = "https://172.1.1.1/"
        self.verificationErrors = []
        self.accept_next_alert = True

  tearDown 方法在每个测试方法执行后调用,这个方法用于完成测试用例执行后的清理工作,如退出浏览器、关闭驱动,恢复用例执行状态等。在setUp()方法中定义了verificationErrors 为空数组,这里通过assertEqual()比较其是否为空,如果为空说明用例执行的过程过程中没有出现异常,否则将抛出AssertionError 异常:

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

  2、testsuite: 对一个功能的验证往往是需要多测试用例的,可以把多的测试用例集合在一起执行,这就产生了测试套件TestSuite 的概念,它用来组装单个测试用例,而且TestSuite 也可以嵌套TestSuite。

testSuite()可以被看作一个容器(测试套件),通过addTest 方法我们可罗列具体所要执行的测试用例。如果使用unittest.main() 的话默认会执行所有以test 开头的测试用例。

  3、testrunner: TextTestRunner 是来执行测试用例的,其中的run(test)用来执行TestSuite/TestCase。测试的结果会保存到TextTestResult 实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息。

  4、testfixture: 对一个测试用例环境的搭建和销毁,是一个fixture,通过覆盖TestCase 的setUp()和tearDown()方法来实现. 

  了解unittest框架之后,练习一个登录的例子,代码如下:

# coding=utf-8
from selenium import webdriver
import unittest

class task_a(unittest.TestCase):
    def setUp(self): #每个测试用例之前执行
        self.driver=webdriver.Chrome()
        self.url="https://172.1.1.1"
        self.verificationErrors=[]
        self.accept_next_alter=True
    def tearDown(self):  #每个测试用例之后执行
        self.driver.quit()
        self.assertEqual([],self.verificationErrors)
    def test_1(self):
        u"测试用例1"
        driver=self.driver
        driver.get(self.url)
        driver.maximize_window()
        username='user1'
        driver.find_element_by_css_selector("input.login-form").send_keys(username) #定位到用户名输入框
        driver.find_element_by_css_selector("input.passwd").send_keys('123456') #定位到密码输入框
        driver.find_element_by_css_selector("input.btn.btn-default").click()  #点击登录按钮
        info = driver.find_element_by_css_selector("#userMenu > div.user-id").text
        self.assertEqual(username, info)
        print("login用例执行完成")
if __name__=='__main__':
    unittest.main()

 

 

posted @ 2018-10-11 17:56  Sunmer09  阅读(1761)  评论(2编辑  收藏  举报