什么是框架?
框架英文单词framework,为解决一类事情的功能集合。需要阿钊框架的规定去书写代码
什么是unittest框架
unittest是python自带的单元测试框架。
和pytest框架的区别:pytest框架是需要另外单独安装的
对于测试来说,他的作用是执行用例代码的框架。也就是说使用unittest框架来管理,运行多个测试用例的
TestCase(测试用例)
每个TestCase都是一个代码文件,在这个代码文件中,书写真正的用例代码
TestCase注意事项:
- 测试用例类需要继承unittest.TestCase
- 测试方法必须以test开头
- 代码文件的名字必须按照标识符的规则来书写
- 文件内容的开头,使用注释说明该文件的作用
代码示例:
import unittest#导包 class TestDemo(unittest.TestCase):#继承了testcase def test_case01(self):pass#方法名需要以test开头 def test_case02(self):pass
TestSuite(测试套件)
testsuite是把测试用例汇总起来,需要配合TestRunner一起使用才能运行
import unittest suite = unittest.TestSuite()#先将testsuite实例化,拿到一个suite对象 # 添加测试用例的方式有多种 #第一种添加方式,直接将测试用例类中的所有测试方法添加进来 suite.addTest(unittest.makeSuite(要执行的测试用例类名)) #第二种添加方式,一次添加一条用例,效率低。但是可以结合*(通配符)使用。 suite.addTest(测试类名('方法名'))
TestRunner(测试执行)
注意点:
- 实例化执行对象时,unittest后面的是TextTestRunner()
import unittest suite = unittest.TestSuite()#先将testsuite实例化,拿到一个suite对象 suite.addTest(unittest.makeSuite(要执行的测试用例类名))#添加测试用例 runner = unittest.TextTestRunner()#实例化一个执行对象 runner.run(suite)#调用执行对象中的run方法,将添加完测试用例的测试套件作为参数传过去。
TestLoader(测试加载)
TestLoader是什么:TesetLoader(测试加载),作用和TestSuite是一样的,是对TestSuite的补充,用来组装测试用例的
什么场景使用testloader:比如testcase的代码文件有很多
import unittest #加上discover返回的是一个suite对象,不加的话是返回的是一个testloader对象。 #discover是查找的意思。 #接收两个参数,分别是用例路径和用例的文件名。 # 用例路径推荐使用相对路径;文件名可以结合通配符使用。如:test*,*.py。 suite = unittest.TestLoader.discover('用例所在的路径','用例的代码文件名') # 这样写和前面也是一样的效果 suite = unittest.defaultTestLoader('用例所在的路径','用例的代码文件名') runner = unittest.TextTestRunner() runner.run(suite)
FixTure(测试夹具)
是一种代码结构
下面这些方法的名字是固定的,必须要这么写,且大小写也要保持一致。因其本质是重写了父类的方法,所以名字一定要保持一样。否则就不是重写的意义了。
方法级别的
在每个测试方法(测试用例)执行之前/之后都会自动调用的结构
代码示例
import unittest class TestDemo(unittest.TestCase): def setUp(self):#在每个测试用例执行之前会先执行setUp里面的内容 print('------setUp里面的内容-------') def tearDown(self):#在每个测试用例执行之后,会执行tearDown里面的内容 print('------tearDown里面的内容------') def test_case01(self): print('第一条测试用例') def test_case02(self): print('第二条测试用例') 执行结果: Ran 2 tests in 0.006s OK ------setUp里面的内容------- 第一条测试用例 ------tearDown里面的内容------ ------setUp里面的内容------- 第二条测试用例 ------tearDown里面的内容------ Process finished with exit code 0
类级别的
在每个测试类中所有方法执行前后 都会自动调用的结构(在整个类执行之前和执行之后各一次)
import unittest class TestDemo(unittest.TestCase): @classmethod def setUpClass(cls): print('-----类中方法执行前-----') @classmethod def tearDownClass(cls): print('-----类中方法执行后-----') def test_case01(self): print('第一条测试用例') def test_case02(self): print('第二条测试用例') 执行结果 OK -----类中方法执行前----- 第一条测试用例 第二条测试用例 -----类中方法执行后----- Process finished with exit code 0
模块级别的fixture
在每个代码文件执行前后执行的代码结构
什么是模块:每个代码文件都是一个模块
import unittest def setUpModule():#在模块执行之前会先执行这个方法中的代码。方法名必须是这个 print('---在模块执行前先执行这句话---') def tearDownModule():#在模块执行之后会执行这个方法中的代码。方法名必须是这个 print('---在模块执行之后要执行这句话') class TestDemo(unittest.TestCase): def test_case01(self): print('第一条测试用例') def test_case02(self): print('第二条测试用例') 执行结果: OK ---在模块执行前先执行这句话--- 第一条测试用例 第二条测试用例 ---在模块执行之后要执行这句话 Process finished with exit code 0