zoukankan      html  css  js  c++  java
  • 自动化总结(三) Unittest的应用2

    一、简单用法

    unittest是python自带的一个单元测试框架,类似于java的junit,基本结构是类似的。基本用法如下:

    1.用import unittest导入unittest模块

    2.定义一个继承自unittest.TestCase的测试用例类,如class xxx(unittest.TestCase):

    3.定义setUp和tearDown,这两个方法与junit相同,即如果定义了则会在每个测试case执行前先执行setUp方法,执行完毕后执行tearDown方法。

    4.定义测试用例,名字以test开头,unittest会自动将test开头的方法放入测试用例集中。

    5.一个测试用例应该只测试一个方面,测试目的和测试内容应很明确。主要是调用assertEqual、assertRaises等断言方法判断程序执行结果和预期值是否相符。

    6.调用unittest.main()启动测试

    7.如果测试未通过,则会显示e,并给出具体的错误(此处为程序问题导致)。如果测试失败则显示为f,测试通过为.,如有多个testcase,则结果依次显示。

    二、unittest模块的常用方法

    assertEqual(a, b)     a == b

    assertNotEqual(a, b)     a != b

    assertTrue(x)     bool(x) is True

    assertFalse(x)     bool(x) is False

    assertIs(a, b)     a is b

    assertIsNot(a, b)     a is not b

    assertIsNone(x)     x is None

    assertIsNotNone(x)     x is not None

    assertIn(a, b)     a in b

    assertNotIn(a, b)     a not in b

    assertIsInstance(a, b)     isinstance(a, b)

    assertNotIsInstance(a, b)     not isinstance(a, b)

    官网案例:

    类TestSequenceFunctions继承自unittest.TestCase,在类中定义了3个testcase。

    unittest.main()调用Testloader加载这3个testcase到Testsuite,再用Testrunner运行testsuite,生成Testresult。

    从output中可以看出,执行每个testcase之前都会先setUp()初始化,执行完毕之后tearDown()清理环境。

    三、unittest主要常用函数

    python的unittest模块提供了一个测试框架,只要我们写一个继承unittest.TestCase的类,类中用setUp做初始化,用tearDown做清理。

    主要用到的函数有:

    failedinfo表示不成立打印信息failedinfo,为可选参数

    self.fail([msg])会无条件的导致测试失败,不推荐使用。

    self.assertEqual(value1, value2, failedinfo) # 断言value1 == value2

    self.assertTrue(表达式, failedinfo) # 断言value为真

    self.assertFalse(表达式, failedinfo) # 断言value为假

    断言肯定发生异常,如果没发生异常,则为测试失败。

    参数1为异常,参数二为抛出异常的调用对象,剩余参数为传递给可调用对象的参数。

    self.assertRaises(ValueError, self.widget.resize, -1, -1)

    调用时机的加self,如self.assertEqual(self.seq, range(10)),self.assertTrue(value > 100)

    四、unittest网易邮箱登录案例

    1.打开网易邮箱,写一个简单的登录;

    2.判断title完全等于期望结果;

    五、参考代码

    复制代码
    #!/usr/bin/env python# -*- coding: utf-8 -*-# @Author  : Ailie# @File    : mailLogin.py# @Software: PyCharmimport timeimport unittestfrom selenium import webdriverfrom selenium.webdriver.support import expected_conditions as ECclass mailLogin(unittest.TestCase):
        def setUp(self):
            url = 'https://mail.yeah.net/'
            self.browser = webdriver.Firefox()
            self.browser.get(url)
            time.sleep(5)    def test_login_01(self):
            '''
            用户名、密码为空
            '''
            self.browser.switch_to.frame("x-URS-iframe")
            self.browser.find_element_by_name('email').send_keys('')
            self.browser.find_element_by_name('password').send_keys('')
            self.browser.find_element_by_id('dologin').click()
            self.browser.switch_to.default_content()
            time.sleep(3)
            name = self.browser.find_element_by_id('spnUid')        if name == 'sanzang520@yeah.net':
                print('登录成功')        else:
                print('登陆失败')    def test_login_02(self):
            '''
            用户名正确、密码为错误
            '''
            self.browser.switch_to.frame("x-URS-iframe")
            self.browser.find_element_by_name('email').send_keys('sanzang520')
            self.browser.find_element_by_name('password').send_keys('xxx')
            self.browser.find_element_by_id('dologin').click()
            self.browser.switch_to.default_content()
            time.sleep(3)
            name = self.browser.find_element_by_id('spnUid')        if name == 'sanzang520@yeah.net':
                print('登录成功')        else:
                print('登陆失败')    def test_login_03(self):
            '''
            用户名、密码正确
            '''
            self.browser.switch_to.frame("x-URS-iframe")
            self.browser.find_element_by_name('email').send_keys('sanzang520')
            self.browser.find_element_by_name('password').send_keys('xxx')
            self.browser.find_element_by_id('dologin').click()
            self.browser.switch_to.default_content()
            time.sleep(3)
            name = self.browser.find_element_by_id('spnUid')        if name == 'sanzang520@yeah.net':
                print('登录成功')        else:
                print('登陆失败')    def tearDown(self):
            self.browser.quit()if __name__ == "__main__":
        unittest.main()
  • 相关阅读:
    SenCha Touch AJAX跨域
    MS SQL 索引分析
    Tomcat性能优化(二) 启动参数设置
    PLSQL 连接不上64位ORACLE数据库解决办法
    PLSQL 配置连接ORACLE数据库
    Mybatis Batch 批量操作
    [No000014]听说不背单词,考英语会是这种下场-我们为什么必须背单词?
    [No000000]常用软件测试编译环境声明
    [No000013]在Office中关闭自动拼写检查和自动语法检查
    [No000012]编程中浮点数之什么是科学计数法
  • 原文地址:https://www.cnblogs.com/keima/p/14858905.html
Copyright © 2011-2022 走看看