Jmeter 对优快云登录接口进行参数化测试

参数化,断言,参数化时为什么做断言,怎么做断言,如何确保断言的正确 参数化是什么 参数化想必做过接口测试的各位小伙伴都不陌生,参数化是对一个接口进行多次重复类似的操作,通过将响应数据与接口API对比即可。 断言是什么 手动测试时,我们通过肉眼去确认程序的实际操作后呈现的结果与我们用例中的预期结果是否匹配,比如登录,输入账号密码后需要去用肉眼去查看是否登入了系统,页面是否正常跳转等,这都是用肉眼去检查程序的实际操作后呈现的结果与我们用例中的预期结果是否匹配的过程。 在自动化测试或者接口参数化测试中,我们用什么来判断实际结果与预期结果是否一致的呢?这个时候就需要用到测试 阅读详情

案例说明:测试对象为优快云的登录接口,调用编写的.txt文件进行参数化测试

1.配置参数

1)添加线程组

2)添加HTTP请求,参数如图所示

      路径参数:/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1

3)创建测试用例保存为.txt文件即可,详细参数如下图

      可写入有效的登录用户名、密码和无效的用户名、密码

4)添加CSV数据文件设置(CSV Data Set Config)      

      文件名(file name):参数项文件,写入想要调用的CSV文件的绝对路径

      文件编码(file encoding):文件的编译方法,一般为空

     变量名称(vaiable names):文件中各列所表示的参数项,各参数项之间利用逗号分隔,参数项的名称应该与HTTP Request中的参数项一致

      分隔符(delimiter):如文件中使用的是逗号分隔,则填写逗号,如使用的TAB ,则填写\t

5)添加察看结果树

6)点击运行,可以通过察看结果树的信息查看测试结果,注意txt内有几条用例,线程组内的线程数就要设置为同样数量,例如有三条用例,线程数需要设置为3

第十一讲、jmeter性能测试实战-web程序 1、搭建AUT 第一步、下载所需文件     Discuz_***.zip------源码程序文件,是PHP程序,简体中文GBK的下载地址是http://download.comsenz.com/DiscuzX/3.1/Discuz_X3.1_SC_GBK.zip。     PHPnow_***.zip-----集成了Apache中间件、Mysql数据库和PHP,下载地址是http://se 阅读详情

相关推荐

jmeter编写测试脚本大全

jmeter编写测试脚本大全。使用jmeter编写脚本时,有好多注意事项,也写好了好多博客,但是很散。这次统一整合一下。

喵酱 6820

使用Jmeter进行性能测试及性能监控平台搭建

模拟多个用户的操作对服务器硬件性能的影响TPS(Transaction Per Second )每秒事物处理能力RT( Response Time )响应时间为什么要使用分布式?

百晓生说测试的博客 8302

【JMeter】JMeter怎么实现接口关联?

文章目录前言一、操作二、关于正则表达式的举例说明1、提取单个字符串2、提取多个字符串总结 前言 Jmeter用于接口测试时,后一个接口经常需要用到前一次接口返回的结果,应该如何获取前一次请求的结果值,应用于后一个接口呢,拿一个登录的例子来说明如何获取。 提示:以下是本篇文章正文内容,下面案例可供参考 一、操作 1、打开jmeter,新建一个测试计划,在测试计划里新建一个线程组,新建一个登录的http请求,如图所示: 2、查看登录返回的结果: 3、充值接口需登录后才能操作,此时可以使用cookie..

weixin_55018452的博客 7296

jmeter接口测试实例(一)登录接口及参数化设置

内容: jmeter实现简单的接口测试、并进行参数化(需要补充csv格式的数据) 前提: 测试http协议的登录接口,接口请求方式为post,请求参数为非json格式 一、实现接口测试: 1、在测试计划下,右键添加线程组,每一个接口测试的请求必须在线程组下,一个线程组可以理解为一个用户,有了用户才能发送请求进行测试。 2、在线程组下,右键添加取样器—http请求,并根据接口信息,填写以下信息: ...

weixin_42976139的博客 3595

在项目中如何用jmeter进行接口测试

与开发团队确认接口说明文档,明确接口的请求方式(GET/POST)、URL、参数(Query、Body、Header)、响应格式(JSON/XML)及预期结果410。若文档缺失,可通过抓包工具(如Fiddler)或与开发协作补全接口信息。根据接口功能设计正向、反向用例,覆盖参数校验、边界值、异常场景等。例如:必填参数缺失或为空时的响应;错误参数类型或格式的返回结果47。使用CSV文件管理测试数据(如用户名、密码、ID等),通过JMeter的“CSV Data Set Config”实现参数化410。

海姐软件测试的博客 1369

接口测试之Jmeter-(三)新建用户测试用例

前言: 本次主要用Jmeter实现新建用户接口测试,包括: (一)分析接口需求 (二)添加Header和Cookies (三)添加线程组 (四)添加http请求 (五)运行并察看结果树 (一)分析接口需求 前提:需要先调用用户登录接口,获取token 功能:新建用户 http请求方式:PUT 请求url: https://ip:port/user/user 请求body: { "...

