单元测试工具(连载9)

简介: 单元测试工具(连载9)

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])

abl相同,测试通过

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

ab,测试通过

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])

ab的一个实例,测试通过

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])

list1list2是否相等.

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批量运行及报告产生的代码。


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


#!/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所示。


image.png

30 unittest测试报告


星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net


顾翔凡言:

k=(p+m)t

其中:

k为常数。

p:团队人员质量水平,为单位小时内产生的有效质量,单位为/h;

m:团队方法质量水平,为单位小时内产生的有效质量,单位为/h;

t:为单位质量产品的交付时间,单位为h。


在团队方法质量水平不变,团队人员质量水平提高的情况下,交付时间变短;

在团队人员质量水平不变,团队方法质量水平提高的情况下,交付时间变短;

团队人员质量水平与方法质量水平乘积决定了软件的质量水平,如果这个值变小,则t变大;反之t变小。


例如,当k=4时:

当人员质量水平为1/小时、方法水平为1/小时时,交付时间为2小时。

当人员质量水平为2/小时、方法水平为1/小时时,交付时间为4/3小时。

当人员质量水平为1/小时、方法水平为2/小时时,交付时间为4/3小时。

当人员质量水平为0.5/小时、方法水平为0.5/小时时,交付时间为4小时。

目录
相关文章
|
6天前
|
网络协议 安全 测试技术
性能工具之emqtt-bench BenchMark 测试示例
【4月更文挑战第19天】在前面两篇文章中介绍了emqtt-bench工具和MQTT的入门压测,本文示例 emqtt_bench 对 MQTT Broker 做 Beachmark 测试,让大家对 MQTT消息中间 BenchMark 测试有个整体了解,方便平常在压测工作查阅。
140 7
性能工具之emqtt-bench BenchMark 测试示例
|
6天前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
31 0
|
6天前
|
机器学习/深度学习 数据采集 人工智能
【专栏】AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计
【4月更文挑战第27天】本文探讨了AI在软件测试中的应用,如自动执行测试用例、识别缺陷和优化测试设计。AI辅助工具利用机器学习、自然语言处理和图像识别提高效率,但面临数据质量、模型解释性、维护更新及安全性挑战。未来,AI将更注重用户体验,提升透明度,并在保护隐私的同时,通过联邦学习等技术共享知识。AI在软件测试领域的前景广阔,但需解决现有挑战。
|
6天前
|
测试技术
如何管理测试用例?测试用例有什么管理工具?YesDev
该文档介绍了测试用例和测试用例库的管理。测试用例是描述软件测试方案的详细步骤,包括测试目标、环境、输入、步骤和预期结果。测试用例库用于组织和管理这些用例,强调简洁性、完整性和可维护性。管理者可以创建、删除、重命名用例库,搜索和管理用例,以及通过层级目录结构来组织用例。此外,还支持通过Excel导入和导出测试用例,以及使用脑图查看用例关系。后台管理允许配置全局别名,如用例状态、优先级和执行结果。
|
6天前
|
机器学习/深度学习 人工智能 运维
深入探索软件测试:策略、工具与未来趋势
【5月更文挑战第14天】在软件开发的生命周期中,测试环节扮演着至关重要的角色。它不仅保证产品能够达到预定的质量标准,还有助于提前发现并修复潜在的缺陷,从而减少维护成本和提高用户满意度。本文将深入探讨当前软件测试领域的最佳实践,包括测试策略的制定、工具的选择以及面对快速变化的技术环境如何保持测试活动的前瞻性和灵活性。通过分析自动化测试、性能测试和安全测试等关键领域,本文旨在为读者提供一个全面的软件测试指南,同时对未来的发展趋势进行预测。
|
6天前
|
SQL 测试技术 网络安全
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
Python之SQLMap:自动SQL注入和渗透测试工具示例详解
29 0
|
6天前
|
测试技术 API
探索软件测试中的自动化工具与挑战
本文探讨了软件测试领域中自动化工具的应用与挑战。通过分析目前主流的自动化测试工具,探讨了其在提高测试效率、减少人工成本、增强测试覆盖率等方面的优势。然而,自动化测试也面临着诸如脆弱性、维护成本高等挑战。最后,提出了一些应对挑战的建议,以期为软件测试领域的自动化工作提供一些启示。
16 1
|
6天前
|
机器学习/深度学习 人工智能 测试技术
提升软件测试效率与准确性的策略与工具
【5月更文挑战第2天】 在软件开发生命周期中,测试阶段是确保产品质量的关键。然而,传统的测试方法往往耗时且容易出错。本文将探讨一系列现代软件测试策略和工具,旨在提高测试效率和准确性。我们将分析自动化测试框架、持续集成(CI)、测试驱动开发(TDD)以及人工智能(AI)在测试中的应用,并讨论如何结合这些技术和方法来优化测试流程。
|
6天前
|
敏捷开发 监控 测试技术
探索自动化测试工具Selenium Grid的高效集成策略
【4月更文挑战第30天】在现代Web应用的快速迭代和持续部署中,测试自动化已成为确保产品质量的关键。Selenium Grid作为一款支持多种浏览器和操作系统的测试工具,提供了并行执行测试用例的能力,极大地提升了测试效率。本文将深入探讨如何高效地将Selenium Grid集成到现有的测试框架中,以及实施过程中的最佳实践,帮助团队最大化测试覆盖率,同时降低资源消耗。
|
6天前
|
中间件 测试技术 API
探索自动化测试工具的新边界:Selenium与Appium的集成实践
【4月更文挑战第30天】 随着移动应用和Web应用的不断融合,传统的自动化测试工具需要适应新的测试环境。本文将详细分析Selenium和Appium这两款流行的自动化测试工具的集成实践,探讨如何构建一个能够同时支持Web和移动端应用的自动化测试框架。通过对比两者的技术架构、功能特性以及在实际项目中的集成过程,我们旨在为读者提供一个清晰的指导,帮助他们在复杂的应用环境中实现高效、稳定的自动化测试流程。

热门文章

最新文章