【AltWalker】模型驱动:轻松实现自动化测试用例的生成和组织执行

news2024/11/19 5:34:43

目录

模型驱动的自动化测试

优势

操作步骤

什么是AltWalker?

安装AltWalker

检查是否安装了正确的版本

牛刀小试

创建一个测试项目

运行测试

运行效果

在线模型编辑器

VScode扩展

本地部署

包含登录、选择产品、支付、退出登录的模型编写

模型效果

 1、校验模型

2、验证测试代码是否和模型是否匹配

3、运行测试

4、查看测试报告

一个比较复杂的例子

使用 MBT 图示展示(箭头表示操作)

​编辑

结合已有框架使用

总结

资料获取方法


模型驱动的自动化测试

模型驱动的自动化测试(Model-Based Testing, 后文中我们将简称为MBT)是一种软件测试方法,它将系统的行为表示为一个或多个模型,然后从模型中自动生成和执行测试用例。这种方法的核心思想是将测试过程中的重点从手动编写测试用例转移到创建和维护描述系统行为的模型。

优势

基于MBT的测试相比较于普通的测试有以下几大优点:

优点描述
覆盖率模型是对系统行为的抽象表示,可以帮助测试人员更好地理解和分析系统的功能和性能。从而提高测试覆盖率。
测试效率通过从模型中自动生成测试用例,减少手动编写测试用例的工作量,提高测试效率。
可维护性模型驱动的测试用例易于维护,因为当系统发生变化时,只需更新模型,而无需手动修改大量测试用例。
可重用性模型可以在多个测试项目中重用,减少重复工作并提高测试质量。

操作步骤

基于MBT的测试主要有以下几个步骤:

  • 创建模型:
    首先,需要构建一个描述系统行为的模型。这个模型通常采用图形表示,如状态机、Petri网或者流程图等。模型中的顶点表示系统的状态,边表示状态之间的转换。

  • 生成测试用例:
    通过分析模型,可以自动生成测试用例。测试用例生成算法可以根据不同的目标(如覆盖率、路径长度等)来选择。常用的算法有随机测试、覆盖所有路径、覆盖所有边等。

  • 执行测试:
    使用自动生成的测试用例对实际系统进行测试。这一步通常需要一个测试执行引擎,它可以将模型中的操作映射到实际系统中的操作。例如,使用Selenium WebDriver进行Web应用测试。

  • 验证结果:
    比较实际系统的行为与模型的预期行为,以确定系统是否满足需求。如果发现问题,可以更新模型并重新生成测试用例。

下面我们一起来看看在实际业务中使用AltWalker库进行进行基于模型的自动化测试的应用。

什么是AltWalker?

AltWalker是一个基于图模型的自动化测试框架,用于编写、执行和管理基于模型的测试。它主要用于测试复杂系统,如Web应用程序、移动应用程序等。它支持运行用 .NET/C# 和 Python3 编写测试模型用例。

安装AltWalker

在命令行中输入以下命令来安装AltWalker:

pip install altwalker
检查是否安装了正确的版本
$ altwalker --version
AltWalker, version 0.3.1

牛刀小试

创建一个测试项目

创建一个新的文件夹,用于存放我们的测试项目。在该文件夹中,执行以下命令创建MBT

altwalker init -l python test-project

执行这个命令后,将在当前目录生成一个包含模型模板代码的目录test-project,目录结构如下:

# tree
test-project/
├── models/
│   ├── default.json
└── tests/
    ├── __init__.py
    └── test.py
运行测试

只需要执行以下命令,就能够运行default.json中定义的模型,覆盖模型的链路,链路执行时会运行对应在test.py中的代码

$ cd test-project
$ altwalker online tests -m models/default.json "random(edge_coverage(100))"
运行效果

 自己编写图模型

上面只是执行了一个单一的链路Demo,下面我们一起写一个我们自己的模型。

模型编辑器我们可以选择在线的,也可以选择使用 vscode的插件,当然也可以选择自己搭建一个。

在线模型编辑器

我们可以使用在线的模型编辑器来编写模型。

VScode扩展

可以在扩展上搜索AltWalker Model Visualizer
,也可以自己访问链接下载扩展来编辑查看模型。

本地部署

可以参考:https://github.com/altwalker/model-editor

包含登录、选择产品、支付、退出登录的模型编写

点击查看对应模型

模型效果

 1、校验模型

保存这个模型到新创建的项目default.json,然后执行下面的命令检查模型是否存在问题:

altwalker check -m models/default.json "random(never)" 
2、验证测试代码是否和模型是否匹配
altwalker check -m models/default.json "random(never)" 

