
技术分享
文章平均质量分 78
测试界晓晓
这个作者很懒,什么都没留下…
展开
-
Web测试框架SeleniumBase
它依赖的库比较多,包括pytest、nose这些第三方单元测试框架,是为更方便的运行测试用例,因为这两个测试框架是支持unittest测试用例的执行的。其他就没什么亮点了,不过提供的API 非常丰富,而且作者非常积极的在维护项目。它还提供的有 ```—demo_mode``` 模式,使脚本执行的过程变得很慢,而且还会让操作的元素高亮显示,方便你查看和定位问题。在调试Selenium脚本的时候,我们希望错误时可以暂停脚本,那么可以加 ```--pdb -s``` 参数。脚本中的元素定位默认使用的CSS。原创 2023-08-04 15:13:04 · 266 阅读 · 0 评论 -
性能测试浅谈
如果是前后端不分离,当你发送一个请求时,它会返回一堆数据:HTML、JS、CSS、图片、音视频...等,如果是前后端分离的架构,那么后端API返回的数据就单纯的多了,一般为JSON格式的数据。理解了这些,我们知道,我们所做的性能测试是无法模拟真实的情况,网络的传输时间太过复杂,客户端处理时间取决于用户的设备。上图为性能一款App使用的性能指标,这里的侧重点在于App拿到接口数据之后如何更快的把页面渲染出来,以及在渲染的过程中对硬件资源的消耗情况,还有用户在不同页面的切换的流畅度。后端性能其实就是接口性能。原创 2023-08-04 15:12:00 · 1040 阅读 · 0 评论 -
移动端测试必备技能: adb命令和抓包
adb是一个C/S架构的命令行工具,由三部分组成,ADB就是连接手机和电脑通信的桥梁,只要这个桥梁 建立起来了,那么你就可以通过电脑来控制你的手机了。Server端:运行在pc端中,客户端到 Android 设备上 adb 后台进程的连接,负责管理client和daemon 进行通信。应用场景:自动化测试中需要知道app的包名和activity,通过命令获取使用步骤:开启被测应用,输入命令。是指对移动应用进行的测试,即实体的特性满足需求的程度,进行测试前需要搭建测试环境。原创 2023-07-28 15:37:58 · 398 阅读 · 0 评论 -
APP UI自动化测试常见面试题,或许有用呢~
解决方法:如果是版本太旧,更新为新版本即可;我手机型号分别有魅族,华为,小米,iphone7、iphone8 、iphone8plus 、iphone x 测试兼容性,有些没有的机型,先借用同事的手机进行测试,同时申请公司购买,或者采 用云真机。1、移动应用主要有权限、安装运行卸载、UI、功能、性能、中断、兼容性、安全性、 回归、升级更新、用户体验(app 的 11 大测试点);这个要根据业务来,一般数据的问题前端的问题多些,一般做法是有问题提给前端开发, 他们知道是他们自己的问题还是后台返回的数据问题。原创 2023-07-28 15:36:58 · 160 阅读 · 0 评论 -
评测报告的结论如何写?
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!原创 2023-07-27 15:01:11 · 658 阅读 · 0 评论 -
H5和小程序测试点分析
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!原创 2023-07-27 14:58:52 · 584 阅读 · 0 评论 -
MySQL数据库远程访问权限设置
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!原创 2023-07-26 14:48:30 · 431 阅读 · 0 评论 -
Python连接MariaDB数据库
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!原创 2023-07-26 14:47:45 · 1638 阅读 · 0 评论 -
保姆级系列教程-玩转Fiddler抓包教程(1)-HTTP和HTTPS基础知识
有的小伙伴或者童鞋们可能会好奇地问,不是讲解和分享抓包工具了怎么这里开始讲解HTTP和HTTPS协议了。这是因为你对HTTP协议越了解,你就能越掌握Fiddler的使用方法,反过来你越使用Fiddler,就越能帮助你了解HTTP协议。Fiddler无论对开发人员或者测试人员来说,都是非常有用的工具。原创 2023-07-25 16:03:38 · 690 阅读 · 0 评论 -
Python+Selenium框架设计篇1- 价值好几K的框架,不看别后悔,过时不候
在了解什么是自动化测试框架之前,先了解一下什么叫框架?框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面,而后者是从目的方面给出的定义。从框架的定义可以了解,框架可以是被重用的基础平台;框架也可以是组织架构类的东西。其实后者更为贴切,因为框和架本来就是组织和归类所用的。所以自动化测试框架的定义为:由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合。原创 2023-07-25 16:02:24 · 395 阅读 · 0 评论 -
安装需要的第三方库时,命令行输入pip提示不是内部或外部命令
在做Python开发时,安装需要的第三方库时,大多数人喜欢选择在命令行用pip进行安装。然而有时敲入pip命令会提示‘pip’不是内部或外部命令。。原创 2023-07-24 14:28:42 · 779 阅读 · 0 评论 -
api-ms-win-crt-process-l1-1-0.dll 丢失的处理,遇到问题和完美解决
在换了新电脑后,一些环境需要重新搭建,本以为是个小case,没想到竟然遇到了各种拦路虎。在成功安装Python3.7后,需要检验是否成功安装,在命令行输入python后,回车;发现提示api-ms-win-crt-process-l1-1-0.dll丢失,网上搜索后发现很多人都出现了 api-ms-win-crt**.dll缺失的问题,导致一些软件或游戏无法正常运行。原创 2023-07-24 14:27:43 · 986 阅读 · 0 评论 -
给你一个项目,你将如何开展性能测试工作?
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!原创 2023-07-22 14:36:48 · 125 阅读 · 0 评论 -
Charles 工具如何做断点测试?
生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!原创 2023-07-22 14:36:22 · 782 阅读 · 0 评论 -
全网最全的Postman接口自动化测试(史实级攻略)
当然,如果只有默认的一个执行顺序的话,通常没法满足我们复杂的业务需求,所以 Postman 为我们提供了一个函数:postman.setNextRequest(“填写你要跳转的接口名”) ,支持我们跳转到指定接口继续执行,举个例子:我们在运行完 Request1 接口成功后,不需要再运行 Request2 而是直接跳至 Request3 ,那么我可以在 Request1 接口的 Tests 功能区中执行跳转代码,如:这里需要注意几点:原创 2023-07-21 14:29:30 · 418 阅读 · 0 评论 -
3分钟,快速上手Postman接口测试
根据接口文档,提取请求方法、URL、请求头、请求体后,依次输入请求信息,然后发送请求后,查看响应数据。对比响应数据的参数与接口文档是否一致,参数值与需求规定的业务逻辑是否一致。设置请求方法设置URL设置请求头设置请求体设置urlencoded表单请求数据URL查询参数数据请求体数据设置application/json请求体数据设置multipart/form-data上传文件查看响应数据需要采用的数据类型,由公司开发部门规定也方便你下次能够快速查找。原创 2023-07-21 14:28:00 · 299 阅读 · 0 评论 -
Jmeter接口测试之常用断言
在接口测试中,我们需要检查请求处理结果是否正确。当请求的响应状态码为200,是否表时接口功能正常呢?显然是不正确的。响应状态为200,只能表明服务处理了你的请求,同时进行了结果返回;但并不能代表处理的结果符合接口功能要求。此时只有进一步的检查“响应数据”是否与接口说明中的一致;才能断定结果是否正确。Jmeter提供了一个断言元件,实现检查接口测试中的响应数据是否符合预期,确保接口测试与预期的一致性。注:本篇内容以“Jmeter快速创建接口测试脚本”请求为例。原创 2023-07-20 14:37:26 · 111 阅读 · 0 评论 -
零代码实现接口自动化测试-RF框架实践
robotframework是一款关键字自动化测试框架,可能做各种类型的自动化测试。本文介绍通过 robotframework 来实现接口测试。原创 2023-07-20 14:36:40 · 227 阅读 · 0 评论 -
Pytest使用fixture实现token共享
如果有token,我们就不需要执行登录操作,直接使用文件中的token,这个时候代码需要继续改造。方法开始时判断当前是否存在保存token的文件,如果有则获取token,不再执行登录的操作。通过上面的方法,可以解决接口使用token的需求,不过这么做每次都会先执行login接口,有没有一种方法可以只执行一次login接口,后面的接口就不调用login接口了呢。每次执行用例结束后把存token文件删除,不然生成了一个token,代码判断token文件存在,就不会去调用登录接口。,用于之后的代码中。原创 2023-07-19 14:59:18 · 502 阅读 · 0 评论 -
【软件测试】如何设计自动化测试脚本
关键字驱动是将所有需要执行的业务操作中的公共的操作独立进行封装,所有业务调用公共的操作方式,而对于程序的控制也以函数的方式进行驱动,即公共操作,程序控制,测试数据都通过外部数据文件进行管理和读写,关键字驱动的基础的数据驱动。线性脚本设计方式是以脚本的方式体现测试用例,是一种非结构化的编码方式,多数采用录制+回放的方式,测试工程师通过录制+回访的访问对被测系统进行自动化测试,录制的脚本会产生某些冗余的代码内容或函数及脚本。让被测系统实现组件化的互相调用。企业中如何设计自动化测试脚本呢?原创 2023-07-19 14:58:22 · 487 阅读 · 0 评论 -
这可能是最简单的Page Object库
可是,Page层的编写并不太简便,本质上它的作用只是定义一些元素的定位。可惜缺少元素的等待,这将有助于定位元素的稳定性,所以,在原有项目的基础上增加的该功能。这里你将看不到元素的定位,分层的好处就是,当元素的定位发生改变时,只需要维护好page层即可,对于测试用例来说不需要关心元素怎么定位,只要专心设计好用例即可。是的,就这么简单,专注于元素的定位的编写,几乎没有多月的东西。我们本质上要将元素的定位和元素的操作分开,page层用来定义元素的定位。这样再也不用写恶心的显式等待了,是不是很爽!原创 2023-07-18 14:43:52 · 264 阅读 · 0 评论 -
e2e测试框架之Cypress
这几天我在搭建UI自动化测试框架,顺便封装了一些元素定位,随着对前端技术的了解,我几乎将所有元素定位都换成了CSS,配合JS处理一些Selenium很难操作的元素,确实效率提高了很多,页面元素也没那么难操作了,包括学了点Jenkins的配置,当然,这个话题会放到下一次来分享。在VS code 中编辑保存脚本后,上图的窗口会自动执行,速度上比selenium快多了,Selenium启动浏览器怎么着也得3~5秒吧,上面的脚本不到2秒就跑完了,元素定位主要以CSS为主,这其实不是问题,CSS本来就很强大的说。原创 2023-07-18 14:42:47 · 424 阅读 · 0 评论 -
最新 robot framework安装
然而,RIDE基于wxPython库开发,这是Python下面的一个GUI库,尴尬的是wxPython在很长的一段时间中都不支持Python3.x,这就导致RIDE无法支持Python3.x。### [Robot framework](https://pypi.org/project/robotframework/) 基于Python的robot framework测试框架,robot framework使用了一套特定语法,学习起来需要一定的门槛。最新的RIDE页面并没有什么变化,不过logo好像变了!原创 2023-07-17 14:57:23 · 138 阅读 · 0 评论 -
poium测试库介绍
在我们项目中,时常要用到JavaScript操作,比如日期控件不好操作,那会通过JS的removeAttribute() 删除掉元素的某些属性,使他可以通过输入完成日期的“选择”。比如,有些元素用Selenium点击不了,但JS的click()却可以,再比如有些弹窗不是必现的,就必须使用异常捕捉,但JS可以更轻松的处理弹窗。而poium可以极大的简化元素的定义,甚至接近,配置文件。最后,poium并不会对你的现有自动化产生太多的影响,它只是对元素操作的封装,你可以在项目当中随意的选择是否要用它。原创 2023-07-17 14:56:32 · 271 阅读 · 0 评论 -
如何在Appium中使用AI定位
较老的iOS和Android驱动程序不支持所需的Appium在任何情况下,都不推荐使用。当我们在写自动化测试脚本的时候,传统情况下一定要知道元素的属性,如id、name、class等。那么通过AI的方式定位元素可能就不需要知道元素的属性,评价人对元素的判断来定位,比如,看到一个搜索框,直接使用。我一开始在Windows试了半天不成功,因为我有现成的appium环境,后来发现压根不支持,于是,换成了macOS, 所以后面的操作在macOS下完成,当然,如果你有Linux环境,我觉得也是OK的。原创 2023-07-15 14:59:24 · 1363 阅读 · 0 评论 -
Web项目如何做单元测试
你可能会用单元测试框架,python的unittest、pytest,Java的Junit、testNG等。那么你会做单元测试么!当然了,这有什么难的?是定义的一个被测函数,用于测试上面的一段代码。单元测试不就是这么单嘛!我们以Django Web框架为例,它是MTV开发模式。接下来会围绕着这个模式介绍如何做测试。原创 2023-07-15 14:58:13 · 1524 阅读 · 0 评论 -
使用Hypothesis生成测试数据
Hypothesis是Python的一个高级测试库。它允许编写测试用例时参数化,然后生成使测试失败的简单易懂的测试数据。可以用更少的工作在代码中发现更多的bug。原创 2023-07-14 15:23:39 · 196 阅读 · 0 评论 -
你真的会开发测试框架?
英文单词叫Tools,在我看来工具与框架所做的事情类似,只是工具提供了更高层次的封装,屏蔽了底层的代码,提供单独的操作界面供用户操作。比如,我用django好几年了,从来没完整的看过它的官方文档了,更别说读用它的源码了。英文单词叫Framework,框架是为解决一个或一类问题而开发的产品,用户一般只需要使用框架提供的类或函数,即可实现全部功能。框架的学习和使用成本更高,我们要想使用框架可能需要到它所提供的多个类、函数,而且还要遵循它的代码结构或目录结构。当然不是,因为它实现的自动化测试的一整套东西。原创 2023-07-14 15:21:46 · 90 阅读 · 0 评论 -
【Mysql】InnoDB 引擎中的页目录
现在知道记录在页中按照主键大小顺序串成了单链表。那么我使用主键查询的时候,最顺其自然的办法肯定是从第一条记录,也就是 Infrimum 记录开始,一直向后找,只要存在总会找到。这种在数据量少的时候还好说,一旦数据多了,遍历耗时一定非常长。于是,作者又想到了一个好办法,灵感来自于书本中的目录。我们翻书的时候想查找一些内容,就会去查看目录,然后直接确定好内容所在的页码。那么对于 InnoDB 来说,过程如下:这个地方就是页目录 Page Directory。而上述的地址偏移量就是该记录的真实数据与页面中第 0原创 2023-07-13 14:27:20 · 216 阅读 · 0 评论 -
一文彻底理解 Cookie、Session、Token
但是随着交互式 Web 应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统,哪些人往自己的购物车中放商品,也就是说我必须把每个人区分开,这就是一个不小的挑战,因为 HTTP 请求是无状态的,所以想出的办法就是给大家发一个会话标识 (session id), 说白了就是一个随机的字串,每个人收到的都不一样,每次大家向我发起 HTTP 请求的时候,把这个字符串给一并捎过来,这样我就能区分开谁是谁了。如果访问服务器多了,就得由成千上万,甚至几十万个。原创 2023-07-13 14:26:13 · 138 阅读 · 0 评论 -
Python 自动化测试(四):数据驱动
yaml 文件里定义了列表数据,通过 open() 方法获取 data.yml 文件对象,使用 yaml.safe_load() 加载这个文件对象,将 YAML 格式文件转换为 Python 值,分别传到到用例中生成多条用例分别执行。前面文章学习了参数化,当数据量非常大的时候,我们可以将数据存放到外部文件中,使用的时候将文件中的数据读取出来,方便测试数据的管理。以上,pytest 组合 YAML 实现数据驱动,YAML 文件作为用例数据源,控制测试用例的执行,使测试用例数据维护更加方便快捷。原创 2023-07-12 14:54:53 · 260 阅读 · 0 评论 -
Python 自动化测试(三): pytest 参数化测试用例构建
同一个测试用例还可以同时添加多个 @pytest.mark.parametrize 装饰器, 多个 parametrize 的所有元素互相组合(类似笛卡儿乘积),生成大量测试用例。5",30)] 中的三组数据取出来,每组数据生成一条测试用例,并且将每组数据中的两个元素分别赋值到方法中,作为测试方法的参数由测试用例使用。场景:比如登录场景,用户名输入情况有 n 种,密码的输入情况有 m 种,希望验证用户名和密码,就会涉及到 n。原创 2023-07-12 14:53:59 · 286 阅读 · 0 评论 -
干货|移动端App自动化之触屏操作自动化
工作中我们经常需要对应用的页面进行手势操作,比如滑动、长按、拖动等,AppiumDriver 为我们提供一个模拟手势操作的辅助类 TouchAction,可以通过它对手机屏幕进行手势操作。原创 2023-07-11 14:46:06 · 206 阅读 · 0 评论 -
接口测试之Fiddler弱网测试
注释的也很明白,Delay sends by 300ms per KB uploaded.上传1KB需要300ms,转化一下上传速度:1Kb/0.3s = 10/3(KB/s) >如果你想设置上传的速度为50KB/s,你则需要设置Delay 时间为 20ms >同样的方法,也可以限制上传的速度,调整oSession[“response-trickle-delay”]即可。因为用户在网速慢的情况下,你的网站(软件)总能出现各种各样的问题!6.手机浏览器中输入,你的IP地址和端口号。点击图中的位置安装证书。原创 2023-07-11 14:44:52 · 322 阅读 · 0 评论 -
Thrift接口测试实践
中很详细的介绍到针对不同的协议的测试,本质的核心思想都是一样的,都是客户端与服务端之间的请求/响应模式或者是异步通信的模式。在使用Thrift之前,首先需要搭建Thrift的环境,在Mac中,搭建环境成功后,输入命令:thrift -v就会显示具体的版本号信息,具体如下图所示。包含了用于绑定协议和传输层的基础架构,也是基于HTTP/2.0的版本实现,Thrift提供阻塞,非阻塞,单线程,多线程的模式运行在服务器上,结合。在如上代码中,对返回来的响应数据进行了反序列化的处理以及响应数据的验证。原创 2023-07-10 14:55:19 · 303 阅读 · 0 评论 -
Web Service接口测试
可以简单的理解为web service是一个SOA(面向服务的编程)架构, 它不依赖于语言, 也不依赖于平台, 可以实现不同语言之间的通讯和相互调用.SOAP(简单对象访问协议) 是xml web service的通讯协议. 当用户通过UDDI找到WSDL(Web Service Description Language)文档后,通过SOAP调用建立的web service的一个或者多个操作.SOAP是xml文档形式的调用方法规范, 可以支持不同的底层接口.这根鞭子是压力,是挫折和困难,是危机意识。原创 2023-07-10 14:54:18 · 1492 阅读 · 0 评论 -
接口测试的维度
在《Python自动化测试实战》的书籍里面系统的介绍了基于Python语言的接口自动化测试实战和基于Python语言的UI自动化测试实战,特别是接口测试部分,详细的介绍了HTTP的协议原理,序列化与反序列化,主流测试工具(Postman和JMeter)在接口测试实战中的应用,以及Requests的接口测试实战,和接口测试框架的设计,但是总觉得缺少一些维度没说明白,到书校验的后期一直想加,但是由于时间的紧张,就没继续添加新的内容。虽然我们很清晰的测试“测试金字塔”的模型,也系统完善的介绍了API的知识体系。原创 2023-07-08 14:35:13 · 109 阅读 · 0 评论 -
接口测试&管理续集
以上是对YAPI接口管理平台的介绍,其在内网部署安装流程也非常简单,官方有非常详细的教程文档(https://hellosean1025.github.io/yapi/documents/index.html)。数据返回层面的细节来源于接口文档,其中会标记返回数据字段的数据类型和含义。数据返回的类型各式各样,但是“万变不离其中”,无非是围绕数据类型展开的,因此请参考下列关于数据类型测试点。1、接口文档功能:后端开发&前端开发&测试共同维护同一份接口文档,减少文档维护的成本,保证文档的统一性;原创 2023-07-08 14:34:15 · 97 阅读 · 0 评论 -
Win10下python3和python2同时安装并解决pip共存问题
点击关闭,查看python3安装情况,按“Win + R”快捷键,在打开的“运行”对话框中,输入“cmd”按回车,进入如下界面,输入python查看python3安装情况,显示python 3.5.2 的版本信息,则安装成功,可以输入语句print(1 + 1)进行测试。打开,控制面板\系统和安全\系统,选择高级系统设置,环境变量,选择Path,点击编辑,新建,分别添加D:\Python\python27和D:\Python\python27\Scripts到环境变量。原创 2023-07-07 14:39:06 · 411 阅读 · 0 评论 -
Python冒号的解释
1. “没什么首次没有为第二个,跳了三个”。它得到的切片序列的每一个第三个项目。5. 当在Python切片第三是一步。2. Python的序列切片地址可以写成[开始:结束:一步]和任何启动,停止或结束可以被丢弃。因此,[:: 3]将返回列表/字符串的每个第3位。意思是“每k个项目”。您还没有指定任何开始或结束指数的切片。是,根据该“片第从i到j与第k步”。7. 该::分开结束,开始,步长值。,这将需要的每第三个条目。让我们从每一个第3项。让我们从每一个第3项。让我们从每一个第3项。让我们从每一个第3项。原创 2023-07-07 14:36:14 · 266 阅读 · 0 评论