前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单元测试工具(连载9)

单元测试工具(连载9)

作者头像
顾翔
发布2019-12-12 13:35:59
4290
发布2019-12-12 13:35:59
举报

3.2 unittest的测试覆盖率分析

利用coverage工具可以分析单元测试的覆盖率,首先我们通过pip命令下载coverage。

pip install coverage

下载完毕,代开命令行编辑窗口,通过cd命令进入被测对象所在的目录,然后运行。

coverage run Calculatortest.py

这里Calculatortest.py为被测程序文件,测试程序被执行。最后运行如下命令,就可以看到测试覆盖报告了。

coverage report -m

C:\python\unittest>coverage report -m

Name Stmts Miss Cover Missing

-------------------------------------------------

Calculator.py 17 0 100%

CalculatorTest.py 44 0 100%

-------------------------------------------------

TOTAL 61 0 100%

3.3 unittest的断言

关于unittest的断言,参见表4所示。

表4 unittest的断言

断言方法

断言描述

assertEqual(a, b[, msg=None])

判断a==b,测试通过(用于数字)

assertNotEqual(a, b[, msg=None])

判断a!=b,测试通过

assertAlmostEqual(a, b[, places, ...])

判断a==b,测试通过(places为浮点数精度)

assertTrue(x[, msg=None])

bool(x) 为真,测试通过

assertFalse(x[, msg=None])

bool(x) 为假,测试通过

assertIs(a, b[, msg=None])

a与bl相同,测试通过

assertIsNot(a, b[, msg=None])

a与b,测试通过

assertIsNone(x[, msg=None])

x 是空,测试通过

assertIsNotNone(x[, msg=None])

x 不是空,测试通过

assertIn(a, b[, msg=None])

a 包含b,测试通过

assertNotIn(a, b[, msg=None])

a 不包含 b,测试通过

assertIsInstance(a, b[, msg=None])

a是b的一个实例 ,测试通过

assertNotIsInstance(a,b[, msg=None])

a不是b的一个实例 ,测试通过

assertDictContainsSubset(a,b[,msg=none])

a字典中是否包含b

assertDictEqual(a, b[,msg=none])

两个字典是否相等

assertGreater(a, b[,msg=none])

a>b

assertGreaterEqual(a, b[,msg=none])

a>=b

assertItemsEqual(expected_seq,actual_seq[,msg=none])

一个无序的序列特异性的比较。

assertListEqual(list1,list2[,msg=none])

list1与list2是否相等.

assertMultiLineEqual(first, second[,msg=none])

2个多行字符串是相等的

assertNotRegexpMatches(text,unexpected_regexp)

如果文本匹配正则表达式,将失败。

assertRaises(excClass[, callableObj])

除非excclass类抛出异常失败

assertRaisesRegexp(expected_exceptn, ...)

认为在引发异常的情况下消息匹配一个正则表达式。

assertRegexpMatches(text,expected_regexp[,msg=none])

测试失败,除非文本匹配正则表达式。

assertSequenceEqual(seq1,seq2[, msg,seq_type])

有序序列的相等断言 (like lists and tuples)

3.4 unittest批量运行及报告产生

同JUnit一样,unittest也可以进行批量测试,并且可以在测试完毕形成一个HTML格式的测试报告。为了实现HTML格式的测试报告,可以先到http://tungwaiyip.info/software/HTMLTestRunner.html下载HTMLTestRunner.py文件放入到%PYTHON_HOME%\Lib\目录下。如果使用的是Python X系列就不需要进行修改,Python 3.X系列请作如下修改。

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

下面是unittest批量运行及报告产生的代码。

案例7:unittest批量运行及报告产生。

#!/usr/bin/env python

#coding:utf-8

import unittest

from HTMLTestRunner import HTMLTestRunner#导入HTMLTestRunner

test_dir='./'#测试的工作目录

discover=unittest.defaultTestLoader.discover(test_dir,pattern="*Test.py")#"*Test.py"为测试的文件,支持正则表达式

if __name__=='__main__':

runner=unittest.TextTestRunner()#运行符合条件的测试文件

#以下用于生成测试报告

fp=open("result.html","wb")#result.html为测试报考名

runner=HTMLTestRunner(stream=fp,title='测试报告',description='测试用例执行报告')

runner.run(discover)

fp.close()

测试报告如图30所示。

图30 unittest测试报告

星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3.2 unittest的测试覆盖率分析
  • 3.3 unittest的断言
  • 3.4 unittest批量运行及报告产生
    • 案例7:unittest批量运行及报告产生。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档