一、UnitTest框架
①、什么是框架?
1、框架英文单词framework
2、为解决一类事情的功能集合
②、为什么使用UnitTest框架
1、批量执行用例
2、提供丰富的断言知识
3、可以生成报告
③、UnitTest核心要素
1、TestCase —测试用例
2、TestSuite —测试套件
3、TestRunner —测试运行 以文本形式运行测试用例
4、TestLoader —批量执行测试用例 搜索指定文件夹内指定字母开头的模块(推荐)
5、Fixture —固定装置函数(两个固定函数,一个初始化使用,一个结束使用)
二、TestCase
①、定义测试用例
1、导包:import unittest
2、定义测试类:新建测试类必须继承unittest.TestCase
3、定义测试方法:测试方法名称命名必须以test开头
②、运行:
1、运行测试类所有的测试方法,光标定位到类当前行右键运行
2、运行单个测试犯法:光标放到测试方法当前行
执行代码:
# 导包:import unittest
import unittest
# 定义加法方法
def add(x,y):
return x + y
# 定义减法方法
def subt(x , y):
return y - x
# 定义测试类:新建测试类必须继承unittest.TestCase
class test_case(unittest.TestCase):
# 定义测试方法:测试方法名称命名必须以test开头
def test_add(self):
result = add(1,5)
print("结果是:",result)
def test_subt(self):
result = subt(10,5)
print("结果是:",result)
# 通过python自带的__name__属性执行testcase
if __name__ == '__main__':
test_case.main()
执行结果:
Ran 2 tests in 0.023s
OK
Process finished with exit code 0
结果是: 6
结果是: -5
注意:
__name__:为python中内置变量
值:
1、如果当前运行的模块为当前模块,那么__name__的值为:__main__
2、如果当前运行的模块不是主模块,那么__name__的值为:模块名称
三、TestSuite测试套件
①、使用:
1、实例化:suite = unittest.TestSuite()
(suite:为TestSuite实例化名称)
2、添加用例:suite.addTest(ClassName(“MethodName”))
(ClassName:为类名:MethodName:为方法名<用双引号>)
3、添加扩展:suite.addTest(unittest.makeSuite(ClassName))
(搜索指定ClassName内test开头的方法并添加到测试套件中)
提示:TestSuite需要配合TestRunner才能被执行
②、操作步骤:
1、导包
2、实例化获取TestSuite对象
3、调用addTest方法添加用例到指定套件中
4、执行测试套件方法:
1)、导包
2)、实例化后去执行套件对象 runner = unittest.TestRunner
3)、调用TestRunner中run()方法
执行代码:
TestCase.py中代码:
import unittest
def add(x,y):
return x+y
class Test_add(unittest.TestCase):
def test_add01(self):
print("执行了测试用例:test_add01")
result = add(3,5)
print(result)
def test_add02(self):
print("执行了测试用例:test_add02")
result = add(4, 5)
print(result)
def test_add03(self):
print("执行了测试用例:test_add03")
result = add(4, 7)
print(result)
def test_add04(self):
print("执行了测试用例:test_add04")
result = add(6, 7)
print(result)
if __name__ == "__main__":
Test_add.main()
**可以直接通过__name__执行得出结果
执行unittest_TestSuite中的代码:
import unittest
# 实例化TestSuite
from TestCase import Test_add
suite = unittest.TestSuite()
#添加用例
# 写法一:执行单个测试用例
# suite.addTest(Test_add("test_add01"))
# suite.addTest(Test_add("test_add02"))
# 写法二:批量执行测试用例
suite.addTest(unittest.makeSuite(Test_add))
# 执行套件
# 创建TestRunner对象
runner = unittest.TextTestRunner()
# 执行TestRunner中run(self,test)方法
runner.run(suite)
执行结果:
#几个点代表执行成功过几个用例
....
执行了测试用例:test_add01
----------------------------------------------------------------------
8
执行了测试用例:test_add02
Ran 4 tests in 0.001s
9
执行了测试用例:test_add03
11
OK
执行了测试用例:test_add04
13
需要创建两个py文件去管理用例和测试套件
四、TestLoader
①、说明:
用来加载TestCase到TestSuite中,即加载满足条件的测试用例,并把测试用例封装成测试套件。
使用unittest.TestLoader,通过该类下面的discover()方法自动搜索指定目录下指定开头的.py文件。并将查到的测试用例组装到测试套件
②、用法:
suite = unittest.TestLoader().discover(test_dir,pattern=’test*.py’)
自动搜索指定目录下指定开头的.py文件,并将查找到的测试用例组装到测试套件
test_dir:为制定的测试用例的目录
pattern:为查找的.py文件的格式,默认为‘test*.py’
也可以使用unittest.defaultTestLoader代替unittest.TestLoader()<推荐使用unittest.defaultTestLoader>
底层代码中unittest.defaultTestLoader = unittest.TestLoader()
③、操作方法:
1、导包 unittest
2、调用TestLoader类下discover(test_dir,pattern=’test*.py’)方法
写法一:suite = unittest.TestLoader().discover(test_dir,pattern = ’test*.py’)
写法二:suite = unittest.defaultTestLoader.discover(test_dir,pattern = ’test*.py’)
3、执行测试用例 调用unittest.TextTestRunner().run(suite)
④、案例演示
Case包里三个文件
Testcase01.py的代码:
import unittest
def add(x,y):
return x+y
class Test_add(unittest.TestCase):
def test_add01(self):
print("执行了测试用例:test_add01")
result = add(3,5)
print(result)
def test_add02(self):
print("执行了测试用例:test_add02")
result = add(4, 5)
print(result)
def test_add03(self):
print("执行了测试用例:test_add03")
result = add(4, 7)
print(result)
def test_add04(self):
print("执行了测试用例:test_add04")
result = add(6, 7)
print(result)
if __name__ == "__main__":
Test_add.main()
Testcase02.py的代码:
import unittest
def add(x,y):
return x+y
class Test_add1(unittest.TestCase):
def test_add101(self):
print("执行了测试用例:test_add101")
result = add(3,5)
print(result)
def test_add102(self):
print("执行了测试用例:test_add102")
result = add(4, 5)
print(result)
def test_add103(self):
print("执行了测试用例:test_add103")
result = add(4, 7)
print(result)
def test_add104(self):
print("执行了测试用例:test_add104")
result = add(6, 7)
print(result)
if __name__ == "__main__":
Test_add1.main()
Testcase03.py的代码:
import unittest
def add(x,y):
return x+y
class Test_add2(unittest.TestCase):
def test_add201(self):
print("执行了测试用例:test_add201")
result = add(3,5)
print(result)
def test_add202(self):
print("执行了测试用例:test_add202")
result = add(4, 5)
print(result)
def test_add203(self):
print("执行了测试用例:test_add203")
result = add(4, 7)
print(result)
def test_add204(self):
print("执行了测试用例:test_add204")
result = add(6, 7)
print(result)
if __name__ == "__main__":
Test_add2.main()
UnitTest框架中unittest_TestLoader.py文件中的代码:
import unittest
#调用TestLoader中discover()方法
#写法一
# suite = unittest.TestLoader().discover('./Case',pattern='Test*.py')
#写法二(推荐写法)
suite = unittest.defaultTestLoader.discover('./Case',pattern='Test*.py')
#调用TextRunner.run(suite)执行
unittest.TextTestRunner().run(suite)
执行结果:
执行了测试用例:test_add101
8
执行了测试用例:test_add102
............
9
----------------------------------------------------------------------
执行了测试用例:test_add103
Ran 12 tests in 0.001s
11
OK
执行了测试用例:test_add104
13
执行了测试用例:test_add201
8
执行了测试用例:test_add202
9
执行了测试用例:test_add203
11
执行了测试用例:test_add204
13
执行了测试用例:test_add01
8
执行了测试用例:test_add02
9
执行了测试用例:test_add03
11
执行了测试用例:test_add04
13
五、TestSuite和TestLoader区别
共同点:都是测试套件
不同点:实现方式不同
1. TestSuite需要手动添加测试用例(可以添加测试类,也可以添加测试类中某个测试方法)
2. TestLoader搜索指定目录下指定开头.py文件,并添加测试类中的所有的测试方法,不能指定添加测试方法。
作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。