Python3内置unittest单元测试框架使用介绍,拓展beautifulreport生成漂亮的html测试报告!

1、简介:官方自带单元测试框架unittest内置库,不需要使用命令pip install unittest安装,编码直接import导入即可使用;

 

2、unittest支持测试自动化,配置共享和关机代码测试。支持将测试样例聚合到测试集中,并将测试与报告框架独立。核心组件:TestCase、TestSuite、TextTestRunner、TestFixture(测试脚手架)

测试用例,一个继承unittest.TestCase基类的测试用例类,以test开头的方法就是一个测试用例

测试套件,通过testloader加载类testcase测试用例类到testsuite测试套件,也可以测试套件(测试套件)

测试执行,执行测试用例的入口:测试运行器

测试环境搭建、数据销毁:setup、teardown、setUpClass、tearDownClass

tips:unittest 模块可以通过命令行CLI运行模块、类和独立测试方法的测试:

python -m unittest test_module1 test_module2

python -m unittest test_module1.test_class

python -m unittest test_module1.test_class.test_mthod

 

3、加载测试用例的方法:

第一步:创建测试套件:suite=unittest.TestSuite()

第二步:将测试用例testcase加载load到测试套件suite中:创建加载对象 loader=unittest.TestLoader()

①、通过模块加载测试用例:suite.addTest(loader.loadTestsFromModule(module_name)),module_name为测试用例类的文件名,不是类名。

②、通过测试用例加载用例:suite.addTest(loader.loadTestsFromTestCase(class_name),class_name为模块下的class类名

③、加载单条测试用例(通过测试用例类创建测试用例对象时,需要传入用例的方法名:字符串类型):case=class_name("testcase_name"),suite.addTest(case)

④、通过加载一个文件夹(执行测试用例所在路径,正则匹配文件夹下模块名加载测试用例)discover=unittest.defaultTestLoader.discover("用例类绝对路径")

tips:loader=unittest.TestLoader(),discover=suite.addTest(loader.discover(dir_path,partten))

第三步:创建测试用例运行启动器:runner=unittest.TextTestRunner(stream="test.txt",verbosity=2),,生成.txt的测试报告(控制台的输出写入到文件中)默认参数为1,2表示输出详细日志。

第四步:使用启动器去执行测试套件:runner.run(suite)

import unittest

# 从网上下载重新优化的html报告模版,放在项目中library目录下

from library.HTMLTestRunnerNew import HTMLTestRunner

# 第一步创建测试套件

suite = unittest.TestSuite()



# 第二步加载测试用

loader = unittest.TestLoader()

# 加载测试用例的几种方式

# 1、加载模块的测试用例

# case = loader.loadTestsFromModule(test_api)

# # 2、加载测试用例类

# case = loader.loadTestsFromTestCase(test_api.RegisterAndLogin)

# 3、加载测试用例类中的测试用例

case = test_api.Test("test_api_001")

suite.addTest(case)



# 终极常用加载测试用例的方式

# discover = unittest.defaultTestLoader.discover("用例类绝对路径", pattern="test*.py")

# suite.addTest(discover)



if __name__ == "__main__":



# # 存放报告的文件夹

report_dir = '../reports'

# # 报告命名时间格式化

now = time.strftime("%Y-%m-%d %H_%M_%S")

# # 报告文件完整路径

report_name = report_dir + '/' + now + "result.html"

#

# # 打开文件再报告文件写入测试结果

with open(report_name, "wb+") as bf:

# 第三步创建测试用例启动器

runner = HTMLTestRunner(

stream=bf, verbosity=2, title="我是测试报告标题", description="描述一下测试报告", tester="是我完成的")

# 第四步运行测试套件

runner.run(suite)

# 关闭报告文件 使用with上下文管理器则不需要此操作

# f.close()

生成报告如下展示:

 

4、TestFixture用于一个测试环境的准备和销毁还原:当测试用例每次执行之前需要准备测试环境,每次测试完成后还原测试环境,比如执行前连接数据库、打开浏览器等,执行完成后需要还原数据库、关闭浏览器等操作。这时候就可以启用testfixture。

  • setUp():准备环境,执行每个测试用例的前置条件;
  • tearDown():环境还原,执行每个测试用例的后置条件;
  • setUpClass():必须使用@classmethod装饰器,所有case执行的前置条件,只运行一次;
  • tearDownClass():必须使用@classmethod装饰器,所有case运行完后,只运行一次;

 

5、unittest框架中的跳过测试

@unittest.skip("强制跳过")

@unittest.skipIf(condition, "条件式,为True则不执行")

@unittest.skipUnless(condition, "条件式:为False则不执行")

装饰器同样适用与测试类!!!

 

不是注解(装饰器)的取消测试,测试用例中满足条件时调用:self.skipTest(season)

def testName2(self):

if 1 < 3:

self.skipTest("不算")

pass

 

扩展:@unittest.expectedFailure

把测试标记为预计失败。如果测试不通过,会被认为测试成功;如果测试通过了,则被认为是测试失败。

 

6、unittest.mock()模拟对象库用于接口依赖联调,一般推荐使用flask框架来mock。

 

7、上面一笔带过测试报告的生成,一种自带执行器生成txt文本测试报告TextTestRunner,案例使用的是HTMLTestRunner生成html测试报告,样式问题基本比txt会直观一些;

推荐一下:beautifulreport这个相对漂亮的报告模板,需要安装pip install beautifulreport:

import unittest

from BeautifulReport.BeautifulReport import BeautifulReport



class TestLoginMessage(unittest.TestCase):



def test_01(self):

pass



suite = unittest.TestLoader().loadTestsFromTestCase(TestLoginMessage)

run = BeautifulReport(suite)

run.report(description="测试报告2020", filename="report.html", report_dir="../reports", theme="theme_default")

以上代码可以生成如下html报告Python3内置unittest单元测试框架使用介绍,拓展beautifulreport生成漂亮的html测试报告!_第1张图片

 

html模版在python中可以称呼jinja2,对于其中页面元素可以自定义修改模版文件。

 

tips:标准库的意思表示这是一个Python内置模块,不需要额外下载,目前Python内置模块大概有300个。可以在这里查看Python所有的内置模块:

 

你可能感兴趣的:(Python3内置unittest单元测试框架使用介绍,拓展beautifulreport生成漂亮的html测试报告!)