×

单元测试报告

测试报告怎么写?如何根据单元测试xml结果 生成最终的测试报告

admin admin 发表于2022-06-07 20:31:28 浏览94 评论0

抢沙发发表评论

测试报告怎么写


1 简介1.1编写目的本测试报告为安天科技项目的测试报告,目的在于总结测试阶段的测试以及分析测试结果,描述系统是否符合ATKJ-用户需求说明书。预期参考人员包括用户、测试人员、开发人员、项目管理者、质量管理人员和需要阅读本报告的高层经理。TestAge 中国软件测试时代!T/d5sPAl 1.2项目背景本产品是为天安科技有限公司开发的外贸企业管理系统。本产品依据EasyTrade基础模型研发,形成一个完善的以业务管理系统为核心,以基础信息、系统维护支持的外贸企业管理系统。主要功能是对该公司生产销售过程,财务过程实现信息化管理。 1.3系统简介1.4术语和缩写词 无1.5参考资料1、 安天科技项目需求与设计、2、 安天科技项目测试计划、3、 安天科技项目测试用例、4、 安天科技项目缺陷报告单、系统测试报告5、 公司CMMI体系文件《TS002_测试报告》 2 测试概要2.1测试用例设计 本次测试用例设计主要采用黑盒测试方法,功能模块及集成测试采用的具体方法有等价类划分、边界值划分、正交分解、因果图分析和错误猜测。在系统测试时依据业务流程采用回归测试。2.2测试环境与配置测试服务器配置: 服务器地址:10.0.0.39 操作系统:Windows XP Professional SP2 CPU: Intel(R) Pentium(R)4 CPU 3.00HZ 硬盘可用空间:74GB 数据库:Microsoft SQL Server 8.00.2039 应用服务器:EasyTrade服务器 测试对象:EasyTradeS3.exe 缺陷工具:Mercury Interactive TD8.0 SP22.3测试方法(和工具)主要是黑盒测试,测试的重点集中在业务流程、数据提取和各功能模块间的接口。其中单元测试由开发人员直接完成;功能模块采用黑盒测试的常用方法;集成测试模块采用非渐增式测试,偏重系统的接口和数据提取方面;系统测试主要体现在业务流程的测试,主要采用回归测试3 测试结果及缺陷分析3.1测试执行情况与记录3.1.1测试组织3j5Ylc i2r/{8TestAge 中国软件测试时代 `4Nri0N,_$T9X测试经理:刘义照TestAge 中国软件测试时代m!iL)S“_I­S 主要测试人员:李志学 TestAge 中国软件测试时代(tWA ]3lh$t#K陈龙 参与测试人员:张士红(模块测试用例编写) 3.1.2测试时间 测试类型 实际开始时间 实际结束时间 总工作日 功能测试 贸易管理 2008-04-14 2008-04-15 2 生产管理 2008-04-14 2008-04-15 2 采购管理 2008-04-14 2008-04-16 3 财务管理 2008-04-15 2008-04-16 2 发运单 2008-04-15 2008-04-16 2 集成测试 2008-04-16 2008-04-18 2 系统测试 2008-04-18 2008-04-24 6 安装测试 2008-04-25 2008-04-25 1 3.1.3测试版本 版本号 修订日期 修订人 修订内容说明 EASYTRADE 2008.04.16 刘义照 EASYTRADE3 2008.04.26 刘义照 3.2覆盖分析3.2.1需求覆盖 功能模块 功能名称 编号 是否通过 备注 基础资料(JC) 国家代码 JC01 Y 世界港口 JC02 Y 货币设定 JC03 Y 计量单位 JC04 Y 退税率设定 JC05 Y 附件类别 JC06 Y 材料类别 JC07 Y 单据编号 JC08 Y 工艺说明 JC09 Y 线说明 JC10 Y 银行利息设定 JC11 Y 贸易管理(MY) 客户资料 MY01 Y 款式工艺 MY02 Y ▲ 客户订单 MY03 Y ▲ 订单款式工艺 MY04 Y ▲ 大货跟踪表 MY06 Y ▲ 通讯录 MY05 Y 排产管理(PC) 服装工厂资料 PC01 Y 订货合同 PC02 Y ▲ 生产工艺资料 PC03 Y ▲ 大货生产状态确认 PC04 Y 采购管理(CG) 供应商资料 CG01 Y 订购单 CG02 Y ▲ 发货单 CG03 Y ▲ 退货单 CG04 Y ▲ 产品清单汇总 CG05 Y 单证管理(DZ) 发运单 DZ01 Y ▲ 成本核算单 DZ02 Y ▲ 财务管理(CW) 服装工厂往来帐目 CW01 Y 服装厂配料担保账目 CW02 Y 服装工厂结算单 CW03 Y ▲ 供应商担保账目 CW04 Y 注:TestAge 中国软件测试时代­r*fm:Z1W3~?[Y][P][N][N/A]四项值依据TestAge 中国软件测试时代测试结果,按编号给出每一测试需求的通过与否结论。P表示部分通过,N/A表示不可测试或者用例不适用。▲表示为测试重点部分。D­dduS­a6} ihV WW8需求覆盖率=Y项数/需求项数 ×100%=33/33×100%=100%3.2.2测试覆盖 模块 用例个数 执行数 未执行数 未执行/漏测原因 贸易管理 28 28 生产管理 38 38 采购管理 39 39 单证管理 17 17 财务管理 11 11 合计 133 133 .o Knz)u5 ~5_zD }mI-N9c8测试覆盖率=执行总数/用例总数 ×100%=133/133×100%=100% 3.3缺陷的统计与分析3.3.1缺陷汇总缺陷总数:105按缺陷严重程度:1-Low: 16个 所占百分比:15.238% 2-Medium: 77个 所占百分比:73.342% 3-High: 12个 所占百分比:11.420%

如何根据单元测试xml结果 生成最终的测试报告


使用robotium进行Android应用进行自动化测试,之前用TMTS框架,但收集到的单元测试结果常常会少掉一些用例集。。穷则思变,Android的测试框架主要是通过InstrumentationTestRunner对被测应用进行控制与执行,因此可以对InstrumentationTestRunner进行扩展以完成测试结果收集,然后通过jenkins的Publish JUnit test result report插件得到结果报告。
1.新建一个java package,新建一个java类
源码来自开源项目:https://code.google.com/p/nbandroid-utils/
源码中生成的TEST-all.xml结果文件位于/data/data/com.example/files目录下,要导出结果文件的话,需要手机拥有root权限,比较麻烦,因此下面修改了文件存放路径,有SD卡则文件位于SD卡的/robotium目录下
代码贴不下,详细代码请见http://blog.csdn.net/hunterno4/article/details/14485663
2.修改AndroidManifest.xml文件
将原来的:
[html] view plaincopy
《instrumentation
android:name=“android.test.InstrumentationTestRunner“
android:targetPackage=“com.example“ /》
修改为:
[html] view plaincopy
《instrumentation
android:name=“com.example.test.instrumentation.InstrumentationTestRunner“
android:targetPackage=“com.example“ /》

3.修改Run Configurations
右键测试工程》Run as 》Run Configurations
在Test栏中,勾选Run all tests in the selected project,or package
这样每次在Eclipse中运行时才会使用新的InstrumentationTestRunner
在Instrumentation runner处下拉选择新写的InstrumentationTestRunner
点击Apply完成设置

4.命令行下运行测试用例
Running all tests: adb shell am instrument -w com.android.foo/com.example.test.instrumentation.InstrumentationTestRunner
Running a single testcase: adb shell am instrument -w -e class com.android.foo.FooTest com.android.foo/com.example.test.instrumentation.InstrumentationTestRunner
Running multiple tests: adb shell am instrument -w -e class com.android.foo.FooTest,com.android.foo.TooTest com.android.foo/com.example.test.instrumentation.InstrumentationTestRunner
命令行下运行测试用例与平时一样,只要将原来的InstrumentationTestRunner换成新的InstrumentationTestRunner就行,
需要注意的是,由于每次命令行执行完毕,都会覆盖原有的TEST-all.xml文件,即如果采用Running a single testcase方式运行多个测试用例集,则最后结果只会记录最后一个用例集,因此建议采用Running multiple tests方式

5.运行完成后将手机中的文件导出
adb -s $ANDROID_AVD_DEVICE pull /mnt/sdcard/rototium/TEST-all.xml
其中$ANDROID_AVD_DEVICE为参数化的手机序列号

6.在jenkins中任务构建完成后即可使用Publish JUnit test result report插件分析得出单元测试报告

如何判断报告单元 reporting unit


PHPUnit是一个用PHP编程语言开发的开源,是一个单元测试框架。PHPUnit由Sebastian Bergmann创建,源于Kent Beck的SUnit,是xUnit家族的框架之一。本文将探索PHPUnit,特别介绍自动化单元测试的基本用法。你需要掌握PHP编程语言的基本知识才能继续。

介绍

单元测试是对单独的代码对象进行测试的过程,比如对函数、类、方法进行测试。单元测试可以使用任意一段已经写好的测试代码,也可以使用一些已经存在的测试框架,比如JUnit、PHPUnit或者Cantata++,单元测试框架提供了一系列共同、有用的功能来帮助人们编写自动化的检测单元,例如检查一个实际的值是否符合我们期望的值的断言。单元测试框架经常会包含每个测试的报告,以及给出你已经覆盖到的代码覆盖率。

heiing
heiing
翻译于 4年前
5人顶
顶 翻译得不错哦!
安装

PHPUnit 通常以 PEAR 包,Composer bundle 或是 PHAR 文件形式存在。如果你要安装它,你需要先安装 PHP Code Coverage 依赖。在 PEAR 中,你需要天价 phpunit.de 频道,并通过命令行安装两个包:

PHP Unit Testing with PHPUnit
(注意,在输入时,默认的 XAMPP 的 PEAR 安装已经被破坏:你需要在尝试上面代码之前先安装 PEAR PHAR)。

测试一个简单的类

试试只有单一方法的简单类:

class TruthTeller
{
public function() tellTruth
{
return true;
}
}
是的,现在 tellTruth 方法总是返回 TRUE,那么我们应改怎么通过单元测试确保今后它的返回值不变?

K6F
K6F
翻译于 4年前
4人顶
顶 翻译得不错哦!
使用PHPUnit,每组测试是PHPUnit_Framework_TestCase类的一个扩展类,它提供了常用的功能,如判断。下面是一个对上述tellTruth方法的一个基本测试:

require_once ’PHPUnit/Autoload.php’;
require_once ’TruthTeller.class.php’;
class TruthTester extends PHPUnit_Framework_TestCase
{
function testTruthTeller()
{
$tt = new TruthTeller();
$this-》assertTrue($tt-》tellTruth());
}
}
请注意,您需要包括PHPUnit的自动加载器和“被测对象”,在这种情况下的TruthTeller类文件。

我们用剩余的代码要做的就是判断,如果tellTruth方法被调用时,它将返回true。这些判断是PHPUnit的核心 - 它们将决定一个测试是通过还是失败。

Holiday_
Holiday_
翻译于 4年前
2人顶
顶 翻译得不错哦!
如果你启动了命令行提示,切换到你的测试所在目录,运行 phpunit TruthTester (参数是你的测试文件名,去除 .php 扩展名),PHPUnit 将会运行文件中指定的所有它能找到的测试(测试将是名字以 test 开头的所有方法)。

PHP Unit Testing with PHPUnit

如果你回到 TruthTeller 类,并将其方法的返回值改为 FALSE,你讲看到类似下面的信息:

PHP Unit Testing with PHPUnit

这就是单元测试的核心——编写断言并判断是否通过。当先前编写并测试通过的代码开始无法通过时,你就知道有更改的代码对现有代码起了负面影响。

在现实中,你肯定需要处理比上一个更复杂的情况。比如一个常见的测试是检查下面的outputArray方法是否返回了一个特定数据结构的数组。

class ArrayTeller
{
public function outputArray()
{
return array(1,2,3);
}
}
对此方法的一个简单测试可以这样写:

class ArrayTester extends PHPUnit_Framework_TestCase
{
function testArrayTeller()
{
$at = new ArrayTeller();
$result = $at-》outputArray(1);
$this-》assertInternalType(“array“, $result);
$this-》assertCount(3, $result);
$this-》assertEquals(1, $result);
$this-》assertEquals(3, $result);
}
}
如你所见,使用PHPUnit进行单元测试时可以在每一行进行多样化的检查:可以检查ArrayTeller返回的是否是一个数组,而非任何其他数据类型;可以检查数组的长度;可以检查数组中的单个值。除这些外,还有其它一些功能的断言,比如如果你需要更复杂的判断,假设要知道一个返回值是否处于两个整数的区间内,只要你能用一个IF语句的结果来表述,你就可以用断言assertTrue来测试结果。可点击随后链接来访问PHPUnit文档中的所有可用断言列表,。

单元测试片面的讲就是编写覆盖被测方法所有预期行为的测试,最好基于规范文档,不过如果你在编写覆盖现有代码的单元测试,将其视为白盒测试的一种形式更有用。如果你知道一个如下的简单切换方法:

class Switcher
{
public function aOrB($switch, $a, $b)
{
if ($switch == TRUE)
{
return $a;
}
else
{
return $b;
}
}
}
… 你就知道需要编写两个测试,分别针对一种情形。但你开始质疑你是如何知道这些的——如果以后方法变为 True 返回 $a,False 返回 $b,其它情形抛出一个异常,理想情况是规范文档中的某处有提及。无论如何,上面方法的测试如下:

class SwitcherTester extends PHPUnit_Framework_TestCase
{
function testSwitchTrue()
{
$switcher = new Switcher();
$result = $switcher-》aOrB(TRUE, 1, 2);
$this-》assertEquals(1, $result);
}
function testSwitchFalse()
{
$switcher = new Switcher();
$result = $switcher-》aOrB(FALSE, 1, 2);
$this-》assertEquals(2, $result);
}
}
运行两个测试同在命令行运行 phpunit SwitcherTester 一样简单。
K6F
使用 setUp,简化多个测试

当你的测试需要覆盖越来越多的输入组合及数据设置时,使用函数: setUp 将会非常有帮助。setUp 是 PHPUnit_Framework_TestCase 类中你可以覆写以在类中所有及每个测试运行前运行的代码。(注意,还有一个简单的方法,tearDown,它会在所有测试结束后立即运行——这对关闭 socket 及文件指针很有帮助)

下面是如何精简代码的一个简单的例子。尝试一个依赖一些对象数据何输入的方法。

class DataTeller
{
private $data;
public function __construct($data)
{
$this-》data = $data;
}
public function outputData($switch)
{
if ($switch == TRUE)
{
if (!empty($this-》data))
return $this-》data;
else
return FALSE;
}
else
{
return “switch off“;
}
}
}
如果你继续之前幼稚的方法,我们需要编写三个测试,并实例化三个 DataTeller 对象,每个测试一次。然而,通过 setUp,我们可以讲对 DataTellers对象的创建,至少是3个中的两个。只有最后一个测试需要新的 DataTeller 被创建。

class DataTellerTester extends PHPUnit_Framework_TestCase
{
private $dt;
protected $data = “valid data“;
function setUp()
{
$this-》dt = new DataTeller($this-》data);
}
function testOutputArraySwitchOff()
{
$this-》assertEquals(“switch off“, $this-》dt-》outputData(FALSE));
}
function testOutputArraySwitchOn()
{
$this-》assertEquals($this-》data, $this-》dt-》outputData(TRUE));
}
function testOutputArrayEmptySwitchOn()
{
$new_dt = new DataTeller(““);
$this-》assertEquals(FALSE, $new_dt-》outputData(TRUE));
}
}

PHPUnit使用断言来告诉你你所测试的代码是否如你预期那样工作。学到这里,你现在应该已经可以写一些简单的测试来覆盖一些功能相对比较独立的类了。但当要测试一些互相有交互操作的类时,就要面对真正的挑战了。为此,请收听下一次讲解,学习如何为静态类写测试,以及如何使用 mock(模拟对象)和 stubs(存根,桩点)来孤立你要测试的对象与其所在环境中其他代码的联系。
-单元测试报告