软件测试(英语:software testing),描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。以秘奥服装销售软件为例,测试目标是1.发现一些可以通过测试避免的开发风险。2.实施测试来降低所发现的风险。3.确定测试何时可以结束。4.在开发服装销售项目的过程中将测试看作是一个标准项目。
1.2单元测试
1.2.1VisualStudio2010单元测试概述
单元测试是一种编程测试,通过直接调用某个类的方法来执行源代码,如果包括Assert语句,它们可以根据所期望的值来测试实际生成的值。
对于测试人员(尤其是开发人员)来说,单元测试是非常重要的工具。尽管要测试的“单元”的大小各异,但VisualStudio2010测试工具会生成
专门针对方法(包括私有方法)的单元测试。
在VisualStudio2010中,可以使用代码生成功能来创建单元测试代码,也可以完全手动编写测试。无论使用何种方式,测试类和所有测试方法
都用编程属性加以标识。使用“[TestClass()]”属性标记每个测试类,使用“[TestMethod()]”属性标记每个测试方法。这些属性是在生成单
元测试时自动分配的,如果是手动编写单元测试代码,则必须自己添加类和方法的属性。
1.2.2VisualStudio2010单元测试步骤
1.创建被测试项目
(1)打开VisualStudio2010,在“文件”菜单上指向“新建”,然后单击“项目”,随即出现“新建项目”对话框(见图13.1)。
(2)在“已安装的模板”下选择“VisualC#”,然后选择“类库”,在“名称”行中键人“Tested—Class”,在“解决方案名称”行中键入
“UnitTestSlution”,然后单击“确定”。新的TestedClass项目即被创建,并显示在解决方案资源管理器中(见图1.2)。
(3)在VisualStudio2010代码编辑器中,用以下代码代替Classl的定义:
(4)在“生成”菜单上,单击“生成解决方案”。
2.创建单元测试
(1)在VisualStudio2010代码编辑器中找到“Calculator”类,鼠标滚动到“Add”方法。右击“Add”方法,然后选择“创建单元测试”,随即
出现“创建单元测试”对话框(见图13.3)。
在“创建单元测试”对话框上,树结构将显示“Calculator”类的程序集的层次结构。使用此页可以为选定的任何成员生成单元测试。在该树
结构中,只选择了“Add”方法,将其保留选定状态。对于“输出项目”,请选择“创建新的VisualC#测试项目”。
(2)堆击“设置”,随即出现“测试生成设置”对话框(见图1.4)。在“命名设置”下,可以更改测试文件、测试类和测试方法在生成时的命
名方式。在“常规”下,可以更改测试生成的其他方面。将这些设置保留为默认值,然后单击“确定”按钮。
(3)在“创建单元测试”对话框中单击“确定”,随即出现“新建测试项目”对话框,输入新项目的名称“TestProject”然后单击“创建”按
钮。这将创建一个名为TestProject的项目,该项目将显示在解决方案资源管理器中。一个名为“CalculatorTest.CS”的文件被添加到
“TestProject”测试项目中,该文件包含一个测试类。该类中填充有一个TestContext属性以及测试“Add”方法的方法(见图1.5)。
(4)在“CalculatorTest.CS”中,指定要测试的变量的值。滚动到“AddTest”方法,在此可以看到“//TODO”行,它们指示要设置的变量
。
(5)以同样的方式为Subtract,Multiply,Divide三个方法创建测试类,并设置测试变量的相应值。
3.运行单元测试
(1)打开“测试视图”面板,如图13.6所示。
(2)在测试视图面板右击“AddTest”,再单击“运行选定内容”,如图13.7所示。
如果“测试结果”面板尚未打开,则它现在打开。“AddTest”测试运行。在“测试结果”面板的“结果”列中,当测试运行时,测试状态将显
示为“正在进行”,如图13.8所示。测试运行完成后,测试的结果将更改为“无结论”,如图13.9所示。
(3)在“测试结果”面板单击“测试运行无结论”链接,这将打开“结果摘要”页,其中包含有关测试结果的信息,如图13.10所示。
或者在“测试结果”窗口右键单击表示测试的行,然后选择“查看测试结果详细信息”,这将打开“通用结果”页,其中包含有关测试结果的
详细信息,如图13.11所示。
(4)请注意,“测试结果详细信息”页显示以下错误信息:“Assert.Inconclusive失败。验证此测试方法的正确性。”打开
“TestExampleTest.CS”文件并滚动到“AddTest”方法。注释掉最后一条语句“Assert.Inconclusive(”验证此测试方法的正确性。”);
”,再次运行测试,则会得出“通过”结果(请读者自行验证)。
4.运行单元测试并修复代码
(1)打开“TestExampleTest.CS”文件,滚动到“DivideTest”方法,找到“//TODO”行,它们
指示要设置的变量。
(2)为变量设置下列值:
intdividend一10;
intdivisor一0;
intexpected—int.MaxValue;
并注释掉最后一行“Assert.Inconclusive(”验证此测试方法的正确性。”);”。然后保存“Tes—tExampleTest.CS”文件。
(3)在“测试视图”面板点击“刷新”快捷按钮后,运行测试“DivideTest”。测试结果显示“未通过”,错误信息提示“测试方法
TestProject.CalculatorTest.DivideTest引发了异常:Sys—tern.DivideByZeroException:尝试除以零。”,并给出错误堆栈跟踪,如图
13.12所示。
(4)单击错误堆栈跟踪的第一行链接,导航到“Calculator”类出现错误的代码行,如图13.13所示。
(5)再次运行测试,测试结果显示“通过”。很显然,被测试项目只能进行整数的运算,如果想计算10÷3的精确值,则无法进行,为此,需要
在被测试项目中添加其他类型值的四则运算方法。
如果用相关测试理论来指导编程,那么,要写出一个健壮的程序,比如简单的四则运算程序,也会有些麻烦,这就是单元测试给程序员带来的
好处,它将指导你来编写健壮的程序。请读者根据测试理论,自行完善源代码并完成测试。
1.2.3查看代码覆盖率
(1)在“解决方案资源管理器中”找到“TestedClass”项目,并向该项目添加如下类:
(2)为该类创建单元测试,并用以下代码代替测试类的定义:
(3)在“解决方案资源管理器”的“SolutionItems”文件夹下.双击运行配置文件“Local.testsettings”,打开“测试设置”对话框。
(4)在“测试设置”对话框上.选择“数据和诊断”,确保启用了“代码覆盖率”,如图13.14所示。
(5)在“测试设置”对话框上单击“配置”。打开“代码覆盖率详细信息”对话框,确保选中“TestedClass.dll”,单击“确定”。现在已为
测试设置配置并保存了代码覆盖率设置,如图13.15所示。
(6)在“测试设置”对话框上单击“另存为”.再单击“保存”。将出现一个消息框。询问是否要替换现有文件,在消息框中单击“是”替换现
有文件,然后关闭“测试设置”对话框上。
(7)在“测试”菜单上指向“选择活动测试运行配置”,确保选择“本地(Local.testset—tings)”,如图13.16所示。
(8)在“测试”菜单上指向“窗口”,单击“测试列表编辑器”,打开测试列表编辑器,如图13.17所示。
(9)确保选中“CalculateExpenseTest”旁边的复选框,右键单击该行并选择“运行选中的测试”,运行这个测试,测试结果显示为“通过”。
(10)在“测试”菜单上指向“窗口”,单击“代码覆盖率结果”,打开“代码覆盖率结果”面板,如图13.18所示。“代码覆盖率结果”窗口
中的“层次结构”列将显示一个节点,该节点包含最新测试运行中得到的所有代码覆盖率数据。
(11)在“代码覆盖率结果”面板上选择最后一行,单击右键,选择“转到源代码”,如图13.19所示。
(12)在源代码窗口,可以看到代码的突出显示效果。用浅蓝色突出显示的代码行已在测试运行中执行过,用浅褐色突出显示的代码行已部分执
行过,而用红褐色突出显示的代码行则还没有执行过。如图1.20所示。
(13)打开“ExpenseTest.CS”文件,在“calculateExpenseTest”方法中添加如下测试用例,观察代码覆盖率的变化。
Assert.AreEqual(target.CalculateExpense(20,50),2500);
继续在“CalculateExpenseTest”方法中添加适当的测试用例,观察代码覆盖率变化。请读者分析代码覆盖率在单元测试中的作用。
13.3编码的UI测试
可以使用VisualStudio2010旗舰版创建用户界面的自动测试,这种测试叫作“编码的UI测试”。编码的UI测试对应用程序的用户界面控件执行
操作,并验证是否以正确的值显示了正确的控件。编码的UI测试包含一个UI映射,该UI映射表示在受测应用程序中看到的UI控件。然后,可以
对这些UI测试控件执行操作以自动化用户界面。
编码的UI测试类使用“[CodedUITest]”特性来标识,每个编码的UI测试都是编码的UI测试类中的一个测试方法。可以向每个编码的UI测试类添
加多个测试方法,并使用“[Test—Method3”特性标识每个编码的UI测试方法。测试方法可以为UI测试控件添加验证代码以获取UI测试控件的
属性值,还可以使用Assert语句将属性的实际值与预期值进行比较,用比较的结果确定测试的结果。每次运行编码的U1测试时,都可以分析测
试结果并在测试未通过时查看或存储断言失败的详细信息。
13.3.1创建编码的U1测试
(1)在13.1.2节的解决方案中添加新建“Windows窗体应用程序”项目,通过调用上节创建的“Calculator”类,以执行简单的四则运算。程
序运行界面如图1.21所示。
(2)在“解决方案资源管理器”中,右击测试项目“TestProject”,指向“添加”,然后单击“编码的UI测试”,将显示“生成代码”对话框
,如图1.22所示。
(3)在“生成代码”对话框,选择“录制操作、编辑UI映射或添加断言”,单击“确定”按钮,在屏幕右下角将出现“编码的UI测试生成器”对
话框,如图1.23所示。
(4)单击“录制”图标,则开始录制操作。此时执行要在应用程序中录制的操作,必要时还包括启动应用程序,这些操作便被录制成测试程序。
例如,运行刚创建的应用程序,通过在前两个文本框中输入3和2,然后单击“计算”按钮,则在第三个文本框中显示5,如图1.24所示。
(5)单击“显示录制的步骤”图标,查看刚录制的操作,则这些操作显示在“编码的UI测试生成器一录制的操作”对话框中,如图1.25所示。
如果不希望保留录制的操作,则可以选择不希望保留的操作,然后单击“删除”图标。
(6)请单击“生成代码”图标。在“方法名”中键入编码的UI测试方法的名称,然后单击“添加并生成”,则生成测试代码,如图1.26所示。
(7)若要为UI控件生成断言,则单击十字线图标并其拖到要验证其正确性的控件中。此时将显示“编码的UI测试生成器一添加断言”对话框,如
图1.27所示。
(8)在“编码的UI测试生成器一添加断言”对话框上,选择要验证的UI控件的属性。然后指向“添加断言”图标,将显示“添加断言”对话框,
如图1.28所示。
(9)为断言选择“比较运算符”,并在“比较值”中为断言键入比较值,然后单击“确定”。为测试添加所有断言后,请关闭“编码的UI测试生
成器一添加断言”对话框。
(10)若要生成断言代码,单击“生成代码”图标,将显示“编码的UI测试生成器一生成代码”对话框。在“方法名”中键入编码的UI测试方法
的名称,然后单击“添加并生成”。生成的代码如下:
(11)单击“关闭”图标关闭“编码的UI测试生成器”。
13.3.2运行编码的UI测试
右键单击测试方法,然后单击“运行测试”,测试详细结果如图1.29所示。
13.3.3数据驱动的编码的UI测试
在使用特定数据创建编码的UI测试之后,可能需要用不同的数据集多次运行编码的UI
测试以测试不同条件。为此,可以从数据源中向编码的UI测试添加参数,以创建数据驱动的
编码的UI测试。数据源中的每一行都是编码的UI测试的迭代,测试的总体结果将基于所有
迭代的结果。例如,如果一个迭代失败,则总体测试结果为失败。
本节使用1.2.1节所创建的测试。
(1)打开包含编码的UI测试源文件的解决方案,在测试项目中添加数据文件“Data.CSV”,内容如下:
(2)单击“测试”,指向“窗口”,再指向“测试视图”。此时将显示“测试视图”窗口,其中显示了编码的UI测试。在“测试视图”窗口中,
右击编码的UI测试方法,并指向“属性”,将显示“属性”窗口,如图13.30所示。
(3)在“属性”窗口中单击“数据连接字符串”右边的省略号,将显示“新建测试数据源向导”,如图13.31所示。
(4)选择要使用的数据源的类型。对于本示例,选择CSV文件作为数据源,单击“下一步”并为CSV文件输入路径和文件名,然后单击“完成”。
(5)在“解决方案资源管理器”中打开“CodedUITestl.CS”文件。对“CodedUITestl”类的方法“CodedUITestMethodl”作如下更改:
(6)保存对“CodedUITestl.cs”源代码文件所做的更改。在“测试视图”窗口中右击编码的UI测试,并指向“运行选定内容”。“测试结果”
如图13.32所示。
1.4负载测试
若要确定软件响应各种使用级别的程度,可以执行负载测试。负载测试通过模拟同时访问软件程序的多个用户,对该软件程序的预计使用情况
进行建模。负载测试由一系列web测试或单元测试组成,这些测试在存在多个模拟用户的情况下运行一段时间。向负载测试添加Web测试时,会
模拟多个用户同时连接到一台服务器并发出多个HTTP请求的过程。向负载测试添加单元测试时,会测试非基于Web的服务器组件的性能。
使用VisualStudio2010旗舰版,可以为生成模拟繁重测试负载设置一组计算机。这组计算机由一个或多个测试控制器和一个或多个测试代理组
成。测试代理运行测试,可以生成模拟负载。测试代理控制器协调测试代理,并收集测试结果。负载测试可用于以下几种不同的测试类型:
(1)冒烟测试:确定在短时间内负载较小时应用程序如何执行。
(2)压力测试:确定在较长时间内负载较大时应用程序是否能成功运行。
(3)性能测试:确定应用程序的响应能力。
(4)容量计划测试:确定在各种容量下应用程序如何执行。
本节主要介绍如何使用VisualStudio2010进行Web性能测试。Web性能测试也称为声明性Web测试,用于测试Web应用程序的功能以及在负载下测
试Web应用程序。Web性能测试由一系列HTTP请求组成,通过发出HTTP请求在协议层工作。web性能测试不运行JavaScript,但是,可以在运行时
通过使用Web性能测试插件、Web性能测试请求插件、提取规则或编码的Web性能测试来模拟JavaScript操作。
在VisualStudio2010中,可以通过在浏览器会话中使用web测试记录器记录HTTP请求来创建Web性能测试,也可以使用Web测试编辑器手动构建
Web性能测试。
1.4.1创建简单的Web应用程序
(1)在VisualStudio2010“文件”菜单上,单击“新建”,然后单击“项目”,将出现“新建项目”对话框。
(2)在“已安装的模板”下,展开“VisualC#”,然后单击“Web”。在Web项目类型的列表中,选择“ASP.NETWeb应用程序”,在“名称”框
中键入“TestedWebApplication”,在解决方案名称框中键入“WebPerformanceTestingSlution”,然后单击“确定”,如图13.33所示。
(3)系统将创建“TestedWebApplication”项目,该项目会自动生成一个默认的Web应用程序。
(4)按“Ctrl+F5”在浏览器中运行该Web应用程序,将看到第一页,如图13.34所示。
(5)将此Web应用程序的地址复制到剪贴板或记事本文件中待用。该地址可能如下所示:http.://localhost:<端口号>/。关闭浏览器,但
使Web应用程序保持打开。
1.4.2记录和运行Web性能测试
1.创建测试项目
(1)继续使用以上创建的解决方案,在“解决方案资源管理器”面板右击,选择“添加”,再选择“新建项目”,打开“添加新项目”对话框。
(2)在“已安装的模板”下,展开“VisualC#”,然后选择“测试”。
(3)在模板列表中,选择“测试项目”。
(4)在“名称”框中键入“TestProject”。
(5)单击“确定”。
默认情况下,VisualStudio将添加一个单元测试文件,其中包含有关创作测试的信息,这里我们不需要改文件,可以删除该文件。
2.记录Web性能测试
(1)在“测试”菜单上,单击“新建测试”,将出现“添加新测试”对话框,如图13.35所示。
(2)在“添加新测试”对话框中,选择“Web性能测试”,然后单击“确定”。名为“WebT—estl.webtest”的新Web性能测试文件即添加到项
目“TestProject”中,并且“Web测试记录器”在InternetExplorer的一个新实例中打开,如图13.36所示。
(3)在浏览器的地址栏中,键人1.4.1节保存的Web应用程序的地址,然后按回车。
(4)在Web应用程序上点击一些链接,最后返回到首页。
(5)在“Web测试记录器”上单击“停止”以停止记录。对话框显示消息“正在检测动态参数”。还显示一个进度栏,该进度栏说明了在接收到
的HTTP响应中的参数检测状态。如果未检测到任何动态参数,对话框将显示消息“未检测到任何要提升的动态参数”,然后关闭该对话框。如
果检测到动态参数,将显示“将动态参数提升为Web测试参数”对话框。
(6)记录结束后,保存新记录的Web性能测试。可以在“Web测试编辑器”(见图13.37)中以URL列表的形式查看刚记录的Web性能测试,也可以编
辑该测试。
3.查看请求属性
Web测试编辑器中包含URL的节点树称为“请求树”。在记录测试之后,可以选择请求树中的节点以查看与每个请求关联的属性。请注意下面有
关已捕获的请求的相关事项:
(1)查询字符串参数和窗体发送参数已被检测出来并会自动生成到测试中。可以针对Web测试的每个请求,在VisualStudio的“属性”窗口中查
看传输方法属性GET或POST,如图13.38所示。
(2)完成记录后,Web测试记录器会自动检测是否使用了隐藏的窗体字段。可以向包含隐藏字段的请求添加ExtractHiddenFields提取规则。提取
规则将在Web测试的上下文中捕获隐藏字段值。发送回web服务器的隐藏字段值可以用与那些上下文参数的内容绑定来替换。这将允许测试在运
行时使用正确的隐藏字段值,这对于包含带有VIEWSTATE的唯一标识符的隐藏字段是必需的。
(3)不记录图像。因为请求的ParseDependentLinks属性设置为True,所以将对页面进行分析,确定页面上的依赖性请求集,例如图像、CSS和
JavaSeript。
(4)不记录重定向。在测试运行时会自动跟踪重定向。
4.运行Web性能测试
(1)在“Web测试编辑器”中,单击工具栏上的“运行测试”。测试开始运行,并且该测试中的每个请求将显示在“Web测试查看器”中,整个测
试的结果显示在“测试结果”窗口中。
(2)在“web测试查看器”中,选择列表中的第一个请求。在该请求的左侧看到一个绿色复选标记,绿色复选标记表示请求成功,同时会在下窗
格中看到Web应用程序的第一页,如图13.39所示。
(3)在“Web测试查看器”中,选择对http://www.asp.net/cn的请求。在该请求的左侧看到一个红色的X。红色的X表示请求失败,这将导
致在测试完成之后,整个测试的结果将失败。默认情况下,如果一个请求失败,测试的余下部分不会中止,而是会继续。例如,对ht—tp:/
/www.asp.net/cn的外部Web请求可能是因为未连接互联网而失败。但是,在此之后对Default.aspx的请求仍将进行,而且能够成功,如图
13.39所示。
1.4.3创建编码的Web性能测试
通常,通过将现有的已记录Web测试转换为编码的Web测试来创建编码的Web测试。记录的Web测试以“Web测试编辑器”中可见的请求树开头,编
码的Web测试是一个生成一系列WebTestRequest的.NET类。将记录的Web测试转换为编码的Web测试之后,可以像编辑任何其他源代码一样编辑
该代码。此外,还可以添加循环和分支结构,动态更改测试中的请求数,以及动态生成测试命中的URL集。
1.转换记录的Web测试
(1)打开一个包含记录的web测试的解决方案,打开web测试文件。
(2)单击“Web测试编辑器”工具栏上的“生成代码”按钮。在弹出的对话框中为生成的编码的Web测试类键入相应名称,然后单击“确定”。
(3)单击“生成”菜单中的“生成解决方案”,编译代码。
2.运行编码的Web测试
(1)在“测试”菜单上,单击“窗口”,再单击“测试视图”。
(2)右击编码的Web测试并选择“运行选定内容”。
在测试运行完成之前,测试结果在“测试结果”窗口中将显示为“正在进行中”。测试运行完成时将显示“已通过”或“未通过”。如果测试
引发异常或验证/提取规则失败,则显示“未通过”。
(3)在“测试结果”窗口中双击编码的Web测试将显示“测试查看器”。
请读者在该解决方案中自己创建一个需要登录和注销的Web性能测试,并在测试查看器中查看测试中的每个请求,然后创建编码的Web测试并运
行该测试。
1.5一般测试
可以使用一般测试调用外部程序和测试,在执行了此操作后,测试引擎将一般测试视为任何其他测试类型。一般测试是VisualStudio旗舰版的
一种简单形式的扩展,它允许运行除预定义测试类型(包括Web测试、负载测试、单元测试、手动测试和顺序测试)以外的其他测试。
1.创建一般测试
(1)新建一个测试项目。
(2)在解决方案资源管理器中右击测试项目,指向“添加”,再单击“一般测试”。一般测试的模板将随即添加到测试项目中,并在主编辑窗口
中打开,如图1.40所示。
(3)在“指定要包装为一般测试的现有程序(测试、测试工具或测试适配器)”下指示要包装为一般测试的测试、程序或第三方工具的路径和文件
名。
(4)在“传递给一般测试的命令行参数”下键人一个或多个要传递的参数,请用空格分隔多个参数。
(5)在“要与一般测试一起部署的其他文件”下指定测试正确运行所必需的所有文件。
(6)在“工作目录”下指定可执行文件运行时作为要工作目录使用的目录。
(7)指定结果文件的名称。
(8)保存一般测试。
2.运行一般测试
(1)打开“测试视图”窗口。
(2)右击该一般测试,选择“运行选定内容”。
总之,软件测试更适宜被视为试图发现程序中错误(假设其存在)的破坏性的过程。一个成功的测试,通过诱发程序发生错误,可以在这个方向上促进软件质量的改进。当然最终人们还是要通过软件测试来建立某种程度的信心:软件做了其应该做的,而没有做其不应该做的。以秘奥服装销售软件为例,软件研发生产的三个最重要的因素是:质量、进度和费用。由于费用和进度的限制,要开发一种高质量、快速交付和低成本的软件产品并不容易。也就是说要同时达到三个目标是困难的。因此在服装销售软件产品的开发中要权衡它们之间的关系,使软件的特性能满足用户的要求,这意味着软件产品的特性的度量和预计是必要的。
文章来源:
秘奥软件网,中小企业信息化领跑者!全国咨询热线:400-9908-527_www.misall.com
最新新闻:
上一篇: 下一篇: