一、基本用法 定义一个测试类,并继承unittest.TestCase类. class TestClassName(unittest.TestCase) 类中的方法,必须用test开头,如test_001. 运行方式: if __name__ == "__main__": unittest.main() 类方法: assertEqual(expect, result):断言实际与预期是否一致. setUp():测试类执行后最先调用的方法. tearDown():测试类执行后最后调用的方法. 注解(修饰器): @unittest.skip:这个测试方法会被跳过,不执行. @unittest.skipIf(boolean, "True跳过方法"):boolean为true则跳过此方法,boolean为false则执行此方法. @unittest.skipUnless(boolean, "False则跳过方法"):boolean为true则执行此方法,boolean为false则跳过此方法. 二、测试套(测试集合) --------------------------注意事项------------------------------ unittest使用测试套时:不能与注解一起使用,天生的问题,无法解决. 如果测试套与注解一起使用,那么就要用unittest方式执行. 如果测试套不与注解一起使用时,要用Python方式运行. --------------------------------------------------------------- 定义测试套件:suite = unittest.TestSuite() 添加测试用例:suite.addTest(ClassName("test_method")) 运行方式(要用Python的方式运行): if __name__ == "__main__": suite_runner = unittest.TextTestRunner() suite_runner.run(set_suite()) 三、unittest生产测试报告 前提:把HTMLTestRunner.py文件拷贝到:Python安装目录\lib. # Python 文件读取操作 # 1. 定义: open(file, mode='r' ....) # 2. 参数: file:将要生成的测试报告名称 # 如:在当前目录生成报告:'./report.html' # mode:文件的打开方式 # 如: r: 只读方式打开 # w: 可写方式打开 # b: 二进制格式(流文件) # 3. 文件:打开 -> 编辑 -> 关闭 # python 中提供了自动关闭的功能:with # 4. with open('./report.html', 'wb') as f: # 1). 在当前目录新建一个 report.html 文件 # 2). 该文件使用:可写+二进制 的方式打开/读写 # 3). f:这个文件在代码中的别名 生成测试报告: with open('./report.html', 'wb') as f: # 导包:import HTMLTestRunner # 创建一个运行器 # 实例化报表类 # 参数stream:需要传入文件名 # 参数title: 报告的标题 # 参数description:报告的内容阐述 # 第一个HTMLTestRunner是文件名,第二个HTMLTestRunner是类名. runner = HTMLTestRunner.HTMLTestRunner(stream=f, title='测试报表', description='这是我的测试报告') # 运行测试集合 runner.run(set_suite()) 四、参数化 1) 通过第三方工具包:parameterized 前提: File--->Settings--->Project:项目名--->Python Interpreter--->点击"+" --->输入"parameterized"--->点击"Install Package". 1. 需求:判断两个数是否相等. # 文件(模块)名.类名 # 将参数封装成一个list列表,list每一个元素可以是元组类型 @parameterized.parameterized.expand([(5, 5), (0, 0), (-1, -1)]) def test_01(self, x, y): self.assertEqual(x, y) 2. 判断两数之和是否相等. @parameterized.parameterized.expand([(1, 1, 2), (2, 2, 4), (3, 4, 7)]) def test_002(self, num1, num2, res): self.assertEqual(num1 + num2, res) 2) 参数化+测试套 感觉没啥说的,和一般的测试套一样. 3) 通过csv文件进行参数化 导包: import csv # 获取csv文件方法 def get_csv(filename="csvdata.csv"): lst = [] with open(filename, "r") as f: reader = csv.reader(f) for line in reader: lst.append(line) # 去除首行 return lst[1:] # 测试执行类 class TestCsv(unittest.TestCase): @parameterized.parameterized.expand(get_csv()) def test_001(self, add1, add2, expected): self.assertEqual(int(add1) + int(add2), int(expected))
unittest基本的使用方法
最新推荐文章于 2022-10-15 14:06:57 发布