qq_35332549的博客 2222

十四 泛型----参数化类型

十四 泛型----参数化类型 思考:常规的类和方法使用的类型无非分为两类:基本类型和类,如何编写一个更具通用性的类或方法来使用多种类型呢? 无力的多态 当把基类或接口作为参数类型,则可以接受所有继承基类或者实现接口的导出类作为参数。如此达到了一定的通用性的效果。但是即使如此还是局限性很强,一旦我们确定了基类或者接口以后我们的参数就必须为继承或实现的类型信息。当要求我们的代码能够应用于某种不确...

VSelina的博客 1855

【JMeter】多接口关联

实际工作场景当中,比如获取到商品列表,并查看商品详情。如果将商品id写死,就很笨拙。所以我们可以进行参数化动态去更新商品id。

weixin_46697247的博客 3120

Jmeter接口测试⑦——参数化

本节以登录接口为例。 一、测试数据准备 1.登录账号/密码 2.host信息 二、参数化 1.添加线程组 测试计划右键->添加->线程->线程组 2.添加CSV 数据文件设置 线程组右键->添加->配置元件->CSV 数据文件设置 说明: 文件名:数据文件绝对路径。 变量名称:变量数量要与目标数据表格字段相匹配,即2个变量:username...

测试领域技术分享 351

Jmeter参数化实例-模拟用户登陆

Jmeter参数化实例-模拟用户登陆

如何在Tagetik系统中抽取处理SAP系统财务数据

如何在Tagetik系统中抽取处理不同核算系统财务数据:以SAP为例,简单讲一下Tagetik对接SAP数据的基本情况

2201_75401663的博客 577

Jmeter 接口测试实战(测试必备)

本场 Chat 分享将通过实际工作中的项目给大家介绍如何通过 Jmeter 进行接口测试、辅助进行功能测试提高测试效率。 本课程相关接口模块:登录接口、银行卡接口、上传文件接口; 本场 Chat 知识点如下: Jmeter 下载与介绍 通过 Fiddler 分析登录、银行卡模块接口 Jmeter 发送请求(Post、Get) Jmeter Headers 设置 Jmeter 断言 Jmeter ...

GitChat 1639

从Chiplet到UCIE:D2D互联技术如何重塑半导体设计生态

本文探讨了D2D互联技术在半导体设计中的革命性作用,从Chiplet到UCIE标准的演进如何重塑行业生态。详细分析了D2D互联的技术本质、架构选择及UCIE标准带来的变革,并展望了未来光学D2D和3D集成等趋势。高速互联接口技术的突破为AI加速器和计算芯片提供了更高带宽和能效。

weixin_29292535的博客 931

JMeter 接口自动化测试完整版

基础入门篇 JMeter环境配置 JMeter核心配置文件 JMeter中文乱码处理 自动化测试关联篇 JMeter 参数化 JMeter 数据库操作 JMeter 接口测试断言方法 JMeter if控制器 JMeter 正则表达式提取 JMeter 对cookie获取操作 JMeter 测试FTP JMeter 的Beanshell 操作 JMete...

weixin_40881502的博客 2603

modbus-esp8266库深度解析:工业级Modbus协议栈实现

Modbus是一种广泛应用于工业自动化领域的通用串行通信协议,其核心在于标准化的功能码、寄存器模型与帧结构设计。基于RTU、ASCII和TCP三种传输变体,Modbus协议通过主从架构实现设备间可靠数据交互,具备低开销、高兼容性与强实时性等技术价值。在边缘计算与工业物联网场景中,它被广泛用于PLC通信、传感器数据采集、HMI集成及远程固件升级(FOTA)等关键任务。针对ESP8266/ESP32等Wi-Fi微控制器平台,modbus-esp8266库提供了完整协议栈支持,涵盖多实例并发、回调驱动架构、零拷贝

weixin_42315569的博客 349

深入浅出讲解外部服务提供者 OAuth 2.0 帐户客户端创建与 ABAP 系统集成

本文详细介绍了在SAP ABAP平台配置OAuth 2.0客户端以安全调用外部Web服务的完整流程。主要内容包括:首先需要在外部服务提供者平台注册OAuth客户端,获取client ID和client secret;其次需特别注意重定向URI必须是公开可访问的地址;然后在ABAP系统中通过事务码OA2C_CONFIG配置OAuth客户端信息;最后阐述了常见的错误排查方法。文章强调了OAuth 2.0作为SAP系统与外部服务安全集成的标准协议,正确配置客户端是确保后续API调用安全可靠的关键前提。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1734

JMeter接口测试实战(二)-多接口串联形成业务闭环

这篇主要介绍多接口的一个串流程,包括参数传递、响应报文验证和数据库的验证。JMeter的单接口实战请见。

u013107557的博客 2120

ExpressLRS(ELRS)接收机技术全景:从历史演进、技术底层到产业生态全解析——上

