一、unittest断言应用(unittest.skip用法)
unittest断言:slef.assertEqual
断言:自动化测试主要用于对流程来进行的测试,断言就是自动化测试中预期结果和实际结果的对比
简单理解:
断言的本质就是if else
if(name="1111"): print(success) else: print(error)
等于
self.assertEqual(1111,name,msg='success')
使用断言来判断你的用例是通过还是失败
实际结果9.0234 预期结果约等于9 圆周率
self.assertAlmostEqual(9.0234,9.00,msg='这是一个大约值')
1、skip操作:
一个测试类对象下面可能有非常多的用例,有些用例可以选择当下不执行,有些用例有条件去执行
意味着不是所有的用例每次都一起执行
unittest.skip是通过装饰器来执行
1、1无条件跳过本条用例执行
@unittest.skip('懒得执行')
1、2有条件的跳过执行
一、@unittest.skipUnless(1>2,'填写Unless的理由')
1>2是假,所以Unless的含义是:当不符合条件的时候跳过
二、@unittest.skipIf(1<2,'这是If的理由')
1<2是真,所以If的含义是:当符合条件的时候跳过
注意事项:其中1和2要是全局变量
三、@unittest.expectedFailure
这种跳过出现在执行test报错,想跳过这个用例
这个用例被unittest忽略了
二、unittest套件及runner应用
1、Suite:
使用unittest套件可以选择性的执行测试用例
想要使用unittest套件,必须新建一个测试套件来执行
原因:在unittest的类下面会默认调用.main函数,所以将unittest套件写在main函数里面,是不会执行的
demo.py
suit_demo.py
注意事项:代码中的suite都写成了suit,代码改了图片未改
一、单个添加测试用例 单个用例的
Import unittest
from connector_test.api_demo.demo import Demo
#创建测试套件
suite=unittest.TestSuite()
#addTest添加测试用例通过名字进行添加
#添加测试用例的第一种方法单个添加
suite.addTest(Demo('test_01_login'))
suite.addTest(Demo('test_03'))
suite.addTest(Demo('test_04'))
suite.addTest(Demo('test_05'))
#基于Runner来运行测试套件
#创建运行器
runner=unittest.TextTestRunner()
#使用运行器运行套件
runner.run(suite)
运行效果:
二、批量添加测试用例 多个用例的
#添加测试用例的第二种方法批量添加
cases=[Demo('test_01_login'),Demo('test_03'),Demo('test_04'),Demo('test_05')]
suite.addTest(cases)
运行效果:
三、批量执行测试用例 多个文件
#添加测试用例的第三种方法批量执行可执行多个测试文件里面的所有测试用例
test_dir='./'
suite=unittest.defaultTestLoader.discover(start_dir=test_dir,pattern='demo*.py')
运行效果:
四、通过类名添加 单个类的
五、通过文件名添加 文件名.包名
#添加测试用例的第五种方法
#通过文件名称去读取
suite.addTests(unittest.TestLoader().loadTestsFromName('demo.Demo'))
实现代码:
三、unittest+htmltestrunner自动化实现
unittest集成测试报告
HTMLTestRunner.py是Python标准库unittest单元测试框架的一个扩展,它生成HTML测试报告
下载及使用HTMLTestRunner.py的参考文档:
HTMLTestRunner生成测试报告注意事项 - ~Nirvana!。 - 博客园
使用:
from HTMLTestRunner import HTMLTestRunner
完整代码:
# 导入os是为了创建文件夹
import unittest, os
from connector_test.api_demo.demo import Demo
from HTMLTestRunner import HTMLTestRunner
# 创建测试套件
suite = unittest.TestSuite()
# addTest添加测试用例 通过名字进行添加
# 添加测试用例的第一种方法 单个添加
# suite.addTest(Demo('test_01_login'))
# suite.addTest(Demo('test_03'))
# suite.addTest(Demo('test_04'))
# suite.addTest(Demo('test_05'))
# 添加测试用例的第二种方法 批量添加
# cases = [Demo('test_01_login'), Demo('test_03'), Demo('test_04'), Demo('test_05')]
# suite.addTest(cases)
# 添加测试用例的第三种方法 批量执行 可执行多个测试文件里面的所有测试用例
# test_dir = './'
# # 只要在路径下面查找到demo开头的一个或者多个文件,将它放在运行器里面运行
# suite = unittest.defaultTestLoader.discover(start_dir=test_dir, pattern='demo*.py')
# 添加测试用例的第四种方法
# 从测试用例当中去读取,基于类名去读取
# suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Demo))
# 添加测试用例的第五种方法
# 通过文件名称去读取
suite.addTests(unittest.TestLoader().loadTestsFromName('demo.Demo'))
# 基于Runner来运行测试套件
# 创建运行器
# runner = unittest.TextTestRunner()
# # 使用运行器运行套件
# runner.run(suite)
# 集成的测试文件
report_name = "测试报告名称"
report_title = "测试报告标题"
report_desc = "测试报告描述"
report_path = "./report/"
# ./report/report.html
report_file = report_path + "report.html"
if not os.path.exists(report_path):
# 如果report_path不存在,那么就创建文件
os.mkdir(report_path)
else:
pass
with open(report_file, 'wb') as report:
# 在上面已经添加过了
# suite.addTests(cases)
# 运行器运行
runner = HTMLTestRunner(stream=report, verbosity=1, title=report_title, description=report_desc)
runner.run(suite)
运行效果: