Python框架之UnitTest
UnitTest框架测试
一. TestCase
每一个TestCase(测试用例)都是一个代码文件, 在其中来书写真正的测试用例 代码必须按照标识符的规则来书写
步骤
导包 自定义测试类 在测试类中书写测试用例 执行用例
代码实现
import unittest class TestDemo(unittest.TestCase): '自定义测试案例类,需要继承测试模块中中的TestCase类即可' # 测试方法就是我们需要的用例代码 # 暂时我们用print代替 def test_method1(self): print("测试方法一") def test_method2(self): print("测试方法二")
常见的错误
代码文件的名字以数字开头 代码文件名字中有空格 代码文件中有中文 其他特殊符号 (数字、字母、下滑线组成,不能以数字开头)
二. 使用UnitTet中的TestSuite管理测试用例TestCase
步骤: 导包 实例化套件对象(TestSuite) 使用套件对象添加用例方法
# 1. 导包 import unittest from RayStuDayOne.testCxase import TestDemo # 2. 实例化套件对象 suite = unittest.TestSuite() # 3. 使用套件对象添加用例方法 suite.addTest(TestDemo('test_method1')) suite.addTest(TestDemo('test_method2')) # 这里也可以用下面的方法,只是idea没有提示 suite.addTest(unittest.makeSuite(类名))
注意 : 1. test方法必须以 test_ 开头,不然就不会生成测试方法,也就不会执行 2.
三. 使用TestRunner执行测试套件(TestSuite)
testSuite : 作用是打包管理测试用例(testCase) TestRunner : 执行TestSuite(套件)
步骤
导包 实例化运行对象 使用运行对象去执行套件对象
实现代码
# 1. 导包 import unittest from RayStuDayOne.testCxase import TestDemo # 2. 实例化套件对象 suite = unittest.TestSuite() # 3. 使用套件对象添加用例方法 suite.addTest(TestDemo('test_method1')) suite.addTest(TestDemo('test_method2')) # 这里也可以用下面的方法,只是idea没有提示 suite.addTest(unittest.makeSuite(类名)) # 4. 实例化运行对象 runner = unittest.TextTestRunner() # 5. 使用运行对象去执行套件对象 ,里面写套件对象 runner.run(suite)
整体测试实现:
首先明确需求
需求 :
完成对add方法的测试
def add(a, b): return a + b
书写TestCase测试用例
步骤 导包 自定义测试类 在测试类中书写测试用例
import unittest from Demo.tools import add class testAdd(unittest.TestCase): """自定义测试类,实现测试方法的书写""" def test_demo(self): # 比较实际结果 和 预期结果是否相等 if add(1, 2) == 3: print("测试通过!") # 现在暂时是用打印, 以后是直接靠断言 else: print("测试不通过!") def test_demo1(self): # 比较实际结果 和 预期结果是否相等 if add(10, 11) == 22: print("测试通过!") else: print("测试不通过!") def test_demo2(self): # 比较实际结果 和 预期结果是否相等 if add(11, 2) == 13: print("测试通过!") else: print("测试不通过!")
使用测试套件(TestSuite)来管理测试用例
步骤 导包 实例化套件对象(TestSuite) 使用套件对象添加用例方法
使用测试执行 来执行测试套件
实例化运行对象 使用运行对象去执行套件对象
# 1. 导包 import unittest from Demo.testDemo import testAdd # 2. 使用Suite 和 Runner 管理testAdd(unittest.TestCase)文件 # 3. 实例化套件对象 suite = unittest.TestSuite() # 4. 添加测试方法 suite.addTest(unittest.makeSuite(testAdd)) # 5. 实例化执行对象 runner = unittest.TextTestRunner() # 6. 执行测试套件 runner.run(suite)
TestLoader(测试加载)
对TestSuite进行补充 管理多个TestCase 比如: 如果TestCase的代码文件有很多(10,20,30) 步骤: 1. 导包 2. 实例化测试加载对象 并添加测试用例 ---- 》 得到的是suite对象 3. 实例化运行对象 4. 运行对象执行套件对象
代码实现
# 1. 导包 import unittest import Case # 2. 实例化加载对象 ,并添加用例 # discover 就是发现这个加载, 就可以将这个加载 作为suite对象来使用,同时 discover就可以按照通配符来进行匹配 # 比如我们这里匹配的就是Case目录下 的 以test开头的py文件 suite = unittest.TestLoader().discover('Case', 'test*.py') # 3. 使用测试运行 来运行测试loader runner = unittest.TextTestRunner() runner.run(suite)
还可以简化
Fixtrue ( 测试夹具)
是一种 代码结构 在某种特定情况下, 会自动执行 需要就写 ,不需要就不用写
方法级别
在每个测试方法(用例代码) 执行前后都会自动调用的结构
def setup(self): # 在每个测试方法执行之前都会执行 pass def teardown(self): # 在每个测试方法执行之后都会执行 pass
类级别
在每个测试类中所有方法执行前后, 都会自动调用的结构(在整个类中, 执行之前执行之后各一次)
# 类级别的Fixture方法 , 是一个类方法 # 类中所有方法之前 @classmethod def setupClass(cls): pass @classmethod def tearDown(self): pass
模块级别
案例
打开浏览器 ------------类级别 输入网址 ------------方法级别 输入用户名密码 验证吗点击登录 ---------测试方法 关闭当前页 ------------方法级别 关闭浏览器------------类级别 +++++++++++++++++++++++++++++++++++++ 一值重复上述的结构
执行
运行结果