举例测试框架有哪些:
Unittest:
Python内置的标准类库。它的API和Java的JUnit、.net的NUnit、C++的CppUnit很相似
Pytest:
丰富灵活的测试框架,预发简单,可以结合allure生成一个炫酷的测试报告,目前较主流
Nose:
Nose是对unittest的扩展,使得python的测试更加简单
Mock:
unittest.mock是用来测试python的库
代码覆盖率也被用于自动化测试和手工测试来度量测试是否全面的指标之一,应用覆盖率的思想增强测试用例的设计 单元测试覆盖类型: 语句覆盖、条件覆盖、判断覆盖、路径覆盖
Unittest编写规范:
Unittest提供了test case、test suites、test fixtures、test runner相关的组件
编写规范:
1. 测试模块首先:import unittest
2. 测试类必须继承:unittest.TestCase
3. 测试方法必须以“test_”开头
4. 模块名称,类名没有要求
测试框架的结构:
1. setUp用来为测试准备环境,tearDown用来清理环境
2. 如果想要在所有case执行之前准备一次环境,并在所有case执行结束之后再清理环境,我们可以用setUpClass()和tearDownClass()。比如数据库的连接和销毁
3. 如果想有些方法不在本次执行 使用@unittest.skip
4. 测试方法的命名:以test开头
5. 各种执行-单一用例,全部
import unittest
class demo(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
print("开始(只打印一次)")
@classmethod
def tearDownClass(cls) -> None:
print("结束(只打印一次)")
def setUp(self) -> None:
print("开始........")
def tearDown(self) -> None:
print("结束........")
def test_case01(self):
print("测试用例")
self.assertEqual("1","1","相等")#断言相等
@unittest.skip#不执行本条case
def test_case02(self):
print("测试用例01")
self.assertIn("h","this","相等")#断言第一个被第二个包含
if __name__ == '__main__':
unittest.main
unittest执行测试用例的几种方法:
1.unittest.main()
2.加入容器中执行(可以选择性执行部分case)
suite = unittest.TestSuite()
suite.addTest(demo("test_case01"))
suite.addTest(demo01("test_demo_case01"))
unittest.TextTestRunner().run(suite).....................
3.可以使用TestLoader()方法同时执行多个类
suite = unittest.TestLoader().loadTestsFromTestCase(demo)
suite1 = unittest.TestLoader().loadTestsFromTestCase(demo01)
suiteAll = unittest.TestLoader([suite,suite1])
unittest.TextTestRunner().run(suiteAll)
4.匹配某个目录下以test开头的py文件,执行这些文件下的所有测试用例
test_dir="./test_case"
suite = unittest.defaultTestLoader.discover("./",'test*.py')
discover:可以一次调用多个脚本
test_dir:被测试脚本的路径
pattern:脚本名称匹配规则
测试用例执行过程:
1. 首先是要写好TestCase
2. 然后由TestLoader加载TestCase到TestSuite
3. 然后由TextTestRunner来运行TestSuite
4. 运行结果保存在TextTestResult中
5. 整个过程集成在unittest.main中
6. TestCase可以是多个,TestSuite也可以是多个
测试用例执行过程图解:
|