Python单元测试框架unittest

一、简介

Python单元测试框架unittest,有时被称为“PyUnit”。PyUnit 是 xUnit 体系的一个成员,xUnit 是众多测试框架的总称,PyUnit 主要用于进行白盒测试和回归测试,与JUnit有很多相似的地方。

二、认识Unittest单元测试框架

1.Test Fixture :就是setUp()和tearDown(),对一个测试用例环境的搭建和销毁

2.Test Case:一个Test Case就是一个测试用例

3.Test Suite :是一个测试用例集合

三、PyUnit (unittest) 的基本用法

被测方法,简单的加减乘除

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

def multi(a, b):
    return a * b

def div(a, b):
    if b == 0:
        raise ValueError("invalid value:0")
    return a / b

测试用例的代码:

  • 测试方法没有返回值。
  • 测试方法不应该有任何参数。
  • 测试方法应以test 开头。
import unittest
import Calculation

class TestCalculation(unittest.TestCase):  #单元测试类必须继承 unittest.TestCase
    def setUp(self):
        pass

    def tearDown(self):
        pass

    def testAdd(self):
        self.assertEqual(3,Calculation.add(1,2))

    def testSub(self):
        self.assertTrue(Calculation.sub(3,2) == 1)

    def testMulti(self):
        self.assertFalse(Calculation.multi(3,3) == 5)

    def testDiv(self):
        with self.assertRaises(ValueError):
            Calculation.div(3,0)

if __name__ == '__main__':
    unittest.main()

测试结果

在这里插入图片描述

常见方法

方法检查一下
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)

异常、错误、警告和日志相关的断言方法

断言方法检查条件
assertRaises(exc, fun, *args, **kwds)fun(*args, **kwds) 引发 exc 异常
assertRaisesRegex(exc, r, fun, *args, **kwds)fun(*args, **kwds) 引发 exc 异常,且异常信息匹配 r 正则表达式
assertWarns(warn, fun, *args, **kwds)fun(*args, **kwds) 引发 warn 警告
assertWamsRegex(warn, r, fun, *args, **kwds)fun(*args, **kwds) 引发 warn 警告,且警告信息匹配 r 正则表达式
assertLogs(logger, level)With 语句块使用日志器生成 level 级别的日志

用于完成某种特定检查的断言方法

断言方法检查条件
assertAlmostEqual(a, b)round(a-b, 7) == 0
assertNotAlmostEqual(a, b)round(a-b, 7) != 0
assertGreater(a, b)a > b
assertGreaterEqual(a, b)a >= b
assertLess(a, b)a < b
assertLessEqual(a, b)a <= b
assertRegex(s, r)r.search(s)
assertNotRegex(s, r)not r.search(s)
assertCountEqual(a, b)a、b 两个序列包含的元素相同,不管元素出现的顺序如何

针对特定类型的断言方法

断言方法用于比较的类型
assertMultiLineEqual(a, b)字符串(string)
assertSequenceEqual(a, b)序列(sequence)
assertListEqual(a, b)列表(list)
assertTupleEqual(a, b)元组(tuple)
assertSetEqual(a, b)集合(set 或 frozenset)
assertDictEqual(a, b)字典(dict)

python官方文档:https://docs.python.org/3.5/library/unittest.html

腾讯云文档:https://cloud.tencent.com/developer/section/1367592

四、通过testsuite加载所有的被测对象

import unittest
import Calculation

class TestCase1(unittest.TestCase):
    def testAdd(self):
        self.assertEqual(5,Calculation.add(2,3))

class TestCase2(unittest.TestCase):
    def testMulti(self):
        self.assertEqual(10,Calculation.multi(2,5))

if __name__ == '__main__':
   suite1 = unittest.TestLoader().loadTestsFromTestCase(TestCase1)
   suite2 = unittest.TestLoader().loadTestsFromTestCase(TestCase2)
   suite = unittest.TestSuite([suite1,suite2])
   unittest.TextTestRunner(verbosity=2).run(suite)

测试结果:

在这里插入图片描述

五、python+selenium+unittest单元测试

1.测试说明

在这里插入图片描述

测试LoadRunner中Web Tours的登录功能

序号测试标题测试用例
1测试用户名为空,密码正确username:’’ ;password:bean
2测试用户名错误username:jo ;password:bean
3测试密码为空,用户名正确username:jojo ;password:’’
4测试密码错误username:jojo;password:bean1
5测试正确登录username:jojo ;password:bean

2.代码示例

from selenium import webdriver
import unittest

class loginTest(unittest.TestCase):
    def setUp(self):
        self.url='http://localhost:1080/WebTours/'
        self.driver=webdriver.Chrome()
        self.driver.maximize_window()
        self.driver.implicitly_wait(30)#隐性等待30秒
        self.driver.get(self.url)

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

    #登录功能
    def login(self,username,passwrod):
        self.driver.switch_to.frame('body')
        self.driver.switch_to.frame('navbar')
        self.driver.find_element_by_xpath('/html/body/form/table/tbody/tr[4]/td[2]/input').send_keys(username)
        self.driver.find_element_by_xpath('/html/body/form/table/tbody/tr[6]/td[2]/input').send_keys(passwrod)
        self.driver.find_element_by_xpath('/html/body/form/table/tbody/tr[8]/td[2]/input').click()

    # 测试用户名为空
    def test_username_null(self):
        self.login('','bean')
        self.driver.switch_to.parent_frame()
        self.driver.switch_to.frame('info')
        tip=self.driver.find_element_by_xpath('/html/body/blockquote/center/h3/font').text
        self.assertEqual(tip,'Web Tours Error - Null Username')

    # 测试用户名错误
    def test_username_error(self):
        self.login('jo','bean')
        self.driver.switch_to.parent_frame()
        self.driver.switch_to.frame('info')
        tip=self.driver.find_element_by_xpath('/html/body/blockquote/center/h3/font').text
        self.assertEqual(tip,'Web Tours Error - Incorrect Username')

    # 测试密码为空
    def test_password_null(self):
        self.login('jojo', '')
        self.driver.switch_to.parent_frame()
        self.driver.switch_to.frame('info')
        tip = self.driver.find_element_by_xpath('/html/body/blockquote/center/h3/font').text
        self.assertEqual(tip, 'Web Tours Error - Null Password')

    # 测试密码错误
    def test_password_error(self):
        self.login('jojo', 'bean1')
        self.driver.switch_to.parent_frame()
        self.driver.switch_to.frame('info')
        tip = self.driver.find_element_by_xpath('/html/body/blockquote/center/h3/font').text
        self.assertEqual(tip, 'Web Tours Error - Incorrect Password')

    # 测试正确登录
    def test_login_su(self):
        self.login('jojo', 'bean')
        self.driver.switch_to.parent_frame()
        self.driver.switch_to.frame('info')
        tip = self.driver.find_element_by_xpath('/html/body/blockquote/b').text
        self.assertEqual(tip, 'jojo')

if __name__=='__main__':
    unittest.main()

运行结果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值