
# math_method.py
# -*- coding: utf-8 -*-
class MathMethod:
def __init__(self,a,b):
self.a = a
self.b = b
def add(self):
return self.a + self.b
def multi(self):
return self.a * self.b
2、开始写测试用例,新建mathmathod.py文件。(因为一开始介绍unittest用法,所以用例简单举例几个)
# mathmathod.py
import unittest
from math_method import MathMethod #把刚写的来导入进来
#乘法
class TestMulti(unittest.TestCase):
def test_multi_two_positive(self):
res = MathMethod(1, 1).multi()
print('1*1的结果值是:', res)
def test_multi_two_zero(self):
res = MathMethod(0, 0).multi()
print('0*0的结果值是:', res)
def test_multi_two_negative(self):
res = MathMethod(-1, -2).multi()
print('-1*-2的结果值是:', res)
# 加法
# 这里的self来自父类TestCase
class TestMathMethod(unittest.TestCase):
def test_add_two_positive(self):
res = MathMethod(1, 1).add()
print('1+1的结果值是:', res)
self.assertEqual(2,res)
def test_add_two_zero(self):
res = MathMethod(0, 0).add()
print('0+0的结果值是:', res)
self.assertEqual(1, res, '两个0相加出错了') # 故意写错一个之后可以看到错误信息
def test_add_two_negative(self):
res = MathMethod(-1, -2).add()
print('-1+-2的结果值是:', res)
self.assertEqual(-3,res) #断言 比较两个值是否相等
if __name__ == '__main__':
unittest.main()
运行mathmethd.py,结果如下:

可以看到有5条通过,1条未通过,我们故意写错的那个断言,显示错误信息。
可以看到我们默认执行的是全部用例,如果我们想执行某条指定的用例怎么办呢?
新建文件mathmethod02.py。
# mathmethod02.py
# -*-coding: utf8 -*-
import unittest
from HtmlTestRunner import HTMLTestRunner
from practise.mathmethod import TestMathMethod
suite = unittest.TestSuite()
# 方法一
suite.addTest(TestMathMethod('test_add_two_positive'))
suite.addTest(TestMathMethod('test_add_two_zero'))
#方法二1
loader = unittest.TestLoader() #创建一个加载器
loadTestsFromTestCase根据测试名导入名为TestMathMethod类的所有用例,相当于一个容器
#从测试类找
suite.addTest(loader.loadTestsFromTestCase(TestMathMethod))
#方法二2
loadTestsFromModule根据模块名导入模块mathmethod模块中所有的用例
#从模块里面找
from practise import mathmethod #具体到模块
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromModule(mathmethod))
#执行 --原始的
# stream表示你要将这个保存在哪个文件里面去
# description是否要描述
# verbosity:0 1 2 代表测试报告信息详细程度
# 方法一
file = open('text.txt', 'w+', encoding='utf8')
# 上下文管理器(防止文件打开后忘记关闭) (如果不关闭文件会造成资源被占用的情况)
# 此种方式‘冒号:’后面内容执行完毕后自动关闭
# 方法二
with open('text.txt', 'w+', encoding='utf8') as file:
# runner = unittest.TextTestRunner(stream=file, descriptions=True, verbosity=2)# 0 1 2 2信息最详细
# runner.run(suite)
# 查看文件是否关闭 True False(可以测试查看一下)
# print(file.closed)
# 方法三 html
with open('test_report.html', 'w', encoding='utf8') as file:
# 默认报告存在本目录下的reports文件夹下面
runner = HTMLTestRunner(output="./reports/",stream=file, verbosity=2, descriptions=True)
runner.run(suite)
测试用例时方法一适合用例比较少的情况,如果用例比较多通过这种方式显然不太方便。
方法二有两种方式,一种是按照测试类名查找,一种是按照模块查找。
生成测试报告有三种方法,第一张方法容易忘记关闭文件,不推荐。

html格式的测试报告:

我这里导入的是HTMLTestRunner,如果可以的话可以下载HTMLTestRunnerNew报告形式更加美观。
网友评论