• 0
  • 0
分享

  每个应用程序(桌面、网络或移动)在发布到市场之前都需要进行测试。功能测试被认为是最重要的测试类型,因为首先,应用程序必须做它需要做的事情。

  功能测试验证每个软件功能的操作是否符合需求规范。如果应用程序不能满足其功能需求,它可能无法长期存在。

  在任何应用程序的生命周期中,这种类型的测试都是一个关键且代价高昂的活动。因此,功能测试自动化是提高软件质量和降低测试成本的有效解决方案。

  这项工作将引入功能测试和自动化来测试网络应用程序。我将探索如何设计功能测试用例,并使用一个众所周知的测试工具自动化它们。

  什么是功能测试?

  功能测试是一种测试类型,其中软件根据其功能需求规范进行测试,以发现故障。功能测试允许发现软件与其规范之间的“差异”。此外,它还验证了所有函数的行为都符合它们的需求。简单地说,功能测试确保您的软件按预期工作(它做了它应该做的事情!).

  功能测试使用黑盒技术,其中测试用例完全来源于规范,测试人员不知道内部软件逻辑和细节(图1)。

1-1.jpg

图1-功能黑盒测试

  这种类型的测试是通过:

  1. 向被测系统提供测试输入

  2. 从被测系统获取结果

  3. 验证实际输出与规范中的预期输出相等(= =)

  功能测试包括几种测试类型,如(图2) :

  - Unit

  - Smoke

  - Sanity

  - Integration

  - System

  - Regression tests

  - And more

1-2.jpg

图2-功能测试的类型

  这里我将重点介绍系统测试。

  系统测试是一种功能测试方法,它测试完整和完全集成的应用程序功能(测试整个系统)。

  自动化功能测试

  可以手动或自动执行功能(系统)测试。

  手动测试是指测试人员通过与应用程序直接交互来执行功能测试。自动化测试是指测试人员使用自动化工具(如 Maveryx)来测试软件的功能。它可以通过编程方式实现,在基于脚本的自动化中,或者在无代码自动化中不需要编码(例如,关键字驱动方法)。

  脚本化测试意味着使用 Java、 C # 和 Python 等编程语言编写测试脚本。因此,在这种情况下,良好的编程知识变得必不可少,但它几乎包含了编码的所有好处。

  无代码测试不需要编程知识,因为测试脚本的构造是通过选择测试操作来完成的,例如,从下拉菜单中选择,或者通过拖放测试组件来直观地完成。

  例子

  许多 Web 应用程序的一个基本特性是登录功能。

  在本文中,我将在 

  https://opensource-demo.orangehrmlive.com/测试 orangeHRM 演示软件的登录系统。

  我可以把规范总结如下:

  用户可以使用登录屏幕上显示的用户名和密码凭据从登录页面访问 OrangeHRM 演示系统。(图3)

  当用户输入一个有效的用户名和密码并单击 Login 按钮时,用户登录到应用程序并访问 Dashboard 。(图4)

  当用户输入一个无效的名称和/或密码并单击 Login 按钮时,系统会显示一条错误消息: “无效凭据”。(图5)

  I如果用户名或密码为空,单击“登录”按钮,系统将显示一条错误消息: “用户名不能为空”或“密码不能为空”。(图6)

1-3.jpg

图3-OrangeHRM 演示网站

1-4.png

图4-仪表板网页

1-5.jpg

图5-无效凭据错误

1-6.jpg

图6-空字段上的错误(用户名和密码)

  自动化功能测试脚本

  可以手动(“按原样”)或自动地执行这个测试用例。为了实现自动化,我将使用 Maveryx 和 Java。

  Maveryx 是自动化的功能和回归测试工具。该软件提供功能、回归、用户界面、无代码和资料驱动测试的自动测试功能。它支持一系列应用程序,包括基于 Web 的。Net、 Java 等等。

  Java 不需要大量的介绍。

  下面是实现测试用例 TC _ 001的分步指南。对代码进行了很好的注释,以便理解每一行的作用。

  1. 启动浏览器

  Java

  //launch Chrome browser Bootstrap.startApplication(chrome);//new browser instanceGuiBrowser browser = new GuiBrowser();

  2. 浏览 orangeHRM 演示网站 OrangeHRM 演示网站的 

  https://opensource-demo.orangehrmlive.com/是:

  Java

  //OrangeHRM demo website page URL String pageURL = "https://opensource-demo.orangehrmlive.com/";        //navigate to the OrangeHRM demo websitebrowser.navigateTo(pageURL);        //check the landing page URLassertEquals(pageURL, browser.getCurrentPageUrl());

