单元测试测试之unittest
首先我们先理解单元测试是谁做的 —>开发
然后我们测试会写代码之后,我们也可以自己做单元测试
那么单元测试是做什么? --> 对某个功能去测试
单元测试测试什么? -->类里面的方法
单元测试怎么测? -->创建对象 — 调用方法 —传参 -->通过传递多组数据来测试不同的情况
单元测试的框架有 unittest 和 pytest
学会了unittest才好学pytest,跳过了unittest去学pytest的话有点难学
我们先了解下unittest:
unittest最核心的四个概念test case,test suite,test runner,test fixture,看图
TestCase -->这个模块是用来编写测试用例
TestSuite -->这个模块是测试用例收集器,是用来收集TestCase里的测试用例
TestLoader -->加载用例,可以从TestCase加载用例,也可以从TestSuite加载用例
runner里的TextTestResult和TextTestRunner是用来运行测试用例
result里的TestResult是用来出测试报告
所以我们的单元测试是先编写用例(case)–>收集用例(suite)–>加载用例(loader)–>运行用例(runner)–>出测试报告(result)
我们先创建一个被测试的模块名为bei_uinttest,其次创建类和方法
#先创建要单元测试的类和被测试的方法
class My_unttis:
def add_jiafa(self,a,b):
return a+b
def add_jianfa(self,a,b):
return a-b
2.我们创建一个danyuan_unittest模块名来编写用例
2.1导入 unittest模块 和 要编写的用例,然后使用断言来查看
断言图:一般用assertEqual()和assertisNone()用的比较多
#先导入内置类,再导入被测试的类,这里是编写用例
import unittest
from python.bei_unittest import My_unttis
class TestAdd(unittest.TestCase): #继承unittest模块里的TestCase类
#所有的测试用例都要以test开头,否则运行不了
def test_add_jiafa(self):
print('test_add_jiafa')
exp = 5 #设置我们的期望值
res=My_unttis().add_jiafa(2,3) #实际值
self.assertEqual(exp,res) #使用断言
def test_add_jianfa(self):
print('test_add_jianfa')
exp = 5
res = My_unttis().add_jianfa(10,5)
self.assertEqual(exp,res)
输出:
2.2 注:鼠标右键在类名或 空白格 就执行全部用例,在方法名右键执行只会执行右键执行的一条
用例的执行顺序是根据ascll 编码来执行
3.我们创建一个用例执行器来执行测试用例
创建一个test_yongli模块,导入测试用例
import unittest
from python.danyuan_unittest import TestAdd
from python import danyuan_unittest
import HTMLTestRunnerCN #网页生成报告
#存储用例的容器suite 套件
'''这里是执行用例,执行用例有三种方法'''
suite=unittest.TestSuite() #创建一个对象
#第一种方法,一个个的去添加
# suite.addTest(TestAdd('test_add_jiafa'))
# suite.addTest(TestAdd('test_add_jianfa'))
#第二种方法 通过loader来加载用例 通过模块来加载用例,这里是全部运行
#一般用这种方法比较多
# loader=unittest.TestLoader() #用例加载器
# suite.addTest(loader.loadTestsFromModule(danyuan_unittest)) #这里的括号是模块名,不是类名
#第三种 通过loader来加载用例 通过测试类名来加载用例
loader=unittest.TestLoader() #用例加载器
suite.addTest(loader.loadTestsFromTestCase(TestAdd))
#执行用例生成text报告
#执行用例,生成报告,python最原始报告
# with open('test.txt','w') as file:
# runner=unittest.TextTestRunner(stream=file,verbosity=2)#创建一个对象来执行用例
# runner.run(suite)
#生成httml报告,HTMLTestRunner文件网上找哈
with open('test.html','wb') as file:
runner=HTMLTestRunnerCN.HTMLTestReportCN(
stream=file,
verbosity=2, #生成的精确度
title='测试报告', #标题
description='用例', #描述
tester='王小贱' #测试人员名字
)#创建一个对象来执行用例
runner.run(suite)
注:verbosity 有3个等级,0是最低,1是仔细,2是最准确
输出:
python 原始.txt测试报告:
网页生成的报告:
3.1注:我们看到运行结果有…,这两个.是什么意思呢?
. 是通过一条用例,假如有100条测试用例,那么就有100个.
E 代码出错
F 用例执行失败