因为我们还没有编写测试代码,所以会出现下面的报错:

可以看到在上面的报错中给出了建议的代码,我们把它复制到 test.py中。

class PayModel:

    def state_pay(self):
        pass

    def action_init(self):
        pass

    def state_select_product(self):
        pass

    def state_logout(self):
        pass
        ...

3、运行测试

在命令行中执行下面的命令来执行测试:

altwalker online tests -m models/default.json "random(edge_coverage(100))" --report-xml-file report.xml

这将会运行在default.jsontest.py文件中定义的所有测试用例。

4、查看测试报告

在测试执行完成后,AltWalker会生成一个名为report.xml的JUnit格式的测试报告。我们可以使用任何支持JUnit格式的测试报告工具来查看这个报告。

还有其他方式的测试报告提供,可以查看官方文档。

一个比较复杂的例子

如果我们有一个商城需要验证,有登录、用户个人中心,商品首页,商品详情页、支付界面、订单界面等,我们要针对这样的网站做一个自动化,可能会有以下这些场景:

场景
登录界面 -> Do:输入密码登录 -> 用户首页 -> Do:查看商品A -> A商品详情页 -> Do:点击第二个商品按钮 -> 商品C详情页面 -> Do:点击付款 -> 付款界面 -> Do:取消付款 -> 订单倒计时界面 -> Do:关闭浏览器 -> 浏览器关闭
登录界面 -> Do:输入密码登录 -> 用户首页 -> Do:查看商品A -> A商品详情页 -> Do:点击第二个商品按钮 -> 商品C详情页面 -> Do:点击付款 -> 付款界面 -> Do:查看订单 -> 历史订单界面 -> Do:关闭浏览器 -> 浏览器关闭
登录界面 -> Do:输入密码登录 -> 用户首页 -> Do:查看商品A -> A商品详情页 -> Do:点击第二个商品按钮 -> 商品C详情页面 -> Do:点击付款 -> 付款界面 -> Do:查看订单 -> 历史订单界面 -> Do:查看订单详情 -> 订单详情界面 -> Do:关闭浏览器 -> 浏览器关闭
登录界面 -> Do:输入密码登录 -> 用户首页 -> Do:查看商品A -> A商品详情页 -> Do:点击第二个商品按钮 -> 商品C详情页面 -> Do:点击用户中心 -> 用户中心界面 -> Do:查看订单 -> 历史订单界面 -> Do:关闭浏览器 -> 浏览器关闭
登录界面 -> Do:输入密码登录 -> 用户首页 -> Do:查看商品A -> A商品详情页 -> Do:点击第二个商品按钮 -> 商品C详情页面 -> Do:点击用户中心 -> 用户中心界面 -> Do:查看订单 -> 历史订单界面 -> Do:查看订单详情 -> 订单详情界面 -> Do:关闭浏览器 -> 浏览器关闭
登录界面 -> Do:输入密码登录 -> 用户首页 -> Do:查看商品A -> A商品详情页 -> Do:点击相似商品B -> 商品B详情页 -> Do:点击购买 -> 付款界面 -> Do:取消付款 -> 订单倒计时界面 -> Do:关闭浏览器 -> 浏览器关闭
登录界面 -> Do:输入密码登录 -> 用户首页 -> Do:查看商品A -> A商品详情页 -> Do:点击相似商品B -> 商品B详情页 -> Do:点击购买 -> 付款界面 -> Do:查看订单 -> 历史订单界面 -> Do:关闭浏览器 -> 浏览器关闭
登录界面 -> Do:输入密码登录 -> 用户首页 -> Do:查看商品A -> A商品详情页 -> Do:点击相似商品B -> 商品B详情页 -> Do:点击购买 -> 付款界面 -> Do:查看订单 -> 历史订单界面 -> Do:查看订单详情 -> 订单详情界面 -> Do:关闭浏览器 -> 浏览器关闭
...
使用 MBT 图示展示(箭头表示操作)

 大家应该都能发现,使用altwalker画出来的图,能非常直观的展示各个页面之间可以进行的操作,并且很好扩展,这非常符合我们做页面自动化的时候所说的POM(Page Object Model)。

这也是altwalker最重要的价值所在:适合的用于测试复杂系统,如Web应用程序、移动应用程序等。

点击查看对应模型

完整的结合 POM使用的方法可以查看官方给出的示例:https://github.com/altwalker/altwalker-examples

结合已有框架使用

如果我们仅仅只想使用模型中的链路组织能力,也可以自己根据编写的模型使用下面这段代码来生成对应的链路,然后组织用例场景,可以用于自动化用例生成。