1-7.jpg

图7-JUnit 断言列表

  我建议使用断言来根据预期的结果验证结果(图7)。断言将预期结果与实际结果进行比较。如果它们匹配,则测试用例通过。如果没有,那么测试用例就会失败。

  输入有效的 Username = “ Admin”-> 用户名字段用值“ Admin”填充。

  Java

  //the usernameString username = "Admin";//the Username text fieldGuiText usrName = new GuiText("Username");//set the usernameusrName.setText(username);//check that the username has been correctly insertedassertEquals(username, usrName.getText());

  与 Selenium 不同,Maveryx 不使用“ Locators”(包括 XPath)来标识测试脚本将与之交互以复制用户操作的元素。

  使用 Maveryx,您可以描述要测试的 UI 元素,因为它们出现在应用程序中。在我的示例中,我使用用户名文本字段占位符“ Username”来标识对象(图8)。

  测试对象在运行时直接标识,而不使用任何预先录制的 UI 映射(或测试对象/图像存储库)。

1-8.png

图8-Username 文本字段

  输入一个有效的 Password = “ admin123”-> Password 字段。

  Java

  //the passwordString pwd = "admin123";//the Passoword text fieldGuiPasswordText password = new GuiPasswordText("Password");//set the password password.setText(pwd);//check that the password has been correctly insertedassertEquals(pwd, password.getText());

  Password 文本字段由其占位符“ Password”标识(图9)。

1-9.png

图9-Password 文本字段

  点击登录按钮-> (用户已登录)仪表板页面在 

  https://opensource-demo.orangehrmlive.com/index.php/Dashboard 加载。

  Java

  //click The Login buttonnew GuiButton("LOGIN").click();//check that the header "Dashboard" is present (fig.10)new GuiHtmlElement("Dashboard", AccessibleRoleMaveryx.WEB_H1).waitForObject(5, 1);//the Dashboard page URLString dashboardURL = "https://opensource-demo.orangehrmlive.com/index.php/dashboard";//check the Dashboard page URLassertEquals(dashboardURL, new GuiBrowser().getCurrentPageUrl());

1-10.jpg

图10-‘ Dashboard’头

  测试脚本现在可以执行了。

  Maveryx 将启动 Chrome 浏览器,并在执行代码时打开 OrangeHRM 登录页面。然后,它将使用相关凭据登录。它还将通过断言检查预期和实际结果。

  类似地,测试用例 # 2(TC _ 002)将生成如下 Maveryx 测试脚本:

  Java

  //invalid username String username = "Admi";//the Username text fieldGuiText usrName = new GuiText("Username");//set the invalid usernameusrName.setText(username);//check that the username has been correctly insertedassertEquals(username, usrName.getText());//the password (valid)String pwd = "admin123";//the Passoword text fieldGuiPasswordText password = new GuiPasswordText("Password");//set the password password.setText(pwd);//check that the password has been correctly insertedassertEquals(pwd, password.getText());//click The Login buttonnew GuiButton("LOGIN").click();//check that the message "Invalid credentials" is present (fig.5)new GuiHtmlElement("Invalid credentials").waitForObject(5, 1);

  同样的方法适用于所有其他测试用例。

  结论

  功能测试可能是软件世界中最重要、已知和实践的测试形式。它也是能够捕获大多数缺陷的测试类型。

  在本文中,我探讨了功能测试的各个方面,重点关注如何根据规范创建功能测试用例,以及如何通过一个实际示例自动化这些测试用例。


作者:qaseven    

