unittest单元测试框架&生成测试报告

断言方法

unittest框架的TestCase类提供方法用于测试结果的判断:

assertEqual(a,b)
assertNotEqual(a,b)
#assertEqual(a, b, msg=None)
#断言a和b是否相等,msg为可选参数,定义测试失败时打印的信息

assertTrue(x)
assertFalse(x)

assertIs(a,b)
assertIsNot(a,b)

assertIsNone(x)
assertIsNotNone(x)

assertIn(a,b)
assertNotIn(a,b)

assertIsInstance(a,b)
assertNotIsInstance(a,b)
#断言obj是否为cls的一个实例

一个简单的例子

创建一个被测试类tested.py,实现加法和减法功能

class Count:

    def __init__(self, a, b):
        self.a=int(a)
        self.b=int(b)

    def add(self):
        return self.a+self.b

    def sub(self):
        return self.a-self.b

编写两个测试用例testadd.py和testsub.py分别测试加法和减法
#setUp():用于设置初始化工作,在执行每一个测试用例前被执行。如定义浏览器启动和基础URL地址等
#tearDown():在每个测试方法执行后调用,用于测试用例执行后的清理工作。如退出浏览器、关闭驱动,恢复用例执行状态等
#unittest.main():unittest提供全局的main()方法,将单元测试模块变成可以直接运行的测试脚本。使用TestLoader类来搜索模块中以"test"命名开头的测试方法,并自动执行。
#if name==‘main’:代表直接使用模块。

from tested import Count
import unittest

#创建TestAdd类继承unittest的TestCase类
#(可以将TestCase类看作对特定类进行测试的集合)
class TestAdd(unittest.TestCase):
    '''加法测试'''

    def setUp(self):
        print("test start")
	
    def tearDown(self):
        print("test end")

    def test_add(self):
        '''2+3是否等于5'''
        j=Count(2,3)
        self.assertEqual(j.add(), 5)

    def test_add1(self):
    	'''41+76是否等于117'''
        j=Count(41,76)
        self.assertEqual(j.add(),117)

if __name__ =='__main__':
    unittest.main()
from tested import Count
import unittest

class TestSub(unittest.TestCase):

    def setUp(self):
        print("test start")

    def tearDown(self):
        print("test end")

    def test_sub(self):
        j=Count(2,3)
        self.assertEqual(j.sub(),-1)

    def test_sub1(self):
        j=Count(71,46)
        self.assertEqual(j.sub(),25)

if __name__ == '__main__':
    unittest.main()

创建用于执行所有用例并输出测试报告的runtest.py文件。
#HTMLTestRunner是unittest的一个扩展,可以生成易于使用的HTML测试报告。
下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html
将其复制到\Python37\Lib目录下。
针对python3进行修改:
第94行,import StringIO修改成import io
第539行,self.outputBuffer = StringIO.StringIO()修改成self.outputBuffer = io.StringIO()
第631行,print >> sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime)修改成print(sys.stderr, ‘\nTime Elapsed: %s’ % (self.stopTime-self.startTime))
第642行,if not rmap.has_key(cls):修改成if not cls in rmap:
第766行,uo = o.decode(‘latin-1’)修改成uo = o
第772行,ue = e.decode(‘latin-1’)修改成ue = e

#open()以二进制写模式打开当前文件,如果没有则自动创建。

TestLoader类负责根据各种标准加载测试用例,并将它们返回给测试套件。unittest提供了可以共享的defaultTestLoader类,可以使用其子类和方法如discover()方法创建实例。
#discover()会自动根据测试目录(test_dir)匹配查找测试用例文件(test*.py),并将其组装到测试套件中。之后可直接用run()方法执行discover。

import unittest,time
from HTMLTestRunner import HTMLTestRunner

#定义测试用例的目录为当前目录
test_dir='./'
discover=unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')

if __name__ == '__main__':
    #按照一定格式获取当前时间
    now = time.strftime("%Y-%m-%d %H_%M_%S")

    #定义报告存放路径
    filename = './report/' +now +'result.html'
    fp = open(filename, 'wb')

    #定义测试报告
    runner = HTMLTestRunner(stream=fp, title='加法测试报告', description='用例执行情况: ')
    runner.run(discover)

    fp.close()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值