graph_data = {
    "name": "Default Models",
    "models": [
        {
            "name": "DefaultModel",
            "generator": "random(never)",
            "startElementId": "v0",
            "vertices": [
                {
                    "id": "v0",
                    "name": "登录界面"
        ...
    ]
}
model = graph_data['models'][0]
edges = model['edges']
vertices = model['vertices']
start_vertex_id = model['startElementId']

# 构建图
graph = {}
for edge in edges:
    source = edge['sourceVertexId']
    target = edge['targetVertexId']
    if source not in graph:
        graph[source] = []
    graph[source].append((target, edge['name']))

# 顶点ID到顶点名称的映射
vertex_name_map = {vertex['id']: vertex['name'] for vertex in vertices}


# 深度优先搜索
def dfs(_graph, start_vertex, _path, _visited):
    _visited.add(start_vertex)
    _path.append(vertex_name_map[start_vertex])
    if start_vertex not in _graph:
        print(" -> ".join(_path))
    else:
        for neighbor, action in _graph[start_vertex]:
            if neighbor not in _visited:
                _path.append(f"Do:{action}")
                dfs(_graph, neighbor, _path, _visited)
                _path.pop()
    _path.pop()
    _visited.remove(start_vertex)


# 打印所有可能的链路及其经过的操作,操作前面加上"Do"标记
visited = set()
path = []
dfs(graph, start_vertex_id, path, visited)

总结

通过以上步骤,我们了解了如何使用AltWalker进行模型驱动的自动化测试。AltWalker是一个强大的测试框架,可以帮助我们更高效地编写、执行和管理测试用例。

当然,基于模型的测试也有一些局限性,如模型的准确性和完整性对测试结果影响较大,模型构建和维护可能需要额外的成本等。因此,在实际应用中,需要根据项目的具体需求来决定是否采用基于模型的测试方法。希望本文对你有所帮助!


资料获取方法

【留言777】

各位想获取源码等教程资料的朋友请点赞 + 评论 + 收藏,三连!

三连之后我会在评论区挨个私信发给你们~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/826280.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Agile manifesto principle (敏捷宣言的原则)

Agile在管理中越来越受推崇,最初是由于传统的软件开发管理方式(瀑布模型)面对日益复杂的需求,无法Delivery令人满意的结果,经过总结探索,2001年,由行业代表在一次聚会中提出Agile敏捷mainfesto&…

C++共享数据的保护

虽然数据隐藏保护了数据的安全性,但各种形式的数据共享却又不同程度地破坏了数据的安全。因此,对于既需要共享有需要防止改变的数据应该声明为常量。因为常量在程序运行期间不可改变,所以可以有效保护数据。 1.常对象 常对象:它…

数模国赛、华为杯竞赛火爆来袭~想大展身手?快来看看~

友友们好~ 华为杯竞赛和数学建模国赛即将拉开帷幕,也许你对这激烈的竞争感到有些焦虑,但是请别担心!~知名团队将为你提供全方位的帮助,让你在比赛中游刃有余,一飞冲天! 这个团队在这方面经验丰…

【雕爷学编程】Arduino动手做(180)---Seeeduino Lotus开发板2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

互联网宠物医院系统开发:数字化时代下宠物医疗的革新之路

随着人们对宠物关爱意识的提高,宠物医疗服务的需求也日益增加。传统的宠物医院存在排队等待、预约难、信息不透明等问题,给宠物主人带来了诸多不便。而互联网宠物医院系统的开发,则可以带来许多便利和好处。下面将介绍互联网宠物医院系统开发…

【Vue】兄弟组件值与方法传递使用

Vue 兄弟组件通信 这里使用的是Bus&#xff0c;$bus 思路是在全局挂载一个实例&#xff0c;通过这个实例里的事件派发和事件监听实现跨组件通信&#xff0c;设计模式叫做观察者模式。 例子 A、B组件通信 页面代码 <template><div><!--组件A--><a-compoe…

关于录音怎么转换成文字的小窍门大公开

你是否曾经因为需要记录会议内容、讲座内容或者采访内容而苦恼&#xff0c;手写记录又效率低下&#xff0c;打字又太过麻烦&#xff1f;那么&#xff0c;录音转文字技术或许是你的救星&#xff01;现在&#xff0c;随着技术的不断进步&#xff0c;我们可以通过手机或电脑等设备…

【机密计算-大厂有话说】NVIDIA Hopper H100 上的机密计算

1. 英伟达机密计算路线图(硬件) 在过去的四代中,NVIDIA 一直在不断提高安全性和设备的完整性。最早有文献记载的工作之一是在 NVIDIA V100 GPU 中,为设备上运行的固件提供了 AES 身份验证。身份验证可以保证用户可以信任启动固件没有被破坏,也没有被篡改。随着时…

13年测试经验,性能测试-高并发处理详细,一篇彻底通透...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 涉及抢购、秒杀、…

Python高阶技巧 递归

递归的定义 函数作为一种代码封装&#xff0c;可以被其他程序调用&#xff0c;当然&#xff0c;也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。 递归的思想 把规模大的问题转化为规模小的、具有与原来问题相同解法的问题来解决。在函数实现时&#…

汽车电子抛负载测试保护选用小封装TVS管 MIN218

汽车24V系统过抛负载测试解决保护方案及电路防护器件选型&#xff0c;东沃电子之前就分享过很多次了。24V电源抛负载瞬态浪涌过压保护经典方案&#xff0c;如下图所示&#xff1a; 从图中可知&#xff0c;24V系统过抛负载测试需要选用TVS管&#xff08;SM8S36CA和6.6SMDJ36CA&a…

【ASP.NET MVC】第一个登录页面(8)

一、准备工作 先从网上&#xff08;站长之家、模板之家&#xff0c;甚至TB&#xff09;下载一个HTML模板&#xff0c;要求一整套的CSS和必要的JS&#xff0c;比如下图&#xff1a; 登录页面的效果是&#xff1a; 首页&#xff1a; 利用这些模板可以减少前台网页的设计——拿来…

【element-ui】form表单初始化页面如何取消自动校验rules

问题描述&#xff1a;elementUI表单提交页面&#xff0c;初始化页面是获取接口数据&#xff0c;给form赋值&#xff0c;但是有时候这些会是空值情况&#xff0c;如果是空值&#xff0c;再给form表单赋值的话&#xff0c;页面初始化时候进行rules校验会不通过&#xff0c;此时前…

【数据结构与算法——TypeScript】数组、栈、队列、链表

【数据结构与算法——TypeScript】 算法(Algorithm)的认识 解决问题的过程中&#xff0c;不仅仅 数据的存储方式会影响效率&#xff0c;算法的优劣也会影响效率 什么是算法&#xff1f; 定义&#xff1a; &#x1f7e2; 一个有限指令集&#xff0c;每条指令的描述不依赖于言语…

一边是计算机就业哀鸿遍野,一边是高考生疯狂涌向计算机专业

在张雪峰推荐的几大专业里&#xff0c;计算机专业是其中之一。近几年&#xff0c;计算机专业报考热度不减&#xff0c;但就业前景却令人堪忧&#xff0c;互联网裁员接二连三&#xff0c;许多码农找不到工作。 一位网友感叹&#xff1a;一边是计算机就业哀鸿遍野&#xff0c;一…

linux系统共享文件夹的创建和使用(VMware )

虚拟机设置共享文件夹 点击设置 点击选项 选择共享文件夹 随便添加一个电脑上的文件夹 虚拟机内打开共享文件夹 打开根目录 打开mnt文件夹 继续点击 最终得到共享文件夹

8Gbps及以上高速信号PCB布线建议

8Gbps及以上高速信号PCB布线建议 —来源&#xff1a;瑞芯微RK3588 PCB设计白皮书 如表1-1所示&#xff0c;RK3588芯片以下接口的信号能工作在8Gbps及以上速率&#xff0c;由于速率很高&#xff0c;PCB布线设计要求会更严格&#xff0c;在“PCBlayout 通用布线规范”的基础上&…

ELK 企业级日志分析系统(ElasticSearch、Logstash 和 Kiabana 详解)

目录 一.ELK简介 1.1ELK的概述 1.2ELK的组成 1.2.1 ElasticSearch 1.2.2 Logstash 1.2.3 Kibana 1.2.4 小总结 1.3可以添加其他组件 1.4filebeat 结合 logstash 带来好处 1.5日志处理的步骤 二.Elasticsearch 2.1Elasticsearch概述 2.2Elasticsearch核心概念 2.2.1接近…

利用尺度因子方法恢复GRACE水储量变化

1.背景 重力恢复与气候实验&#xff08;GRACE&#xff09;观测地球重力势的时间变化。在考虑了大气和海洋效应后&#xff0c;每月到年际尺度上剩余的信号主要与陆地水储存&#xff08;TWS&#xff09;的变化有关。水储存变化的估计受到测量误差和噪声的信号退化影响&#xff0…

windows美化任务栏,不使用软件

1.任务栏透明: 效果图: (1).winr打开命令行 输入regedit回车打开注册表 regedit (2).在注册表中打开 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced 这个路径 \HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explore…