- 博客(43)
- 收藏
- 关注
原创 Python 中的 Builder 模式实践 —— 以 UserProfileBuilder 为例
1、Builder模式(构造者模式)是一种创建型设计模式把“任何一步步创建对象”的逻辑抽离到一个Builder类里;让调用方用链式方法逐步设置属性;支持默认值、随机值、依赖值等灵活逻辑。可读性强灵活性高方便扩展和默认值处理。
2025-09-20 20:23:41
317
原创 web自动化随笔
2、ProductTable是表格类,传了行类给基类BaseRow。一、面向对象继承和表格行封装的常见设计模式。3、BaseTable逻辑。
2025-09-17 23:09:29
283
原创 AI自动生成接口测试脚本全流程
第一步:让大模型根据接口的json和补充需求,生成一份标准的接口需求文档#定义第一个节点#第二步:让大模型根据接口需求文档,生成一份接口测试用例#第三步:大模型根据接口测试用例,生成一份接口自动化脚本4、第四步:创建一个顺序链,把三个节点按照顺序组装起来#创建一个顺序链,把两个节点按照顺序组装#运行整个链。
2025-08-16 11:57:43
550
2
原创 LangChain框架概念及简单的使用案例
LangChain是一个强大的用于开发大模型应用程序的框架,为开发提供丰富的工具和组件,使得构造复杂的自然语言处理变得更加高效和便捷。它允许开发者将大语言模型与其他数据源工具集成,从而创建出能处理各种任务的智能体应用,如问答系统,聊天机器人,文本生成。模型(Models)在LangChain中,模型接口是与大语言模型进行交互的桥梁。它支持多种类型的模型,包含大语言模型(LLMs)和聊天模型(Chat Models)。提示词模板(PromptTemplates)
2025-08-03 11:07:13
346
原创 Dify接入第三方平台
base-url:Dify Service API 的地址,默认是 https://api.dify.ai/v1(因为我本地docker部署,所以写的是: https://host.docker.internal:/v1)借助LangBot,即可在短时间内将Dify接入到QQ,微信,飞书,钉钉,Telegram,Discorf等平台提供服务。base-url :Dify ervice API 的地址,默认是 https://api.dify.ai/v1 ,这是 Dify 官⽅云。重启langbot容器。
2025-08-02 18:41:41
706
原创 Dify知识库RAG
在大模型领域,知识库是指用于存储、组织和检索结构化或非结构化知识的系统,通常作为外部数据和大模型结合(如GPT、DeepSeek等)结合,以增强模型对专业领域或者实时信息的理解能力检索增强生成(Retrieval-Augmented Generation,RAG)是一种结合大语言模型(LLM)与外部知识库的技术目的为了解决大模型的“幻觉”问题、知识更新滞后及私域数据利用难题其核心流程分为三个阶段检索---重排序---生成,其中Embedding嵌入模型与Reranker重新排序模型是两大关键技术。
2025-08-02 11:32:15
899
原创 web自动化问题记录
select_input_locator是用来定位看起来像输入框,其实的下拉选择器的DOM元素,不推荐用input这个元素,推荐用外层的class它是 input 的外层包裹结构,点击稳定,几乎所有 Ant Design 下拉组件都适配。这里会遇到一个问题,会有很多下拉选项的伪输入框,每个伪输入框下拉出来的列表可能都不一样,需要先获取到每个下拉选项的输入框内容,我们才能进行选择,下面是实现获取下拉选项的内容。1、场景:输入框不可输入,点击后只能从固定下拉列表中选择,不能输入内容(纯选择型)
2025-07-26 15:40:00
185
原创 Dify实战,获取禅道需求,编写测试用例到禅道
2、docker_compose.yaml里面的镜像改成国内的镜像了,数据库ports:3306:3306,端口映射,需要先看下电脑本地的3306端口有没有被占用,如果占用,需要改一下。2、大模型解析自然语言,转成sql(执行sql、调用接口),因为y禅道页面不是通过调用接口的形式获取数据,所以需要执行sql。4、修改好之后,就可以进入文件夹的字段,输入docker compose up -d,启动禅道服务,本地通过。功能:连接数据库,执行查询类的sql,返回查询后的结果,json格式大模型比较任意理解。
2025-07-23 23:39:34
713
原创 Dify工作流实战
# json格式要求:直接把创建优惠券的接口入参放进来,每个参数给写数据,数据后面写你对这个参数的具体要求,比如,金额,用户没给具体金额,默认值就是100-----------交待对数据格式的要求,其他要求也可以写在里面。## 背景:用户提出需求,根据用户的需求生成具体的json数据-------------------------------交待一下这个工作流具体要做什么。# 角色:接口测试专家---------------这个目的是让大模型认识到你是以什么角度去执行任务。
2025-07-20 14:39:56
1368
原创 使用dify生成测试用例
七、在结束之前,我们可以添加一个http请求,开发一个接口,当然可以用ai进行开发,代码附上,开发好就可以运行,用postman测试一下,开发接口的提示词。结果的返回选择上一个大模型的返回,其实这个时候就可以看到测试用例了,但是是一个数组的形式,可以试运行一下。工作流和chatflow的区别就是能不能对话,如果需要对话就选择chatflow,不需要就选择工作流。选择需要的大模型,大模型设置里面的SYSTEM就是系统提示词,USER就是用户提示词,工作室--创建空白应用--创建工作流。
2025-07-14 22:19:43
1340
2
原创 Dify本地部署
dify是类似coze,也是一个智能体开发的平台,但是是开源的,开源部署到本地,适合部署到公司,在内网运行。3. 在docker-dify-0.15.3目录下,将 .env.example ⽂件复制⼀份,重命名为 .env。2. 将dify-main下的docker目录,重命名为: docker-dify-0.15.3。1、在设置里面配置docker镜像为国内下载地址,并重启docker-desktop。docker会自动下载dify所需要的镜像,并重启dify,要科学上网。Windows下载安装流程。
2025-07-13 13:08:30
632
原创 大模型本地部署
大模型是不能在本地运行,需要借助一些环境,ollama带着大模型本地运行环境,ollama就是一个大模型管理平台,有了ollama可以下载所有的开源的大模型,打开官方网站进行下载。创建API密钥,然后就可以在CherryStudio进行配置硅基流动了,见截图,用的时候不要选带pro的模型,因为带pro是要钱的,不能用赠送的token。创建API key,需要充值才可以用,设置好之后,可以通过第三方客户端(如:CherryStudio),配置API key访问。登录,点击左侧“开通管理”-“开通服务”
2025-07-13 11:37:57
1079
原创 解决Ollama下载太慢问题+Ollama安装部署
ollama默认会随windows自动启动,可以在文件资源管理器的地址中访问下面的地址,散出ollama.lnk快捷方式文件,阻止自动启动。在开始菜单中,找到ollama快捷⽅式,找到ollama.exe所在⽬录,并将该⽬录配置到系统环境变量。打开系统环境变量,新建⼀个系统变量OLLAMA_MODELS,然后设置ollama模型的存储路径。ollama的默认模型存储在C盘下面,建议存放在其它盘,否则太影响效率了。,进行搜索,点击下载就可以了,非常快,需要科学上网。变量名: OLLAMA_MODELS。
2025-07-09 23:14:30
2433
原创 shell基础学习
通过bash,sh执行,都是在当前shell中,打开一个子shell来执行脚本内容,当脚本内容结束,则子shell关闭,回到父shell中,使用在脚本路径前面加"."或source的方式,可以使脚本内容在当前shell里执行,而无需打开子shell,这也是为什么每次修改完/etc/profile文件之后,需要source一下的原因,打开子shell的区别在于,环境变量的继承关系,如在子shell中设置的当前变量,父shell是不可见的。二、Shell脚本入门。
2025-06-16 23:07:04
985
原创 常见的Linux命令
pwd(print working directory)打印当前目录的绝对路径。这个是一个常见的报错,命令实际上是交给bash脚本来运行。ls(list)列出目录内容。rmdir只能删除空目录。
2025-06-09 23:20:05
1006
原创 使用VMware克隆功能快速搭建集群
自己搭建的虚拟机,后续不管是学习java还是大数据,都需要集群,java需要分布式的微服务,大数据Hadoop的计算集群,如果从头开始搭建虚拟机会比较费时费力,这里分享一下如何使用克隆功能快速搭建一个集群。
2025-06-09 21:10:14
421
原创 虚拟机网络配置
首先要确定虚拟机能不能连上网,上上篇安装操作系统的时候,是打开对应的网络连接,打开虚拟机里面的浏览器,能正常使用就是可以连上网,然后查看网络设置。
2025-06-05 22:14:33
271
原创 Linux目录结构
linux里面一切皆文件,最常用的就是opt和home,使用的过程中会在run,srv,tmp,usr,var里面产生文件,除了这些外,还有一些不常用的,比如自定义了一些命令,需要放在bin/sbin里面,加了一些设备,需要用到media和mnt,修改了一些设置,会用到etc。boot,dev,lib,lib64,proc,sys这几个目录不要动。
2025-06-05 21:30:14
266
原创 新手小白使用VMware创建虚拟机安装Linux
解决办法:阿里开源镜像站:https://developer.aliyun.com/mirror/,使用阿里云镜像进行下载centos系统,阿里云:centos→下载地址→找到并点击“7/”→找到并点击“isos/”→“x86_64/”→找到4.4GB大小的镜像文件并点击开始下载,再安装截图操作就可以解决。新手小白想要练习linux,找不到合适的地方,可以先创建一个虚拟机,在自己创建的虚拟机里面进行练习,接下来我给大家接受一下创建虚拟机的步骤。硬件兼容性选择第一个,不同的版本,对应不同的硬件配置。
2025-06-03 22:49:30
556
原创 selenium用例执行过程采集操作形成测试报告上的回复
在代码执行的过程中不断的进行截图,把截图拼接成gif动态图,放在测试报告上。1、每条用例执行启动一个线程,这个线程会每隔0.3秒进行截图。
2025-03-03 22:46:38
883
原创 selenium grid分布式
selenium grid环境在很多实体电脑上可以实现,如果我们没有那么多电脑,就需要利用docker来完成selenium grid环境搭建。
2025-03-03 22:37:17
414
原创 Web自动化中多浏览器并发
1、当自动化用例比较多时,执行需要很长时间,为了提高执行效率可以将用例分配到多个浏览器执行。2、兼容性测试,在多个不同的浏览器上执行自动化用例,测试这些用例在不同浏览器上是否正常。2、执行用例的时候,框架需要知道执行哪些浏览器。1、使用pytest-xdist插件。
2025-03-03 22:04:02
697
原创 web框架封装
元素信息进行单独统一管理,而表示吧他们直接写在代码中,因此我们在框架创建一个pagefiles的目录,这个目录主要是用来管理元素信息,在这个目录下创建一个buyer.yaml文件,用来存放卖家相关的元素信息,文件填写的规则如下。核心思想是将一个页面封装成独立对象,这个对象蕴含了该页面常见的核心元素操作,在测试用例层根据业务流程,组装不同的页面对象来实现自动化操作,并完成断言。在整个测试中,只需要打开一次浏览器,登录也只需要登录一次就行,在conftest里面完成。二、搭建po模式的框架。
2024-12-15 19:35:02
1111
原创 UI自动化练习
1、添加成功,页面会出现保存成功的提示,只会保留几秒,对于这种一闪而过的提示,可以叫做toast,不要试图定位它,它消失之后代码就会报错,可以判断整个页面源码是否包含提示语即可。思路:遍历所有窗口,把driver切换到各个窗口,判断页面是不是我们的目标页面,如果是就停止切换,不是就继续切换。2、打开多个窗口的时候,窗口排序不能确定,不能确定具体切换到第几个窗口,可以根据窗口特性进行切换。3、以页面特有的元素作为断言,比如交易成功,页面会出现交易号,也可以封装成方法。1、打开一个窗口,可以按照索引进行切换。
2024-12-12 16:52:13
291
原创 web自动化中的文件上传和iframe处理
1、例如修改头像这种操作,点击完修改之后,会进入操作系统的页面,选择目标文件,然后点击打开,才会回到网站,进入操作系统这个步骤,我们可以通过上传文件路径来代替。按照iframe标签的name或者id的属性值进行切换,如果这两个值是动态变化的就不能用这种方式了。由于目标元素不在一个iframe标签中,因此我们需要完成iframe切换,再去定位元素信息,有三种切换方式。把iframe当作一个普通元素进行定位,然后再把driver切换到这个iframe标签上。2、切换回原来的iframe标签。
2024-08-11 22:02:39
243
原创 web自动化中,把选填的输入框改成编辑的输入框,执行js
在测试过程中碰到选填的输入框,如果通定位元素,然后点击选填的方式进行操作,会很麻烦,所有我们可以通过修改js的方式,把选填的输入框改成可以编辑的输入框。4、输入时间的浮层会出现,会挡住保存按钮,所有在保存之前我们需要把让浮臣消失,点击键盘的回车收起浮层。5、进行断言,断言成功中文是否包含在当前页面的源码中。1、调用js删除生日输入框的readonly属性。三、判断一段文字是不是包含在页面源码中。二、我们可以通过开发者助手来进行调试。3、定位生日输入框,然后清空内容。
2024-08-10 23:34:10
311
原创 web自动化中的等待
隐式等待主要针对元素定位,在定位时,10秒内找到才会报错如果第三秒找到,那剩下的7秒是不会等待的,代码会继续往下运行隐式等待是全局性的设置,可以随时更改,更改后对更改后的元素生效针对点击,输入,悬浮等动作一概无效。
2024-08-10 23:22:53
246
原创 web自动化中的窗口操作
2、当窗口比较多,或者系统打开窗口的顺序不能确定时,我们可以对窗口进行遍历,根据目标窗口的特性进行切换。比如窗口的title,url地址,特定元素等。Selenium中,每个窗口都有自己的唯一标识,叫做句柄,我们可以通过句柄进行窗口切换。在测试的过程中时常会打开很多窗口,当我们需要在新窗口操作时,就需要对窗口进行切换,在。通知Selenium Grid浏览器不可用,以便其他会话可以使用。1、获取所有窗口句柄,然后根据窗口顺序进行切换。关闭与该WebDriver会话关联的所有窗口。三、会话结束,退出浏览器。
2024-08-07 11:15:48
373
原创 selenium css定位
表达式:meta[name="referrer"][content="always"]含义:定位name属性为referrer的meta标签的元素。含义:定位class属性为c-menu-fold的元素。含义:以text开头的type属性的script元素。表达式:meta[name="referrer"]表达式:script[type^="text"]含义:以pt结尾的type属性的script元素。表达式:script[type$="pt"]表达式:script[type*="sc"]
2024-08-07 10:32:33
977
原创 Pytest的环境切换
在公司可能存在多套环境,每个环境对应的数据库,redis,域名,用户都不太一样,尽管有配置文件,但是手动改起来也比较麻烦,我们希望在框架层面执行时,只需要指定执行的环境名称即可,他能够自动将各个环境信息切换到当前执行中来。
2024-07-23 22:51:20
508
原创 Pytest框架中公共基本信息配置文件抽取
公共基本信息比如卖家,买家,管理员,验证码等基本信息,数据库,redis,各个服务对应的域名,如果写在代码里面,要修改起来会比较麻烦,为了能够更好的维护他们,我们将他们放入配置文件中进行管理。
2024-07-23 22:22:24
329
原创 接口自动化并发执行,多进程
~~指定分配机制对于pytest-xdist来说,还有一个参数叫做--dist,可以指定多个进程并发时测试用例分配的维度,默认分配是按照用例,如果用例之间存在关联,他们没有被分配到同 一个进程,必然会失败,因此我们设计用例时,将有关联的用例放在同一个测试文件中,并且将分配机制改成按照测试文件进行分配,当多进程并发时,指定--dist==each,执行完成后测试报告的用例数量不对,比如一共10条用例,两个进程执行测试报告里面就应该有20条用例的数据,但是测试报告上面依然是10条。
2024-07-22 23:19:51
1106
原创 复杂接口参数数据参数化处理
4、设计封装一个方法,使用jsonpath来完成数据替换,通过第三步的jsonpath表达式匹配到第二步默认参数目标,并且把新的值替换到默认参数中去,完成测试数据替换。json_object是json数据,json_path是要改数据的jsonpath,new_value是要改的数据。一、在接口调用的时候,参数化遇到复杂json,如果把每个参数当成独立列来对待,数据比较多,维护起来比较复杂。3、在数据文件中只维护用例对应的目标参数即可参数格式是{"$.goods_name":""}所以我们设计一个方法。
2024-07-21 12:53:50
451
原创 使用Excel和Yaml实现数据驱动
如果测试用例和real_excel不在同一个包下,会报错数据文件找不到FileNotFoundError,这个问题是因为如果操作文件传入的是相对路径,那么python在执行的时候会根据执行文件所在的路径去找,很多时候找不到所以我们要想办法传绝对路径,不管在哪里执行都能找到,但是绝对路劲也不能写死,所以需要设计一个文件管理的角色,帮助管理框架中的数据及配置文件的绝对路径。3、用例里面调用real_excel来获取excel里面的数据,读取出来的数据是列表嵌套列表的形式,是符合数据驱动的要求的。
2024-07-16 23:32:05
632
原创 mysql在自动化测试中的运用
cursorclass=pymysql.cursors.DictCursor # 这个参数的意思是把得到的数据当做一个字典。cursorclass=pymysql.cursors.DictCursor #这个参数的意思是把得到的数据当做一个字典。self.connect.commit() #提交事务,如果不提交,下次查询查出的就是新数据。#这个游标对象会将当前数据库的结果集进行存储,后续的操作都在这个结果集上操作。#得到的res是列表嵌套字典的形式,每个字典就代表每行数据。
2024-07-14 21:10:47
844
1
原创 redis在自动化测试中的运用
需要先定义一个类,初始化方法是对连接进行定义,再定一个方法对redis进行操作,练习的项目是把java对象做了序列化存储后的数据,需要借助第三方库转成python中的对象,才能进行解析,javaobj-py3。#订单确认参数存储在redis数据库里面的是一个hash,对应python里面的字典,所以我们可以通过遍历的方式拿到里面的数据。redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合)设置值:set name dawei。
2024-07-14 18:11:40
1076
原创 python面向对象
面向对象里面有两个重要的概念,类、对象,Plane是类,Plane(sn="001")是对象,类的定义里面self就代表对象本身。# 这就是根据类去创造一个对象,Plane()这是创造的过程,然后将创造的对象赋值给plane1这个变量。#对于每个对象都有的属性和行为,并且大家都不相干,此时属性和行为就需要采用实例属性和实例方法来定义。#当前类所有代表的事物,公共的行为,但是这个行为又不会因为对象的改变而改变,那么就采用类方法来定义。#针对对象的行为动作,定义成方法,self代表对象本身。
2024-01-18 23:49:28
720
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