当前位置: 首页 > 科技观察

自动化功能测试分步指南

时间:2023-03-18 14:36:59 科技观察

译者|陈军审稿人|孙书娟众所周知,无论是桌面应用、Web应用,还是移动应用,在发布到市场之前都需要经过严格的测试。由于功能测试可以验证应用程序的各种操作和功能是否满足既定的要求和规范,因此通常被认为是整个测试生命周期中最关键和成本最高的活动。在这方面,自动化功能测试可以在提高软件质量的同时降低有效成本。接下来,我将和大家一起探讨如何设计基于Web应用的功能测试用例,并使用典型的测试工具来实现自动化。功能测试的流程和分类在功能测试中,测试人员会根据所有的功能需求规范来验证被测软件是否满足要求,是否能按预期工作,并及时发现与规范的“差异”。简单来说,这是一种黑盒技术。测试人员不知道软件的内部逻辑和细节(如图1所示),只需要让测试用例符合规范即可。一般而言,功能测试的过程包括:1.向被测系统提供测试输入2.从被测系统获取结果输出3.验证实际输出是否符合规范的预期输出图1-功能黑盒测试从测试类型来看,功能测试包括以下类型(如图2所示):单元欺诈完整性测试(Sanity)集成系统回归测试等等图2-功能测试类型这里我主要关注测试应用程序的功能性集成系统测试。自动化功能测试从测试开始我们就知道有两种不同的执行方式,手动和自动。其中,手动测试是指测试人员需要直接与应用进行交互;自动化测试是指测试人员使用Maveryx等自动化工具,通过编程或基于脚本的方式,以无代码自动化的方式自动实现。(例如,关键字驱动的方法)环境。注意,这里的基于脚本的测试是指用Java、C#、Python等编程语言编写测试脚本。当然,这对测试人员的编程水平要求更高。无代码测试基于以下方法:从下拉菜单中选择,或通过拖放测试组件。因此,它对测试人员的编程水平要求不高。一个测试用例很多web应用都离不开用户登录这个基本功能。接下来,我将在https://opensource-demo.orangehrmlive.com/上制定如下功能规范:用户可以根据提示使用用户名和密码凭据(如图3所示)登录并访问OrangeHRM演示系统在登录页面上。图3-OrangeHRM演示网站当用户输入有效的用户名和密码,并点击登录按钮时,用户可以看到应用仪表板界面(图4)。图4-仪表板网页当用户输入无效的名称和/或密码并单击登录按钮时,将显示一条错误消息:“无效凭据”(图5)。图5-InvalidCredentialsError如果用户名或密码为空,点击登录按钮,系统会显示错误信息:“用户名不能为空”或“密码不能为空”(图6)。图6-用户名和密码为空错误根据以上规范,我们需要针对以下几个方面设计一个功能测试用例:测试用例名称测试用例描述预期输出TC_001输入有效用户名和有效密码,点击登录按钮。用户登录应用程序并访问位于https://opensource-demo.orangehrmlive.com/index.php/dashboard的仪表板页面TC_002输入无效的用户名和有效密码并单击登录按钮。错误:“无效的凭据。”用户仍在登录页面https://opensource-demo.orangehrmlive.com/index.php/auth/validateCredentialsTC_003输入有效用户名和无效密码,然后单击登录按钮。错误:“无效的凭据。”用户仍在登录页面https://opensource-demo.orangehrmlive.com/index.php/auth/validateCredentialsTC_004输入无效的用户名和密码并单击登录按钮。错误:“无效的凭据。”用户停留在登录页面https://opensource-demo.orangehrmlive.com/index.php/auth/validateCredentialsTC_005,在单击登录按钮之前留有空白用户名和空白密码。错误:“用户名不能为空。”用户仍在登录页面https://opensource-demo.orangehrmlive.com/TC_006用户名留空并输入有效密码,然后单击登录按钮。错误:“用户名不能为空。“用户仍在登录页面https://opensource-demo.orangehrmlive.com/TC_007输入有效的用户名并留空密码并单击登录按钮。错误:“密码不能为空。“用户仍然在登录页面https://opensource-demo.orangehrmlive.com/让我们按照以下步骤来测试第一个测试用例(TC_001):测试步骤(/input)预期输出启动浏览器导航到OrangeHRM演示站点:https://opensource-demo.orangehrmlive.com/OrangeHRM演示站点将通过URL打开-https://opensource-demo.orangehrmlive.com/输入有效的用户名?“Admin”用户名字段已填写如“Admin”输入有效密码?“admin123”密码字段已填写单击登录按钮仪表板页面通过https://opensource-demo.orangehrmlive.com/index.php/dashboard显示自动化功能测试脚本,我将使用Maveryx和Java来自动化其功能测试,其中Maveryx是一个自动化的功能和回归测试工具,它提供了功能、回归、用户界面、无代码、数据驱动测试等自动化测试功能,它可以支持基于Web、.Net、Java等的一系列应用。接下来,我将以代码的形式逐步展示编写TC_001测试用例的脚本:1.启动浏览器。Java//启动Chrome浏览器Bootstrap.startApplication(chrome);//新建浏览器实例GuiBrowserbrowser=newGuiBrowser();2.通过URL--https://opensource-demo.orangehrmlive.com/演示站点导航到OrangeHRM。Java//OrangeHRMdemo网站页面URLStringpageURL="https://opensource-demo.orangehrmlive.com/";//导航到OrangeHRM演示Websitebrowser.navigateTo(pageURL);//检查登陆页面URLassertEquals(pageURL,browser.getCurrentPageUrl());在这里,我建议您使用断言来验证预期结果(图7)。如果实际结果与断言的预期结果相匹配,则测试用例通过,否则失败。图7-JUnit断言列表3.在用户名字段中输入合法值“Admin”。java//用户名Stringusername="Admin";//用户名文本字段GuiTextusrName=newGuiText("Username");//设置用户名usrName.setText(username);//检查用户名是否正确插入assertEquals(username,usrName.getText());与Selenium不同,Maveryx不使用包括XPath在内的“定位器”来识别它从与测试脚本的交互中复制的用户操作元素。用户可以直接使用Maveryx来描述要测试的UI元素,就像它们出现在应用程序中一样。在此示例中,我使用“用户名”作为用户名文本字段的占位符来标识对象(图8)。测试对象通常可以在运行时直接识别,无需使用任何预先记录的UI映射或测试对象和图像存储库。图8-用户名文本字段4.输入有效的Password="admin123"以填充密码字段。java//密码Stringpwd="admin123";//密码文本字段GuiPasswordTextpassword=newGuiPasswordText("Password");//设置密码password.setText(pwd);//检查密码是否输入正确assertEquals(pwd,password.getText());密码的文本字段由其占位符“密码”标识(图9)。图9-密码文本字段5.单击登录按钮,应用程序将加载仪表板页面https://opensource-demo.orangehrmlive.com/index.php/dashboard,如图10所示。Java//单击登录buttonnewGuiButton("登录").click();//检查标题“Dashboard”是否存在(图10)newGuiHtmlElement("Dashboard",AccessibleRoleMaveryx.WEB_H1).waitForObject(5,1);//Dashboard页面URLStringdashboardURL="https://opensource-demo.orangehrmlive.com/index.php/dashboard";//查看Dashboard页面URLassertEquals(dashboardURL,newGuiBrowser().getCurrentPageUrl());图10-“Dashboard”标题根据以上逻辑,我们可以开始执行测试脚本了。Maveryx将启动Chrome浏览器,并在执行代码时打开OrangeHRM登录页面。然后它将使用相关凭据登录并通过断言检查比较预期结果和实际结果。同样,测试用例2(TC_002)将生成以下Maveryx测试脚本:Java//invalidusernameStringusername="Admi";//用户名文本字段GuiTextusrName=newGuiText("Username");//设置无效的用户名usrName.setText(username);//检查用户名是否正确插入assertEquals(username,usrName.getText());//密码(有效)Stringpwd="admin123";//密码文本字段GuiPasswordTextpassword=newGuiPasswordText("Password");//设置密码password.setText(pwd);//检查密码是否正确插入assertEquals(pwd,password.getText());//点击登录按钮newGuiButton("LOGIN").click();//检查消息“无效凭据”是否存在(图5)newGuiHtmlElement("Invalidcredentials").waitForObject(5,1);根据这个思路和方法,我们也可以编写针对不同场景的Createtestcases。结束语如上所示,功能测试是最容易发现软件缺陷的测试类型,也是最考验我们编写测试用例的能力和逻辑的环节。我们希望上面讨论的功能测试用例可以帮助您创建满足现有规范实际需求的自动化功能测试用例。译者简介JulianChen,社区编辑,拥有十余年IT项目实施经验,善于把控内外部资源和风险,专注传播网络与信息安全方面的知识和经验;通过其他形式分享前沿技术和新知识;经常在线上和线下开展信息安全培训和讲座。原标题:自动化功能测试:循序渐进指南,作者:GabrielePiantadosi