自动化测试的数据框架

一篇文章快速教你如何搭建数据驱动自动化测试框架? 说到数据驱动自动化测试,你会不会有这样的疑问:数据怎么管理?数据怎么才能驱动测试用例执行?到底怎么样才算数据驱动?那么本篇文章就教你如何进行数据驱动测试,相信你一定能对数据驱动的自动化测试有一个不一样的理解,希望这篇文章能帮助还在懵懵懂懂的你了解数据驱动测试,如何来做数据驱动测试?那么就跟上我的脚步吧^_^ 地址:https://www.126.com/1.实现126邮箱登录功能的验证2.实现126邮箱添加新联系人功能的验证 1.新建config目录存放和业务无关的数据文件,比如PageElementLoc 阅读详情

文章转自:http://blog.youkuaiyun.com/samsunge808/archive/2009/08/01/4397625.aspx

 

自动化测试的数据框架 收藏
测试 自动化的架构定义了如何存储、引用、分组、共享以及重用测试脚本和测试数据。

  脚本的执行通常都由工具所支持,通常被称作测试自动化框架。框架是一个基础的结构,我们相互独立的测试自动化工具中的脚本和数据整合到这个框架中。

  由脚本的开发者来决定如何组织测试数据,以及脚本如何读取这些测试数据。另一方面,测试数据的操作和维护的易用性也是框架可行性的关键方面。

   全局和局部测试数据

  相关联的测试脚本通常放到一组,称为测试集( test sets),用于覆盖被测试应用程序的特定功能区。

  测试集定义了一系列的脚本,这些脚本由测试自动化框架按一定的顺序以批处理的方式执行。

  常见的测试集包括冒烟测试集(smoke test set)和回归测试集(regression test set)等。

  一个脚本可以从属于多个测试集,并且用不同的测试数据来运行。

  自动化框架从脚本库中选取脚本(以及相关的数据文件)在各分布式的主机上以测试集所定义的顺序运。

  测试数据可以按范围来进行分类。

  全局(Global)测试集数据对于测试集中的所有脚本都是可见的、可共享的,而局部(local)数据只对其所创建的脚本是可见的。

  全局测试数据通常是那些可配置的参数,例如服务器名、启动页面的URL地址等,它们是所有脚本的基础数据。图1展示了这些测试集的数据组织情况。

 

