- 博客(288)
- 收藏
- 关注
原创 【GUI自动化测试】7.pywinauto_菜单控件的操作
前⾯我们已经尝试实现了微信发消息,从打开程序、基本操作流程到最后的检查,脚本看似完整,但这⾥的脚本仍然存在多个问题。所在的列表项的,有的只能获得菜单栏的那几个,所以我们要灵活一点,这个方法不行,我们也可以通过之前学的坐标定位来。使⽤sublime_text来批量创建⽂件,针对创建⽂件的场景我们进⾏⽤例的设计,并编写对应的测试脚本。获取消息列表数量后,根据数量定位最后⼀条消息,检查⽂本是否为最新的。测试受到环境的影响非常大,在下面的代码里面,有的人有的版本的。的使⽤和上⾯有区别,使⽤。
2026-02-24 13:19:16
371
原创 【GUI自动化测试】6.pywinauto_键盘操作
控件)的专属⽅法,可以直接作⽤于指定的控件,确保输入内容精准⽆误。这种⽅法避免了因焦点切换导致的输入错误,特别适合在复杂的⽤户界⾯中进⾏自动化操作。然⽽,在实际的自动化场景中,我们通常需要针对特定的控件(如⽂本框、按钮等)进⾏精确的输入操作,⽽不是依赖于窗口的焦点状态。GUI自动化⽤例的设计主要基于UI(界⾯)测试和界⾯展示的功能来进⾏⽤例的设计。这个不能到处乱发,比如加个循环轰炸别人,可能被举报,拉黑,甚至被微信封号。如果已经有的内容不想清空,想从下一行开始,那么可以在代码的开头加一个。
2026-02-24 09:32:16
526
原创 【GUI自动化测试】5.pywinauto_控件的操作+鼠标操作
窗口的最⼤化按钮时,虽然语法上没有问题,但这种⽅法可能⽆法完全满⾜我们的需求,尤其是在需要更精确或更灵活的⿏标交互时。当然,这里有的控件比较大可能会出现,往后挪动时未有效挪动到指定控件的情况,这个问题留到后面解决。模块,我们可以直接在屏幕上指定坐标进⾏点击、双击、拖动等操作,⽽⽆需依赖控件的层次结构。这个模块的优势在于,它完全独⽴于控件操作,能够更贴近真实⽤户的⾏为模式。⽤于获取窗口或控件的主⽂本内容,通常是指窗口的标题或主要显示的⽂本。进⾏⾃动化测试时,我们通常会利⽤控件的点击⽅法来实现交互操作。
2026-02-24 09:31:27
488
原创 【GUI自动化测试】4.pywinauto_等待
提供了多种等待机制,本⽂重点介绍⼏种在实际应⽤中最为常⽤的等待⽅法,帮助⼤家快速掌握核心技巧,确保⾃动化流程的稳定性和可靠性。这些等待机制能够确保⾃动化脚本在执⾏时能够准确地识别⽬标控件或窗口,并在合适的时间点进⾏操作。中,提供了灵活多样的等待机制,⽤于处理⾃动化过程中常⻅的控件状态变化、窗口加载等问题。因此:窗口被最⼩化之后,在桌⾯就不可⻅了,因此最⼩化时需要将等待状态改为 “应⽤程序⾏为通常不稳定,脚本需要等待,直到出现新窗口或关闭/隐藏现有窗口。,那么就会报错,运行后点击使他可见,则不会报错。
2026-02-24 09:30:45
226
原创 【GUI自动化测试】3.pywinauto_窗口操作+定位控件
然⽽,在对控件进⾏操作之前,必须先完成控件的定位。通过合理的分类和说明,可以更清晰地理解控件的功能和⽤途,便于在GUI⾃动化测试中进⾏操作和定位。理解控件的分类、特性和层级关系,能够帮助测试⼈员更⾼效地定位和操作控件,实现⾃动化测试。控件是窗⼝功能的具体体现,包括按钮、⽂本框、列表等,对控件的操作是⾃动化任务的核⼼。窗⼝是所有控件的容器,只有成功定位到窗⼝,才能进⼀步操作窗⼝内的控件。在实际测试中,结合控件的属性和事件,可以编写灵活且可靠的测试脚本。进⾏⾃动化操作时,程序启动后,⾸先需要定位到⽬标窗⼝。
2026-02-24 09:29:55
619
原创 【GUI自动化测试】2.pywinauto_打开程序+定位窗口
注意:有的时候文件没保存没标题,这个时候输入的第一行会默认变成标题,导致标题名字的变化,正则表达式无法匹配。但是属性名与任何变量名都有相同的限制:没有空格、逗号和其他特殊符号,因此这是不推荐写法。这个方法和其他方法不太一样,这个相似值我们要选择规定的相似值而不是自己定义的相似值。这是⽬前相当未经测试的,所以不确定它会返回正确的窗口。测试受操作系统和软件版本影响很大,如果出现了,大概率是软件版本不一致导致的。有很多参数,有可能因为页面被收到任务栏导致不可见的报错。中最⾼的窗口,也不⼀定是我们想要的窗口。
2026-02-24 09:28:28
903
原创 【GUI自动化测试】1.pywinauto安装与介绍
UISpy是⼀款由微软提供的⼯具,专⻔⽤于UI⾃动化测试。它允许测试⼈员查看应⽤程序的UI⾃动化模型,包括控件树、属性和事件。UISpy特别适⽤于编写UI⾃动化脚本,因为它提供了⼀个可视化的界⾯来帮助测试⼈员选择UI元素,并且可以模拟⽤户对这些UI元素的操作。例如:我打开了一个记事本程序,然后打开这个工具,他自动识别到了这个记事本并出现在了app里面。是否还记得,我们在“pywinauto局限性”内容中还遗留了⼀个问题:“如何分辨是否能⽤pywinauto。
2026-02-24 09:27:01
853
原创 【接口自动化测试项目】10.⽣成测试报告并分析结果
饼图显⽰了测试的通过率为100%,这意味着所有30个测试⽤例都成功执⾏,没有失败的测试⽤例。共有34个测试⽤例,⾼测试⽤例总数通常表⽰测试覆盖范围⼴,能够更全⾯地验证接⼝功能。测试执⾏时间从16:08:34 - 16:08:36,总共耗时2秒514毫秒。通过优化测试脚本、并⾏执⾏和分布式测试环境,可以显著缩短测试时间。测试时间与测试⽤例数量成正⽐。⽤例数量越多,测试时间越⻓。低测试⽤例总数可能意味着测试覆盖不全⾯,存在遗漏的⻛险。通过率是衡量接⼝质量和测试效果的关键指标。然后终端执行pytest。
2026-01-31 16:42:23
196
原创 【接口自动化测试项目】9.指定用例顺序
pytest-order 是⼀个第三⽅插件,专⻔⽤于控制测试⽤例的执⾏顺序。⾸先,你需要安装这个插件。这些文件运行的顺序是乱序的,是按照cases文件夹里面的文件排列顺序来的,而不是文件的创建顺序。我们现在想要按照下面的次序执行:(3-6的顺序无所谓,但是1和2一定要最先执行)如果删除了使用了对应blogid的博客,那么可能会产生错误。
2026-01-31 16:41:31
73
原创 【接口自动化测试项目】4.配置yaml文件及列表页
yaml文件可以存放一些公共的数据,例如登录用户凭证user_token_header。若yaml文件中存在重复的字段,那么读取yaml文件时取的是最新的字段对应的值。
2026-01-31 16:37:05
57
原创 【接口自动化测试项目】3.配置登录测试用例
异常登录在正常登录前是为了防止已经正常登录后,正常登录的用户态会被异常登录重置,这个是有可能的(某些系统会这样)
2026-01-31 16:36:24
92
原创 【接口自动化测试项目】2.设计⾃动化测试项⽬架构
运行后会自动创建文件夹logs并生成三个日志文件,log文件存放所有级别文件,info_log存放INFO级别日志,err_log存放ERROR级别日志。技术栈:pytest框架、requests模块、PyYAML模块、jsonschema模块、allure-pytest模块、logging 模块。在已经下载了对应框架的代码仓库里创建一个文件:requirements.txt。重新创建代码,那么对应的框架代码还需要重新下载,有没有更简单的方法呢?日志文件可以按照日期分类,也可按照级别分割。
2026-01-31 16:35:07
348
原创 【接口自动化测试项目】1.博客系统需求接口分析
根据业务需求,明确接口需要实现的具体功能,如数据的获取、修改、删除等操作,以及接口的输⼊输出要求。针对接口设计测试用例,必须要按照完备接口文档来进行设计,除此之外,最好也能够看到接口对应的代码,查看接口存在的不同的相应,针对不同的相应来设计测试用例。理解业务需求,若是针对未参与的项⽬实施接口⾃动化,应与业务⼈员、产品经理等沟通,了解接口所⽀持的业务场景和业务逻辑。例如我有一个add接口,有很多的响应,cond1,cond2,cond3…进入postman,添加user_token_header,点击。
2026-01-31 16:34:21
1099
原创 9.测试报告allure + 指定用例顺序
由一个框架适配器和allure命令行工具组成,是一个流行的开源工具,用于可视化测试运行的结果。它可以以很少甚至零配置的方式添加到您的测试工作流中。它生成的报告可以在任何地方打开,并且任何人都可以阅读,无需深厚的技术知识.
2025-12-21 14:45:44
770
原创 8.logging日志模块
logging是Python标准库中的一个模块,它提供了灵活的日志记录功能。通过logging,开发者可以方便地将日志信息输出到控制台、文件、网络等多种目标,同时支持不同级别的日志记录,以满足不同场景下的需求。# 导入 Python 内置的日志模块# 配置根日志器的基本设置# level=logging.INFO: 设置 Handler(处理器)的最低输出级别为 INFO# 这是第一道过滤:Handler 只会处理 INFO 及以上级别的消息# 获取一个日志记录器对象。
2025-12-21 14:45:00
1147
原创 7.YAML和JSON Schema
YAML文件的后缀名是.yaml或.yml,本着能少写不多写的原则,我们常用的是.yml。yamlYAMLJSON简单标量值整数和浮点数布尔值字符串列表映射(字典)嵌套结构以上语法若短时间内无法掌握,我们也有很多工具可供使用,如json转yamlJson"code": {},},"data": {通过上面的对比可见,从多个方面对JSON数据进行校验。如“type”、“required”、“properties”等以确保其正确性和一致性。接下来我们来了解中的关键词以及作用。json。
2025-12-21 14:44:18
1148
原创 6.接口自动化测试(5)
文件中共享前后置操作,这种结合的方式使得可以在整个测试项目中定义和维护通用的前后置逻辑,使测试代码更加模块化和可维护。如果测试需要动态加载外部数据,或者需要管理复杂的测试资源(如数据库连接、文件操作等),建议使用。会在所有测试函数执行之前自动调用,无论这些测试函数是否显式地引用了该。如果测试场景主要涉及简单的参数传递,且不需要复杂的资源管理,建议使用。需要手动显示调用,在该案例之前我们默认使用的都是。,则在测试函数中需要使用这个名称来引用。,则每个测试函数都会自动调用该。,在某些情况下,也可以结合使用。
2025-12-20 20:02:33
803
原创 5.接口自动化测试(4)
当我们运行测试时,我们希望确保它们能够自我清理,以便它们不会干扰其他测试(同时也避免留下大量测试数据来膨胀系统)。系统,它允许我们将测试的复杂需求简化为更简单和有组织的函数,我们只需要每个函数描述它们所依赖的事物。参数化设计是自动化设计中的一个重要组成部分,它通过定义设计参数和规则,使得设计过程更加灵活和可控。是一种强大的机制,用于提供测试函数所需的资源或上下文。测试脚本中存在的很多重复的代码、公共的数据对象时,使用。,我们可以运行一些代码,并将对象返回给请求的。,它们可以依赖于自己想要的任意数量的。
2025-12-20 19:28:06
703
原创 4.接口自动化测试(3)
在测试框架中,前后置是指在执行测试用例前和测试用例后执行一些额外的操作,这些操作可以用于设置测试环境、准备测试数据等,以确保测试的可靠性。是一个非常流行且高效的Python测试框架,它提供了丰富的功能和灵活的用法,使得编写和运行测试用例变得简单而高效。安装成功后大概是上面这样,也可以检查一下是否安装成功,为了防止不同版本造成的误差,建议下载一样版本的。方法会被调用,这可能会掩盖测试类的实际测试逻辑,并引入额外的副作用,影响测试结果的准确性。结尾的方法作为测试用例。的测试收集机制,测试类中不可以定义。
2025-12-20 16:27:41
1146
原创 3.接口自动化测试(2)
requests库是一个非常流行的HTTP客户端库,用于发送HTTP请求。方法用于发送一个HTTP get请求到指定的URL方法返回一个Response对象,这个对象包含了服务器返回的所有信息。Response属性/方法描述响应状态码r.content字节方式的响应体,会自动解码gzip和deflate压缩r.headers以字典对象存储服务器响应头,若键不存在则返回None中内置的JSON解析方法,将响应体解析为JSON格式(如果响应结果为JSON格式,必须以JSON打印)r.url。
2025-12-20 16:26:53
660
原创 2.接口自动化测试(1)
例如,涉及多种支付方式、多种订单状态转换的订单管理接口,手动测试难以全面覆盖所有场景,自动化测试可以更高效地进行测试。分析请求:明确接口的URL、请求方法(如get、post、PUT、DELETE等)、请求头、请求参数和请求体等信息。例如,涉及资金操作的支付接口,一旦出现问题可能导致严重的经济损失,因此需要进行充分的自动化测试。例如,回归测试中的接口测试,自动化测试可以避免重复手动测试的繁琐和低效,提高测试效率。根据项目的时间、人员安排和接口的复杂度,挑选适合自动化测试的接口。
2025-12-08 21:47:46
880
原创 1.接口测试
其实接口测试很简单,比一般的功能测试还简单,因为功能测试是从页面输入值,然后通过点击按钮或链接等传值给后端,而且功能测试还要测UI、前端交互等功能,但接口测试没有页面,它是通过接口规范文档上的调用地址、请求参数,拼接报文,然后发送请求,检查返回结果,所以它只需测入参和出参就行了,相对来说简单了不少。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来。请求之后,都会有一个响应,http本身会有一个状态码,来标示这个请求是否成功,
2025-12-08 21:45:48
943
原创 【Qt】9.信号和槽_信号和槽存在的意义
Qt5在Qt4的基础上提高了信号与槽的灵活性,允许使用任意函数作为槽函数。但如果想方便的编写槽函数,比如在编写函数时连函数名都不想定义,则可以通过Lambda表达式 来达到这个目的。Lambda表达式 是C++11增加的特性。C++11中的Lambda表达式 用于定义并创建匿名的函数对象,以简化编程工作。Lambdacapture:捕获列表params:参数表opt:函数选项ret:返回值类型:函数体lambda被执行了!如果我们往lambda里面写move就会报错因为,lambda。
2025-10-16 23:19:38
1018
原创 【Qt】8.信号和槽_自定义信号和槽
Qt中也允许自定义信号:自定义槽函数,非常关键,开发中大部分情况都是需要自定义槽函数的槽函数,就是用户触发某个操作之后,要进行的业务逻辑自定义信号,比较少见,实际开发中很少会需要自定义信号。信号就对应到用户的某个操作。在GUI,用户能够进行哪些操作,是可以穷举的。Qt内置的信号,基本上已经覆盖到了上述所有可能的用户操作。因此,使用Qt内置的信号,就足以应付大部分的开发场景了。自定义信号,本身代码比较简单的。1、自定义信号函数书写规范自定义信号函数必须写到 “signals” 下;返回值为。
2025-10-16 23:18:53
640
原创 【Qt】7.信号和槽_connect函数用法(2)
如果你传入的第一个参数和第二个参数不匹配,或者第三个参数和第四个参数不匹配(不匹配指的是:2,4参数的函数指针,不是1,3参数的成员函数)这个函数声明,是以前l日版本的Qt的connect函数的声明,以前版本中,传参的写法和现在其实也是有区别的。提供了重载版本,重载版本中,第二个参数和第四个参数成了泛型参数,允许咱们传入任意类型的函数指针了。可以更清晰直观的描述信号和槽的连接关系,另一方面也防止信号或者槽的名字拼写错误导致连接失效。中调用这个函数的时候,就会触发上述自动连接信号槽的规则。
2025-10-16 23:17:54
690
原创 【Qt】7.信号和槽_connect函数用法(1)
信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时 Qt 对应的窗口类会发出某个信号,以此对用户的操作做出反应。中,一定是先关联号信号和槽,然后再触发这个信号,顺序不能颠倒,否则信号就不知道如何处理了(错过了)槽函数与一般的函数不同的是:槽函数可以与一个信号关联,当信号被发射时,关联的槽函数被自动执行。这样的函数,把一个信号和一个槽关联起来,后续只要信号触发了,信号的类型:用户进行不同的操作,就可能触发不同的信号。信号的呈现形式就是函数, 也就是说某个事件产生了,
2025-10-15 23:43:32
1056
原创 【Qt】6.Qt对象树
创建文件:mylabel.cpp点击下一步,下一步。可以看出Qt没有把头文件主动包含,我们要手动来添加。在Qt Creator中,可以通过F4切换头文件和对应的.cpp文件。创建自定义的类,最主要的目的,是自定义一个析构函数,在析构函数中,完成打印,方便咱们看到最终的自动销毁对象的效果。我们可以光标放到上,然后点击alt+enter,双击,就会自定义跳转到cpp文件并生成对应基本的析构函数。mylable.hwidget.cpp运行:关闭:日志,有。说明析构函数是执行了。虽然没有手动。
2025-10-15 23:42:43
873
原创 【Qt】4.项目文件解析
工程新建好之后,在工程目录列表中有一个后缀为 “.pro” 的文件, “.pro” 文件就是工程文件 (project) ,它是 qmake 自动生成的用于生产 makefile 的配置文件。如图所示:4widgetsQtCreatorqmakemakefileappmakefilelibmakefilevcappvclibsubdirsmakefilemakemakefileCONFIGqmake。
2025-10-15 23:41:16
938
原创 【Qt】3.认识 Qt Creator 界面
在编辑模式下,左边竖排的两个窗口叫做 “边栏”。① 是项目文件管理窗口,② 是打开文件列表窗口。在 QtCreator 菜单 “控件” -------> “Show Left Sidebar”,或者使用快捷键:“Alt + 0” 可以控制边栏的显示和隐藏。边栏里的窗口数目可以增加,边栏子窗口标题栏有一排小按钮,最右边的是关闭按钮,倒数第二个是增加分栏按钮,可以添加多个边栏子窗口。
2025-10-15 23:38:22
1558
原创 【Qt】2.创建第一个QT项目
从 开始菜单 或者 快捷方式 打开 Qt Creator 集成开发环境,启动之后看到类似下面的界面:①:菜单栏。菜单栏一共有 8 个菜单选项,包含了常用的功能菜单:②:模式选择③:构建套件选择器。构建套件选择器包含了目标选择器(Target selector)、运行按钮(Run)、调试按钮(Debug)和构建按钮(Building)四个图标。④:欢迎模式下的窗口工作方式。⑤:定位器。使用定位器来快速定位项目、文件、类、方法、帮助文档以及文件系统。可以使用过滤器来更加准确地定位要查找的结果。
2025-10-15 23:37:34
703
原创 【Qt】1.安装QT
Qt 下载官网:http://download.qt.io/archive/qt/进入官网,按如下图示进行相应的系统版本下载即可。1、打开官网链接,进入如下图示界面;2、选择需要下载的版本(需要科学上网)这里我选择的是:5.14.2先点击5.14,进去后选择5.14.2选择需要下载的版本为windows。
2025-10-15 23:36:53
713
原创 【C++算法】96.BFS解决拓扑排序_火星词典
用哈希表做的时候必须要初始化,遍历一下所有的字符串,每一个字符串找到一个字符后就要把对应的入度更新成0。这题的题意就是,给定外星的一堆词语,让我们来输出对应的字典序。就不能搞定了,需要在之前的双指针里面特殊处理一下。建图,这里不是数字了,用的是字符,可以用。和空比较不合法,直接返回。我们地球上的字典序是从。如何收集信息:用双指针。的,但是外星不一样。
2025-07-31 01:54:07
573
原创 【C++算法】94.BFS解决拓扑排序_课程表
判断能否完成学习 ,也就是问能否拓扑排序,是否有有向无环图,有向图中是否有环。每个顶点的入度可以用一个数组表示,数组里的数字就是入度。建图很关键,可以在下面的代码里面看到。主要是灵活的使用语言所使用的容器。根据算法流程,灵活建图。
2025-07-31 01:52:53
344
原创 【C++算法】93.BFS解决拓扑排序_拓扑排序简介
一开始的点都是入度为0的点,然后删除入度为0的点对应的边,然后一直重复过程直到结束。在有向无环图中,用顶点来表示一个活动,用边来表示活动的先后顺序的图结构。上面的就是有向无环图,下面就有环了,因为可以从4->5->6->4。找到做事情的先后顺序,拓扑排序的结果可能不是唯一的。入度:有几个顶点指向自己,入度就是几。出度:就是这个顶点有多少条边出去。详细概念可以自己网上找,比较繁琐。借助队列,来一次BFS即可。判断有向图中是否有环。
2025-07-31 01:52:11
316
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