ExpressLRS(ELRS)是一种由全球开源社区驱动的双向射频遥控链路协议栈,其接收机作为核心终端,承担信号接收解调、遥控指令解析、飞控数据交互与遥测回传等关键功能。自2018年问世以来,ELRS凭借极致性能、低成本、开放生态和强兼容性,从航模DIY方案发展为消费级无人机领域的事实标准,并逐步渗透工业级场景。 ELRS接收机采用模块化分层架构,支持2.4GHz和900MHz双频段,通过LoRa、FLRC、FSK多调制模式实现低延迟与远距离平衡。其核心技术包括自适应跳频抗干扰、TDD双向链路和极简数据包。

bother3000的博客 302

Jmeter接口性能测试

1.jmeter简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。JMeter 可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。另外,JMeter能够对应用程序做回归测试,通过创建带有断言的脚本来验证你的程序返回了你期望的结果。开源,免费且具有了LoadRunner95%以上的功能,性价比极高。 2.jmeter特点 支持对多种服务类型进行测试;

guo_qingxia的博客 5072

ROS从入门到精通6-2:gmapping激光建图与自定义建图功能包

本文用Turtlebot3实例直观介绍激光建图概念,并实现自定义建图功能包(自动建图与键盘手动控制建图)

FRIGIDWINTER的博客 2662

基于Python的房地产评估数据抓取与分析 —— 房价走势与市场报告

在房地产行业中,了解和分析房产价格的变化趋势、各个地区的房价差异以及市场评价报告,可以帮助投资者、购房者以及政策制定者做出更加明智的决策。本文介绍了如何使用Python爬虫技术抓取房地产平台上的房产评估报告、价格走势等数据,并对抓取的数据进行分析。通过这些技术,您可以自动化抓取房地产平台的数据,分析房价走势,获取市场报告,为房地产投资决策提供数据支持。假设我们要从链家网抓取某个房产的价格、房产描述以及历史成交价格,首先需要获取目标房产页面的URL,并发送HTTP请求。伪装为常见浏览器,避免被识别为爬虫。

2201_76125261的博客 846

Jmeter接口测试快速入门 以飞致云平台为例

为http请求添加HTTP信息头管理器,并添加参数,设置参数值。其中授权验证码是个动态值,在登录请求的响应结果中,需要动态提取。现在mytoken中就保留了授权码,后面的请求都需要用到该值。设置提取结果要保存到哪个变量中、提取表达式、提取第几个匹配项、提取不到匹配项时返回的值。为请求添加http信息头管理器,将接口规范中的header的内容输入。保存测试计划后运行计划,在测试结果数中查看登录请求的响应结果。提取结果符合预期,我们就把提取器添加到脚本中了。结果中的商品id在下单是需要,我们先提取一下。

caohongxing的博客 3669

Jenkins自动化部署服务到Kubernetes环境

通过Jenkins实现自动化部署可以大大提高软件交付的效率和质量。本文介绍的部署流程涵盖了从代码编译、Maven依赖管理、Docker镜像构建到Kubernetes部署的完整流程,并提供了通知机制以便及时了解部署状态。特别需要注意的是Maven与私服的配置,这是确保构建过程能够正常访问依赖包的关键。通过Jenkins的凭据管理功能,可以安全地管理私服的认证信息,避免敏感信息泄露。在实际应用中,您可能需要根据具体的项目需求和环境特点调整部署脚本。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 527

JMeter模拟多用户同时登录,token传递接口关联(同线程组)

根据性能测试需求,需要模拟多用户同时登录 1、新建一个txt文件,用于存放用户参数数据。 先创建登录接口进行请求

LSZZZ的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

JMeter模拟多用户并发登录,批量把token保存到本地

本文模拟多用户并发操作。通过设置多个线程组,实现登录一次,多次进行其他后续操作。 将多用户信息参数化,setUp线程组进行一次登录请求,请求成功后将多用户获取到的token信息储存在本地,再进行参数传递,完成后续操作后,通过tearDown线程组,销毁本地token文件,以便执行下次测试计划。 同线程组操作可参考上篇文章 下面为详细操作步骤 SetUp线程组 模拟5个用户,同时登录 1、新建一个txt或csv文件,用于存放用户参数数据 存放置在jmx脚本...

LSZZZ的博客 5496

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jmeter csv参数化_Jmeter的几种参数化

如果想要掌握Jmeter的相关操作,那么前提是你一定要会参数化,那什么是参数化呢?我的理解,就是将脚本中的某些输入值使用参数来代替,在下次使用的时候,只需要修改输入值既可。还是听不懂没关系,看了下面的你就会了,常见的参数化方法有如下几种:一、CSV Data Set Config:CSV数据控件使用场景:适合参数范围比较大的时候,可以方便用户随时修改参数数据。使用最多的就是参数化用户名和密码登录系...

weixin_39946313的博客 312

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: Badboy 测试脚本参数化
下一篇: python + selenium 环境搭建
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值