图1

  设计规则

  在行业最佳实践的基础上,我定出了6个普遍适用的设计规则,实践证明对于在框架中组织测试数据是非常有效的。这些规则应该被视为开发内部测试自动化框架的功能需求,或者用于评估商业框架之用。

  下面列出这些规则以及给测试自动化框架用户带来的好处:

  规则1:测试数据必须与测试脚本分离

  这是代码设计的最基本原则,对于测试脚本设计一样适用。但是我曾经无数次看到这个规则被违反。由此带来的后果是代码需要被重写,导致进度延误。一旦程序通过调试并发布后,就应该避免代码的修改,除非万不得已。任何代码的修改都容易引入错误。

  如果数据写死在代码中,则可能导致你修改了一个地方,但是忘记修改其他 地方。

  另外一个原因是代码的国际化问题;所有代码中的可读的字符串都应该用变量表示,并且存储在单独的资源文件中。这样一旦需要改变区域设置,你只需要修改配置引用新的区域设置对应的目录的文件,不需要做任何的代码修改。

  这个规则对于测试自动化的主要好处是:对于测试一个产品的不同功能,相同的代码可以被重用而不需要修改,仅需要修改对应的测试数据即可。把脚本和数据分离还可以显著地减少需要维护的脚本的代码行。

  规则2:测试数据应该以表格的形式出现

  以表格形式展现数据有利于数据驱动测试的设计。数据驱动测试(data-driven test)是一种自动化测试 技术 ,它允许一个自动化脚本可以通过循环读取数据表格的每一行的数据来驱动测试,从而实现多个测试用例。

  规则3:数据表格应该以外部文件的形式提供,并且应该容易访问和修改。

  我把测试脚本的用户分成两大类:测试自动化工程师(test automation engineer)和领域专家(subject matter expert)。

  后者通常不具备编程技巧,但是他们在被测试程序所涉及到业务领域具有很深的理解。他们知道用哪些数据来验证应用程序的功能细节。如果一个脚本被恰当地设计,则领域专家应该可以很容易地执行,而不需要看懂脚本代码。他们只需要修改测试数据。如果在数十个子文件夹中寻找数据文件很困难的话,则证明测试自动化框架是效率低下的、不可用的。

  规则4:对于测试集的所有脚本普遍适应的全局数据应该与局部数据分离开来。

  如果在一个大的测试集的脚本数据文件既包含全局数据又包含局部数据,则需要更多的时间来修改所有数据文件中的相同数据。

  这个过程是低效率的,并且容易出错。如果我们有一个统一的库来存储全局数据,则只需要每个测试集做一次修改,然后就能自动同步到所有脚本中。

  每个人只要通过修改全局的设置,然后就可以在他的环境中执行测试集,而对于那些仍然有效的局部数据,则可以直接重用而不需要修改。

  规则5:局部测试数据应该与测试脚本以及包含测试脚本的测试集唯一地关联起来。

  与测试集的关联,对于在多个测试集运行相同的脚本,但是以不同的数据运行来说是必要的。

  就像图1一样,我把测试数据分为两套,一套是为测试脚本运行的,另外一套是为测试集运行的。

  规则6:为每个测试集准备的局部数据应该分离开来,但是共存于同一数据文件中。

  在运行脚本时,测试自动化框架从脚本库中读取脚本开发者提供的数据文件。

  为了后续测试集的数据修改,你需要重写原来的数据文件。这将导致数据冲突。一个可行的解决办法是:一个脚本和多个数据文件对应到每个测试集。这样的方法对数据文件的维护和动态映射正确的数据文件到脚本来说会产生一定的工作 量。但是如果对于每个测试集,我们仅有一个数据文件,局部数据共存于文件中,则会简化数据列表以及搜索的难度。而且数据共存也能避免数据冲突和重写。

  下面是一个例子,是一个测试数据组织的灵活、有效的架构,其遵循了上述的设计规则。这个解决方案是针对Window平台的,但是对于其他平台同样适用,那些数据设计规则是平台无关的。

  数据组织

  在这个应用的例子中,每个脚本只与一个数据文件关联。遵循规则2,它使用一个Excel表单来存储测试 数据。根据规则3,这些数据文件应该很容易被领域专家访问到。这提出了另外一个很基本的问题:如何有效地将脚本和数据文件分组存储。

  当一个工程师开始一个测试自动化项目,面对的第一个工作 任务就是如何组织测试脚本和数据。

  为了完成这个任务,我提出一个实践:创建应用程序的功能分解模型,把所有功能都分解到有层次关系的功能区域和子区域。然后把这个结构映射到一个目录树,在目录树中存储测试用例和脚本,这些用例和脚本对应到功能区域的目录。领域专家不需要查看那些脚本,但是他们需要知道那些脚本是做什么的,它们对应的数据存储在什么地方。

  通过在Excel中使用“分组和大纲”(Group and Outline)功能创建脚本和数据目录,如图2所示。针对每一个脚本记录,都能链接到相对应的数据文件,可以直接在表单中打开、修改和保存。

 

  图2

  每个数据文件都有多个工作表单,其中一个是默认的工作表单(如图3所示)。这个工作表单包含由脚本开发者提供的原始测试数据。  

 

图3

  所有工作表单都有相同的结构:第一行包含标题头(参数名),而所有其他 行包含测试数据的值。拥有多行数据则表示这是个数据驱动的测试。如果要修改原始的局部测试数据,你应该创建一个以该测试集命名的工作表单,并在该表单中输入测试数据(如图4)。这样,不同测试集的局部数据可以与测试集的名字关联起来(规则5),并且可以共存于一个数据文件中(规则6)。

 