来源:http://www.51testing.com/html/52/n-7792452.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   一、Dynatrace简介  随着云技术应用的不断成熟,应用系统架构变得越来复杂,性能检测也愈发困难。单纯的检测交易响应时间、吞吐量和成功率不足以帮助开发人员快速定位到问题所在。所以,我们需要一种能够将业务流程与代码关联起来的测试方案,使每个流程的耗时可视化,使问题的定位更加简洁高效。  所以我们在性能测试工作中引入了Dynatrace。这个工具将人工智能技术引入监测过程,为管理微服务和以云计算为中心的应用的运营复杂性提供了全新的方式。用户安装一个代理,对每一个组件进行插桩、设定基线,并掌握用户环境的正常性能状况,代码级的深入分析能力能够分析层的技术依赖关系、识别环境异常,并找到性能问题的...
            14 14 2548
            分享
          •   6 月 3 日,深圳市南山区低空经济投资推介会暨行业发展论坛在深圳人才公园求贤阁举行。在此次活动中,一架由深圳幽浮飞碟科技有限公司研发的电动垂直载人飞碟吸引了众多市民的目光。这也是全球第一架电动垂直载人飞碟,可以实现在水面起降,具有水陆两栖功能,目前主要用于观光旅游和广告表演。  据悉,这架飞碟的核心研发团队来自北京航空航天大学和西北工业大学,经过三年多的努力,打造出了这一创新产品。飞碟采用六孔涵道 12 个桨叶电机结构,从电源、动力电机、飞行控制等多方面实现三重安全冗余。飞碟的飞行时间可达 15 分钟,飞行高度达 200 米,最大水平飞行速度可达 50 千米每小时,还能从自动驾驶、手动驾...
            0 0 811
            分享
          •   小程序区分用户是通过token,由于token都有一个有效期,数据库中很多token都失效了,必须要登录后获取最新的才有效,只是接口压测没有登录环节,所以想搞个自动化自动登录并获取token到文件中,再从文件中获取token执行接口压测;  1.下载一个 fastjson-1.2.79.jar 包到jmeter安装目录的lib或lib/ext 文件夹中。  https://pan.baidu.com/s/1-uNbQp5HKc6A2ui1eweaoA?pwd=v8v3   提取码:v8v3  2.重启jmeter后,在http请求处添加一个后置处理器 BeanShell PostProce...
            0 0 308
            分享
          • 静态测试静态测试是一种无需执行任何代码即可完成的测试。审查、演练和检查是执行静态测试的不同方法。诸如审查需求文档、客户需求规范、高级和低级设计、代码语法、命名标准等活动都属于静态测试。静态测试也适用于测试用例、测试计划、测试场景。进行静态测试是为了防止缺陷,而不是在后期捕获缺陷。这就是静态测试具有成本效益的原因。例如, Tester 正在测试一个宠物保险网站。保费计算的逻辑在需求文档中进行了描述。作为静态测试的一部分,测试人员可以查看开发人员代码进行溢价计算,并将其与需求文档进行比较,以防止与溢价计算相关的缺陷。漏洞测试该测试涉及识别软件、硬件和网络中的弱点,称为漏洞测试。在恶意程序...
            0 0 1164
            分享
          •   近日,有传言称微软公司欲将其在中国设立的唯一研究机构 —— 微软亚洲研究院(MSRA)撤离中国,转移到加拿大温哥华。但 MSRA 向界面新闻明确表示:此消息不属实。  本月中旬据金融时报报道,四位知情人士透露,总部位于北京的微软亚洲研究院已经开始寻求签证,以便将顶级人工智能专家从北京转移到其在温哥华的研究所。知情人士表示,此举可能会影响 20 至 40 名员工。一位接近微软的人士表示,微软正在加拿大建立一个由来自世界各地的专家组成的新实验室。  根据微软今年 9 月发布的一篇帖子,微软在中国拥有 9000 名员工,其中逾 80% 是软件工程师或从事研发工作。该公司还宣布计划在该国再招聘 1...
            0 0 661
            分享
      • 51testing软件测试圈微信