python代码设计测试用例_Python系统学习 - 测试代码

咳咳,今天进入正题~

这两天我学习了 Python的测试代码,对于自己编写的程序,要有一定的测试能力,保证其能够平稳的运行下去,那么 我们就需要用到一系列的测试方法,这里我学习了Python自带的单元测试方法,比较简单,下面开始举栗子:

1.我们先准备一个测试代码,被测试的方法:

# coding = utf8

import os

os.path.abspath(".")

"""

Python - 测试代码

"""

class test_class_test():

def __init__(self, first_name, last_name):

self.first_name = first_name

self.last_name = last_name

# 原函数

def test_name(self):

return self.first_name + " " + self.last_name

if __name__ == "__main__":

pass

2.执行一个简单的断言测试:

# coding = utf8

import os

os.path.abspath(".")

import unittest

from test_class import test_class_test

"""

该函数为单元测试用例

1.当执行unittest.main() 后,所有包含test开头的函数都会执行

2.使用setUp()函数来初始化测试用例所需的属性、对象等

"""

class test_assert_class_test(unittest.TestCase):

def setUp(self):

self.test_class_test_obj = test_class_test("cgt", "tangtang")

def test_test_name(self):

get_name = self.test_class_test_obj.test_name()

# 执行断言测试

self.assertEqual(get_name, "cgt tangtang")

if __name__ == "__main__":

unittest.main()

3.创建一个实体类,对其方法进行测试:

# coding = utf8

"""

单元测试用例练习:

编写一个名为employee_test的类,其方法__init__()接收名、姓、年薪,

并将它们都存储在属性中。编写一个名为give_raise()的方法,它默认将年薪增加5000美元,

但也能够接受其他的年薪增加量

为employee_test编写一个测试用例,其中包含两个测试方法:test_give_default_raise()

和test_give_custom_raise()。使用方法setUp(),以免在每个测试方法中都创建employee的实例。

运行这个测试用例,确认两个测试都通过了

"""

import os

os.path.abspath(".")

class employee_test_class():

def __init__(self, first_name, last_name, annual_salary):

self.first_name = first_name

self.last_name = last_name

self.annual_salary = annual_salary

def give_raise(self, increase_annual_salary = 5000):

self.annual_salary += increase_annual_salary

return self.annual_salary

if __name__ == "__main__":

pass

4.使用测试用例对employee实体类进行测试:

# coding = utf8

import os

os.path.abspath(".")

import unittest

from employee_test import employee_test_class

"""

employee_test的单元测试用例

"""

class employee_unittest_case(unittest.TestCase):

def setUp(self):

self.employee_test_class_obj = employee_test_class("cgt", "tangtang", 19999)

def test_give_default_raise(self):

default_annual_salary = self.employee_test_clas

s_obj.give_raise()

self.assertEqual(default_annual_salary, 24999)

def test_give_custom_raise(self):

custom_annaul_salary = self.employee_test_class_obj.give_raise(1)

self.assertEqual(custom_annaul_salary, 20000)

if __name__ == "__main__":

unittest.main()

5.一个完善的单元测试结构:

# coding = utf8

import os

os.path.abspath(".")

import unittest

import sys

"""

之前是对于测试用例的结构的介绍与用法的实践,

现在对完整的单元测试结构与用法进行学习

Python - Unittest(Detail & Important)

1、unittest主要功能模块介绍

unittest主要包含TestCase、TestSuite、TextTestRunner、TextTestResult几个功能模块:

- TestCase:一个TestCase实例就是一个测试用例,一个测试用例就是一个完整的测试流程,包括测试前环境的搭建

,测试代码的执行,以及测试后环境的还原或者销毁。(元测试的本质也在这里,一个测试用例是一个完整的测试单元,

可以对某一个具体问题进行检查验证。)

- TestSuite:多个测试用例集合在一起就是TestSuite,TestSuite也可以嵌套TestSuite

- TestLoader:TestLoader的作用是将TestCase加载到TestSuite中

- TextTestRunner:TextTestRunner是用来执行测试用例的,其中run(test)会执行TestSuite/TestCase中的

run(result)方法

- TextTestResult:TextTestResult用来保存测试结果,其中 包括运行了多少测试用例,成功了多少、失败了多少等信息

整个测试流程:

写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果

保存在TextTestResult中

"""

class unittest_structure_class():

def __init__(self):

pass

# 准备几个待测的方法

def add(self, a, b):

return a + b

def multi(self, a, b):

return a * b

# 测试用例类

class testFunc(unittest.TestCase):

# setUp()和tearDown()会在每个case执行前后都执行一次

def setUp(self):

print("Do something before test, like prepare step:>>>>>>")

self.func_class = unittest_structure_class()

# 使用装饰器对该测试用例进行跳过

@unittest.skip("I use decorator to skip this method")

def test_add(self):

self.assertEqual(3, self.func_class.add(1, 2))

def test_multi(self):

# 使用skipTest()跳过当前测试用例

self.skipTest("I'm skipped by unittest method unittest.SkipTest()")

self.assertEqual(6, self.func_class.multi(2, 3))

def tearDown(self):

print("Do something after test, clean something:>>>>>>")

del self.func_class

# setUpClass()和tearDownClass()会在当前所有Case执行前后执行一次,根据测试需求,选择setUp()/setUpClass()

@classmethod

def setUpClass(self):

print("This setUpClass method only run once before run all test case>>>>>>")

@classmethod

def tearDownClass(self):

print("This setUpClass method only run once after run all test case>>>>>>")

if __name__ == "__main__":

# 加上verbosity=参数控制输出的错误报告和详细程序 -- 默认为1,如果设为0:则不输出执行结果,设为2:输出详细的执行结果

# unittest.main(verbosity=2)

'''

TestSuite添加用例的几种类型:

'''

# 1、使用TestSuite完善case执行顺序、进行计划性对测试用例进行测试

suite = unittest.TestSuite()

tests = [testFunc("test_add"), testFunc("test_multi")]

suite.addTests(tests)

# 将测试结果输出保存到本地

with open("./Study/out.txt", "w+") as f:

runner = unittest.TextTestRunner(stream=f, verbosity=2)

runner.run(suite)

# 2、直接使用addTest()添加单个Case

suite.addTest(testFunc("test_add"))

## 使用loadTestFromName,传入模块名.TestCase名,下面俩方法效果相同

suite.addTests(unittest.TestLoader().loadTestsFromName("test_add"))

suite.addTests(unittest.TestLoader().loadTestsFromNames(["test_add"]))

# loadTestsFromTestCase(),传入TestCase

suite.addTests(unittest.TestLoader().loadTestsFromTestCase(testFunc))

6.输出结果至文件中:

test_add (__main__.testFunc) ... skipped 'I use decorator to skip this method'

test_multi (__main__.testFunc) ... skipped "I'm skipped by unittest method unittest.SkipTest()"

----------------------------------------------------------------------

Ran 2 tests in 0.000s

OK (skipped=2)

不要着急~,因为总会有人熬夜陪你 下雨接你 说我爱你 好的总是压箱底

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值