《AngularJS深度剖析与最佳实践》一2.13 端到端测试

简介:

本节书摘来自华章出版社《AngularJS深度剖析与最佳实践》一书中的第2章,第2.13节,作者 雪狼 破狼 彭洪伟,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.13 端到端测试

端到端测试(e2e test),也称为场景测试,它模拟的是用户真实的操作场景:
用户打开http://xxx地址。
在搜索框中输入了abc。
然后点击其后的搜索按钮。
这时候,他期望看到一个列表,列出所有在标题的任意位置包含了字符串abc的条目,并且每条结果中的abc这三个字母被高亮。
所谓端到端,也就是一端是浏览器,另一端是服务器,这个测试贯通了前后端,具有近似于验收测试的价值。
端到端测试不是什么新技术,它在前后端分离架构盛行之前就已经被广泛采用了,比如Selenium,而且Selenium也同样可应用于Angular中。
Angular的端到端测试工具称为Protractor,事实上,它就是基于Selenium的,在Selenium的基础上,它增加了一些Angular特有的元素选取方式,如根据ng-model选取元素等。
我的建议是,除非你所在的开发组织已经把Angular作为唯一的前端选项,否则请使用Selenium中传统的函数,而不要使用Protractor特有的根据ng-model选取元素等函数,这将让你们的测试独立于前端技术栈而被复用。
在我的工程实践中,只会使用id、class等少数查阅方式,而不会根据ng-model等进行查阅。并且,由于Angular的特点,被测试程序中可以不用任何id,所以,我们可以完全把id留给测试人员使用。如果写测试的人员有权修改源码,那么他/她可以自由的添加、删除id,而不用担心破坏了程序的逻辑和样式。遵循这个约定,可以让开发与测试的协同更加有效。
这里不展开讲解,只把我在种子工程中写的一些代码加上注释供大家自行研究:
1)pages/HomePage.js

// 这是一个页面对象,用来封装页面中的元素和操作,以简化规约代码,并提供一定的变更隔离
module.exports = function() {
    this.title = function() {
        // browser对象封装一组用来访问浏览器属性的函数
        return browser.getTitle();
    };
    // 根据id查找元素
    this.name = element(by.id('name'));
    this.nameEcho = element(by.id('name-echo'));
    this.get = function() {
        // 控制浏览器访问特定地址
        browser.get('http://localhost:5000/#/');
    };
};

2)demoSpec.js

// 取得页面对象
var HomePage = require('./pages/HomePage');

describe('e2e范例,如果修改了首页,请修改本测试 >', function () {
    var homePage;
    // 所有测试语句执行之前,先在浏览器中打开它
    beforeEach(function () {
        homePage = new HomePage();
        homePage.get();
    });

    it('默认的标题是Showcase', function() {
        expect(homePage.title()).toBe('Showcase');
    });
    it('输入用户名后应该回显', function() {
        // 检查初始状态是否符合预期
        expect(homePage.nameEcho.getText()).toBe('Hello,');
        // 模拟用户输入
        homePage.name.sendKeys('test');
        // 检查操作后状态是否符合预期
        expect(homePage.nameEcho.getText()).toBe('Hello,test');
    });
});
相关文章
|
13天前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
39 6
|
15天前
|
存储 监控 测试技术
测试脚本编写和维护的最佳实践有哪些?
测试脚本编写和维护的最佳实践有哪些?
|
5月前
|
机器学习/深度学习 监控 算法
自动化测试框架的演进与最佳实践
随着软件行业的迅猛发展,自动化测试已成为确保软件质量的关键手段。本文将深入探讨自动化测试框架的历史演进、当前趋势以及面临的挑战,并结合实际案例分析,提出一系列的最佳实践策略,旨在帮助读者构建更加高效、稳定的自动化测试体系。
|
26天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
43 2
|
27天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
32 2
|
5月前
|
测试技术 开发者
单元测试问题之测试不够如何解决
单元测试问题之测试不够如何解决
|
6月前
|
JavaScript 前端开发 安全
在众多的测试工具中,Cypress以其强大的端到端测试能力和与TypeScript的完美结合,成为了前端开发者的首选
【6月更文挑战第11天】Cypress结合TypeScript,打造前端测试新体验。TypeScript增强代码可读性和稳定性,Cypress提供强大端到端测试,二者结合提升测试准确性和可靠性。通过类型定义、自定义命令和断言,优化测试代码;Cypress模拟真实用户操作、时间旅行功能及内置调试工具,确保应用功能性能。推荐前端开发者使用TypeScript+Cypress进行端到端测试。
74 2
|
2月前
|
安全 Java 测试技术
最佳实践:通义灵码生成单元测试,让单测更简单
本文首先讲述了什么是单元测试、单元测试的价值、一个好的单元测试所具备的原则,进而引入如何去编写一个好的单元测试,通义灵码是如何快速生成单元测试的。
|
20天前
|
测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
【10月更文挑战第31天】 在当今快速迭代的软件开发环境中,自动化测试成为确保软件质量和加速产品上市的关键。本文探讨了自动化测试的重要性、实施策略以及一些最佳实践。通过分析不同类型的自动化测试工具和框架,本文旨在为软件开发团队提供一套实用的指导方案,以提高测试效率和质量。
|
3月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
49 2