图4

  我们使用以下简单的算法来访问局部测试数据。

  每个脚本根据测试集名称从工作表单中读取关联的属于脚本的数据。

  如果没有这样的工作表单,则自动读取“Default”表单中的默认数据。

  如果领域专家希望修改原始的测试数据,他们只需要根据测试集名称在Excel数据文件中创建一个工作表单。

  全局数据的实现

  让我们来看一种典型的情况。你组合了一个包含100个脚本的测试集合,这些脚本都是由其他人开发的。

  你继承了这些脚本的测试数据文件。每个测试集中的脚本都使用Server_Name来作为输入参数。

  但是问题是你的测试环境中的服务器名与原始的数据文件中定义的不一致。

  那么你如何避免因为修改100个数据文件中的服务器名而引入的错误呢?解决办法是使用全局数据(规则4)。

  对于在什么地方存储全局数据,有3种选择:Windows 注册表、环境变量、文件。其中一种方便的方式是通过环境变量,因为可以在Windos控制面板中通过系统工具方便地查看和编辑这些环境变量。每个测试集通过一个设置脚本(Setup scrīpt)来为所有全局数据创建环境变量。全局变量值是在名为Setup的Excel数据文件中的。

  测试集的名称是其中一种全局变量,它的值可以被每个脚本用于判断哪个工作表单包含脚本的局部数据(见图4所示的例子)。在某些测试自动化框架,例如HP的 Quality Center,脚本可以使用框架API来获取其所属的测试集的名称。这是个适用于所有框架的简单的解决方案。这个算法可以很容易地扩展成更为复杂的情况。

  不像其他脚本数据,Setup数据文件只有一个工作表单,列名以全局变量命名。其中两列是必须的,包括“Order”和“Test_Set”。

    Order列用于描述测试集由测试自动化框架组织执行的顺序。

   Test_Set列包含测试集的名称。工作表单中的每一行都代表一个测试集的全局变量值(见图5)。

 

   图5

  为了运行一系列的测试集,我们还需要定义一个环境变量TS_CURRENT,并且手工为其赋一个初始的值为1。

  在图5所示的测试集Smoke中,Setup脚本读取TS_CURRENT,并且创建环境变量,它们的值从Order数等于TS_CURRENT的数据行中读取。

  现在,测试集中的所有脚本在Setup访问了全局数据后都得以执行。由于Test_Set变量定义后,每个脚本也就知道了从哪个工作表单读取它们的局部数据。

  我们以一个Reset脚本来终止每个测试集,Reset脚本删除当前测试集的所有环境变量并且把TS_CURRENT的值累加1,以便执行下一个测试集。当回归测试集开始执行时,TS_CURRENT就变成了2。

  因此,在我们的实现过程中,每个测试集都包含表格1所示的脚本。

 

表格1

  通过使用这个测试数据架构(你可在自己的测试环境中略作修改),你就可更加高效地管理你的测试数据,让其更标准、可重用性更强。以我的经验来看,以这种方式管理数据-使用测试自动化框架-让我的测试生活 变得轻松和有趣。

UI 自动化测试框架:关键字驱动+数据驱动 1. 关键字驱动框架简介 原理及特点 关键字驱动测试是数据驱动测试的一种改进类型,它也被称为表格驱动测试或者基于动作字的测试。 主要关键字包括三类:被操作对象(Item)、操作行为(Operation)和操作值(Value),用面向对象形式可将其表现为Item.Operation(Value)。 将测试逻辑按照这些关键字进行分解,形成数据文件。 用关键字的形式将测试逻辑封装在数据文件中,测试工具只要能够解释这些关键字即可对其应用自动化。 优势 执行人员可以不需要太多的技术:一旦框架建立,手. 阅读详情

相关推荐

自动化测试框架?数据驱动vs关键字驱动,该怎么做?

