构建现代化的软件测试体系
自动化测试 智能化测试 敏捷测试 持续交付 DevOps
电子商城 Mall 开源项目技术架构
算法系统流程图
百度 Image 搜索系统建模
Applied Software Measurement, Capers Jones(卡珀斯·琼斯), 1996
金字塔模型
反模式-沙漏模型
反模式-倒三角模型
构建全流程测试体系,用于全量回归测试
支持项目的日常测试体系,重点进行新功能的测试。
使用多角色AI Agent进行无人值守的智能探索测试
利用爬虫对系统自动进行探索式测试,提高测试的广度覆盖
Playwright 为现代网络应用程序提供可靠的端到端测试。Playwright 可以跟踪包含测试执行截屏视频、实时 DOM 快照等资源
通过爬虫技术,对网站的所有页面进行智能化的探索,以获取整个系统的业务流程与页面数据。可以实现自动化测试、页面性能分析、新老版本 diff 测试。
利用人工智能智能体实现基于人类语言的自动化。可以实现基于特定意图的自动化,可以实现让手工测试直接转成自动化执行,可大幅降低自动化成本。
随着业务的复杂性提高,我们需要更全面的分析业务流程与测试场景。结合知识图谱可以让我们更加细致的了解业务全貌并提高业务场景的测试覆盖。
精准对比新老版本之间的差异,快速发现业务变更带来的潜在问题
方向 | 方案 | 价值 |
---|---|---|
质量保障 | 质量保障与业务测试 | 保障业务、性能、用户体验 |
业务模型驱动测试 | 业务知识图谱建设 高质量 高覆盖度 | |
丰富测试能力 | 引入前沿测试技术与工具 | |
效能提升 | 自动化测试框架 | 降低自动化成本,提高测试效率 |
AI 测试能力落地 | 利用 AI 增强测试能力 降低成本 | |
持续集成持续交付 | 增强研发、测试协同 |
淘宝
Twitter diffy diff 测试算法
GoRplay 技术架构
Prometheus 是一个开源系统监控和警报工具包 从指标到洞察力使用领先的开源监控解决方案为您的指标和警报提供支持
Grafana 允许您查询、可视化、提醒和了解您的指标,无论它们存储在哪里。与您的团队创建、探索和共享漂亮的仪表板,并培养数据驱动的文化。
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
def test_ceshiren_search():
web = SeleniumFramework()
web.start()
web.open('https://ceshiren.com')
web.click('#search-button')
web.click('.show-advanced-search')
web.click('.search-query')
web.keys('人工智能')
web.click('.search-cta')
r = web.find('.topic-title')
assert '人工智能' in r
class IndexPage:
def __init__(self):
self.web = SeleniumFramework()
def search(self, keyword):
self.web.start()
self.web.open('https://ceshiren.com')
self.web.click('#search-button')
self.web.click('.show-advanced-search')
self.web.click('.search-query')
self.web.keys('人工智能')
self.web.click('.search-cta')
r = self.web.find('.topic-title')
return r
def test_po():
index_page = IndexPage()
r = index_page.search('人工智能')
assert '人工智能' in r
test_search:
- framework: web
- open: https://ceshiren.com
- click: [id, search-button]
- click:
by: css selector
value: .show-advanced-search
- click: { by: css selector, value: .search-query }
- send_keys: 人工智能
- click: .search-cta
- find: .topic-title
- assert: |
"人工智能" in _
*** Settings ***
Documentation Simple example using SeleniumLibrary.
Library SeleniumLibrary
*** Variables ***
${LOGIN URL} http://localhost:7272
${BROWSER} Chrome
*** Test Cases ***
Valid Login
Open Browser To Login Page
Input Username demo
Input Password mode
Submit Credentials
Welcome Page Should Be Open
[Teardown] Close Browser
*** Keywords ***
Open Browser To Login Page
Open Browser ${LOGIN URL} ${BROWSER}
Title Should Be Login Page
Input Username
[Arguments] ${username}
Input Text username_field ${username}
Input Password
[Arguments] ${password}
Input Text password_field ${password}
Submit Credentials
Click Button login_button
Welcome Page Should Be Open
Title Should Be Welcome Page
Scenario: Finding some cheese
Given I am on the Google search page
When I search for "Cheese!"
Then the page title should start with "cheese"
package com.example;
import io.cucumber.java.After;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
public class ExampleSteps {
private final WebDriver driver = new FirefoxDriver();
@Given("I am on the Google search page")
public void I_visit_google() {
driver.get("https://www.google.com");
}
@When("I search for {string}")
public void search_for(String query) {
WebElement element = driver.findElement(By.name("q"));
// Enter something to search for
element.sendKeys(query);
// Now submit the form. WebDriver will find the form for us from the element
element.submit();
}
@Then("the page title should start with {string}")
public void checkTitle(String titleStartsWith) {
// Google's search is rendered dynamically with JavaScript
// Wait for the page to load timeout after ten seconds
new WebDriverWait(driver,10L).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return d.getTitle().toLowerCase().startsWith(titleStartsWith);
}
});
}
@After()
public void closeBrowser() {
driver.quit();
}
}
敏捷是一个术语,描述软件开发方法,强调增量交付、团队协作、持续规划和持续学习。 敏捷术语于 2001 年在敏捷宣言中创造。 宣言旨在制定原则,指导更好的软件开发方法。 宣言的核心是声明四个值语句,这些语句表示敏捷运动的基础。 如书面所述,宣言指出:
宣言并不意味着这些语句右侧的项并不重要或不需要。 相反,左侧的项目更重视。
敏捷开发
是一个术语,用于描述迭代软件开发。 迭代软件开发通过以短增量完成工作(通常称为 冲刺)缩短 DevOps 生命周期。 冲刺通常长达一到四周。 敏捷开发通常与传统或瀑布式开发形成鲜明对比,后者预先计划大型项目,并根据计划完成它们。
每次冲刺交付生产质量代码都需要敏捷开发团队加快速度。 所有的编码、测试和质量验证都必须在每一次冲刺 (sprint) 中完成。 除非团队已正确设置,否则结果可能低于预期。 虽然这些失望提供了很好的学习机会,但开始之前,学习一些关键教训很有帮助。
Scrum 是团队用来管理其工作的框架。 Scrum 将 敏捷 原则作为一组具体的项目、做法和角色来实现
极限编程(ExtremeProgramming,简称 XP)是由 KentBeck 在 1996 年提出的,是一种软件工程方法学,是敏捷软件开发中可能是最富有成效的几种方法学之一。如同其他敏捷方法学,极限编程和传统方法学的本质不同在于它更强调可适应性能性以及面临的困难。1996 年三月,Kent 终于在为 DaimlerChrysler 所做的一个项目中引入了新的软件开发观念——XP。适用于小团队开发。
持续集成是一种 DevOps 软件开发实践。采用持续集成时,开发人员会定期将代码变更合并到一个中央存储库中,之后系统会自动运行构建和测试操作。持续集成通常是指软件发布流程的构建或集成阶段,需要用到自动化组件(例如 CI 或构建服务)和文化组件(例如学习频繁地集成)。持续集成的主要目标是更快发现并解决缺陷,提高软件质量,并减少验证和发布新软件更新所需的时间。
@亚马逊
持续集成
持续交付是一种软件开发实践,通过持续交付,系统可以自动为将代码更改发布到生产环境做好准备。 现代应用程序开发的支柱,持续交付通过在构建阶段后将所有代码变更部署到测试环境和/或生产环境中,实现对持续集成的扩展。在正确实施时,开发人员将始终拥有已通过标准化测试流程的部署就绪构建构件 。
采用持续交付时,开发人员可以自动执行单元测试以外的测试,这样他们就可以在部署到客户环境前跨多个维度对应用程序更新进行验证。这些测试可能包括 UI 测试、负载测试、集成测试、API 可靠性测试等。这有助于开发人员更全面地验证更新并抢先发现其中的问题。
@亚马逊
持续交付
通过持续部署,可自动完成从代码提交到生产的全过程。开发与交付阶段之间的触发器是自动的,因此,在代码更改获得验证并通过所有测试后,就会立即发布。这意味着在改进功能可用后客户便可立即获得这些功能。
@microsoft
Atlassian
阿里云 DevOps 流程
Applied Software Measurement, Capers Jones(卡珀斯·琼斯), 1996
微软
代码审查是指对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。代码审查常以不同的形式进行,例如结对编程、非正式的看过整个代码,或是正式的软件检查。
SonarQube 项目分析案例
典型 bug 案例
测试左移可以让我们更早更快的发现研发阶段引入的 bug,从而可以更好的保障产品质量,降低项目沟通成本,提高研发效率。
百度百科:精准测试是一套计算机测试辅助分析系统。精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。
阿里:通过建立测试用例与业务方法的关联关系,在代码发生变化时,精准的推荐出需要运行的用例,进行测试执行与结果反馈。通过精准的圈定测试范围,可以带来效率和速度的双重收益。
Thoughtworks:利用技术手段对测试过程产生的数据进行采集存储,计算,汇总,可视化最终帮助团队提升软件测试的效率、并对项目整体质量进行改进和优化的这一系列操作。
网易:精准测试是一套计算机测试辅助分析系统。使用用例和代码两个关键因子,进行质量综合考量和分析的创新测试理论方法体系,核心组件包含软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构成了精准测试技术体系。
阿里
阿里
Thoughtworks
基于测试用例与代码的关联数据分析,实现测试覆盖改进的方法