对于自动化测试框架,其实并没有多数人想象中的那么高深玄乎,框架的概念只是一系列的被事先定义好的标准和规范。在自动化测试中我们经常提到的对测试需求的解析、脚本设计、测试执行、测试报告、维护管理等等,通过框架将它们串联并封装起来,从而使框架的终端用户能够更方便地使用。然而,一个好的自动化测试框架,不仅仅要能让用户方便使用,还需要考虑很多其他因素。目前比较常见的自动化测试框架主要有3种:数据驱动框架、关键字驱动框架和混合型框架。1、数据驱动框架(Data Driven Framework)

Ces222的博客 885

抛砖引玉——分布式数据驱动自动化测试框架结构Python+Selenium+Unittest+Ddt+HTMLReport

1、Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_page import Login_Page from HTMLReport import logger import time def login(driver, username, password): """ 登录业务 :param driver:浏览器驱动 :param

Asaasa1的博客 430

数据中台建设中的自动化测试框架

数据链路长(采集→清洗→存储→计算→应用)导致的测试覆盖不全数据量激增(日处理亿级数据)带来的手动测试效率低下业务需求快速迭代(每周新增10+数据指标)引发的测试遗漏风险覆盖从测试框架设计原理到具体代码实现的全流程,适合数据中台建设者、测试工程师及数据开发人员参考。用"快递分拣中心"类比理解数据中台与测试框架的关系拆解自动化测试框架的核心模块与工作流程通过电商数据中台案例演示从环境搭建到代码实现的全流程分析未来AI驱动测试、实时测试等前沿方向。

SuperAGI2025 1026

开源API测试工具 Hitchhiker v0.8 - 自动化测试结果统计

Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持自动化测试, 数据对比,压力测试,支持脚本定制请求,可以轻松部署到本地,和你的team成员一起协作测试Api。 详细介绍请看: doc.hitchhiker-api.com/cn/introduc… 在线体验: www.hitchhiker-api.com/, 可以用 try without login 来免登...

weixin_34184561的博客 230

切比雪夫插值

切比雪夫插值是一种基于切比雪夫节点的多项式插值方法,其优势是减少插值误差(特别是龙格现象:表现为高维插值时在边缘处插值误差骤增)。本文对其基本操作进行说明。

平和少年的博客 1646

自建智能算力中心与第三方算力租赁的深度分析

自建智算中心和第三方算力租赁的主要区别如下:对比维度自建算力中心第三方算力租赁初期成本数千万至数亿元硬件采购+机房基建零硬件投入,按需付费(如1元/卡时)部署速度6-12个月(采购、部署、调试)即时开通,分钟级资源调度运维难度需专业IT团队,承担断电、故障等风险服务商全托管,SLA保障99.95%可用性弹性扩展扩容需重新采购硬件,周期长、成本高支持秒级弹性伸缩,应对流量峰值技术迭代硬件更新周期长,易被淘汰自动升级。

2501_90999758的博客 2357

Python自动化测试问题及处理方法(一)

一、接口自动化测试中,会用到测试账号,如何合理运用账号? 账号一般用于接口登录、接口用例传参、操作sql等,目前账号是写到yaml配置文件里,如果1个账户使用会出现资源冲突,可以配置多个账号使用,登录脚本中、用例脚本中、sql脚本中,先将读取过来的账号设为全局变量,然后用到的地方进行替换就。保证了账号的更换至需要动配置文件就可以了 二、接口自动化测试中,接口依赖前置数据较多,如何处理? 根据...

专业资深测试者,多年质量管理经验,浪迹网游、金融、房产、招聘及海外行业多年,CDSN百万原创阅读,公众号500+原创文章,提倡测试左移、风险、越权、假设、探索测试,喜欢用抽象思维模式思考和技术探讨,自动化、性能、安全测试实施者,感谢关注! 931

从零开始:用摩尔线程S4000运行开源AI项目的完整流程

本文详细介绍了如何使用摩尔线程S4000 GPU从零开始运行开源AI项目的完整流程,包括硬件选择、驱动安装、容器化环境配置以及典型AI项目的实战部署。通过性能优化技巧,显著提升推理速度,适合开发者快速上手国产GPU的AI应用开发。

weixin_29231725的博客 581

自动化测试框架——数据驱动测试介绍

数据驱动        相同的测试脚本使用不同的测试数据来执行,测试数据和测试行为进行了完全的分离,这样的测试脚本设计模式叫做数据驱动。        实行数据驱动测试的步骤如下:        (1)、编写测试脚本,脚本需要支持程序对象、文件或者数据库读入测试数据。        (2)、将测试脚本使用的测试数据存储程序对象、文件或者数据库等外部介质。        (3)、运行脚本,循环调用存...

vikeyyyy的博客 8723

FPGA+CMV4000实战:从零搭建20fps成像系统的5个关键步骤(附避坑指南)

本文详细介绍了如何从零搭建基于FPGA和CMV4000传感器的20fps成像系统,涵盖硬件选型、SPI通信优化、LVDS数据采集、DDR2内存管理及系统集成等5个关键步骤。特别针对CMV4000传感器的SPI配置和高速数据处理的常见问题提供实用解决方案,帮助开发者避免常见陷阱,提升成像系统性能。

weixin_42628688的博客 427

MATLAB新手必看:SVPWM七段式算法仿真全流程解析(附完整代码)

本文为MATLAB新手和电机控制初学者提供了SVPWM七段式算法的完整仿真与代码实现指南。文章详细解析了从扇区判断、矢量作用时间计算到PWM波形生成的全流程,并附带了可直接运行的MATLAB代码,帮助读者在理解FOC控制核心算法的基础上,快速掌握工程仿真与调试技巧。

weixin_29074295的博客 281

mysql test framework_采用开源测试框架进行分布式数据库自动化测试

3、新增测试用例(1) 进入相应功能模块的t目录下(2) 新增测试用例文件,并以.test为后缀名,例如:testcase_name.test(3) 在测试用例文件中撰写相应的测试语句,完成后保存(4) 进入$HOME/ mysql-test目录,执行perl mysql-test-run.pl 命令,并查看生成的结果文件(5) 若结果文件正常,即可将结果文件保存到此功能模块...

weixin_42365898的博客 320

农作物生长模型:数学建模与实战案例

在本篇博客中,我们介绍了农作物生长模型的基本原理,并结合Matlab代码和实战案例,演示了如何应用数学建模技术进行农作物生长模型的研究与应用。农作物生长模型在农业领域具有重要意义,希望本篇博客能帮助读者更好地理解农作物生长模型的原理和应用,并在实际农业生产中取得更好的效果。

YOLO 2734

如何搭建数据驱动自动化测试框架?

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。文档获取方式:

2301_79535618的博客 1367

解决anaconda占用C盘空间过多问题

anaconda就算安装在其他盘,默认会把索引、锁定文件、压缩包等都放到系统盘(C盘),我用了两年,占用30GB。 1. 卸载不用的虚拟环境 查看已安装的虚拟环境 conda env list 卸载不用的、过期的虚拟环境 conda remove -n (要卸载的环境的名字) --all 2. 删除索引缓存、锁定文件、未使用过的包和tar包 conda clean -a 清理完之后,删除了15GB,还剩15GB,舒服了 ...

沉迷单车的追风少年 3万+

Cadence PCB仿真 使用Allegro PCB SI为BRD文件创建通用型IBIS模型的方法图文教程

本文简单介绍使用Allegro PCB SI软件为BRD PCB设计文件中的元器件创建IBIS模型的方法。

fydar的博客 2169

一文教你快速搭建数据驱动自动化测试框架

数据驱动自动化测试是一种测试方法,通过在测试用例中使用不同的测试数据进行测试,从而实现对系统功能和性能的验证。数据驱动的方式可以提高测试用例的覆盖率,也可以让测试过程更加自动化和可靠。数据驱动自动化测试框架是一种支持数据驱动的自动化测试工具,它能够实现自动读取测试数据、执行测试脚本和生成测试报告等功能。数据驱动自动化测试框架可以大大简化测试流程和降低测试成本,同时提高测试效率和质量。

MXB1220的博客 931

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

关键字+数据驱动自动化测试框架

在几年的自动化测试中,开发过数据驱动模式的框架,也开发过关键字驱动的数据框架,但总有些遗憾,总感觉这些框架还不是我想要的,因为他们有两点还有欠缺: 1.数据驱动模式可以比较方便的设计修改测试数据,但不支持快速自动化开发与后期脚本维护,功能函数非常多。 2.关键字驱动可以比较方便维护脚本和进行快速自动化开发,但对不断变化的测试数据支持又显得乏力 在又接手一个大型项目后,决心打破这些模式,经

yushuanggui的专栏 2974

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

自动化测试框架之关键字驱动和数据驱动

关键字驱动和数据驱动

qq_49937848的博客 1439

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

网易自动化测试大佬教你如何搭建数据驱动自动化测试框架?

说到数据驱动自动化测试,你会不会有这样的疑问:数据怎么管理?数据怎么才能驱动测试用例执行?到底怎么样才算数据驱动?那么本篇文章就教你如何进行数据驱动测试,相信你一定能对数据驱动自动化测试有一个不一样的理解,希望这篇文章能帮助还在懵懵懂懂的你了解数据驱动测试,如何来做数据驱动测试?那么就跟上我的脚步吧^_^126网易免费邮-你的专业电子邮局1.实现126邮箱登录功能的验证2.实现126邮箱添加新联系人功能的验证。

weixin_47648853的博客 245

UI自动化测试框架:PO模式+数据驱动

PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。PO 模式的设计思想与面向对象相似,能让测试代码变得可读性更好,可维护性高,复用性高。PO 模式可以把一个页面分为三个层级:对象库层、操作层、业务层。对象库层:封装定位元素的方法。操作层:封装对元素的操作。业务层:将一个或多个操作组合起来完成一个业务功能。

HUA1211的博客 910

UI自动化测试框架:PO 模式+数据驱动

PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成一个 Page 类,并以页面为单位来写测试用例,实现页面对象和测试用例的分离。PO 模式的设计思想与面向对象相似,能让测试代码变得可读性更好,可维护性高,复用性高。PO 模式可以把一个页面分为三个层级:对象库层、操作层、业务层。对象库层:封装定位元素的方法。操作层:封装对元素的操作。业务层:将一个或多个操作组合起来完成一个业务功能。

HUACE5400的博客 1096

UI自动化测试框架:数据驱动

一、UI自动化框架介绍 测试框架使用了Po设计模式(Page Object),每一个页面用一个类来对应,这个类里面要实现所有核心页面元素的获取方法,类里面提供操作页面元素的所有方法。 这个框架实现几点: 1.把常用的代码进行了封装,减少重复代码的编写。 比如说,操作excel 的方法,记录日志的方法,创建文件的方法,查找元素的方法,解析ini配置文件的方法,还有记录时间的方法,都进行封装,在使用时直接进行调用。 2.做到了测试程序和测试数据进行了分离。 3.做到了定位表达式和程序的分离。 4.易于维护 5.

zjtdy的博客 1234

移动端自动化测试 Appium 框架之数据驱动

背景 自动化是为业务测试服务,如果数据与业务放在一起看起来不是很规整与整洁,是否可以把数据与业务分离,是完全可以的,这也是市场常见的数据驱动框架,今天咱们就聊一聊怎么搭建自己数据驱动框架; 前置条件 appium环境搭建成功,不会参考自动化工具之Appium工具简单介绍,实在不会在参考网上怎么搭建。 思考 UI自动化框架元素放文本存储、数据存储、代码直接存储等其实随便那个都行,只有自己用者方便就行,我工作中用文本文件存储,这样修改方便,脚本放svn/git管理就行,ui自动元素操作基本常见的就是ID/NAM

7DGroup,让技术更有价值! 8852
上一篇: 安装Quality Center报错--Failed to validate database parameters
下一篇: 自动化测试脚本开发的几种策略
jasonteststudy
博客等级 码龄16年 152粉丝 125原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值