- 博客(51)
- 资源 (1)
- 收藏
- 关注
原创 selenium-多窗口和frame处理
一个窗口中不止一个页面,一个frame可以看做一个独立的页面,无法直接定位到frame中的元素,需要切换到frame,再进行定位,同样的,在frame中也无法定位到frame外的元素,需要先跳出frame才可以定位。适用场景:点击按钮后,重新打开一个窗口,想要在新的窗口定位操作,就需要切换窗口。注意:一个页面中可能存在多个frame;一个frame中可能嵌套frame。原理:获取窗口的唯一标识就是句柄,获取到句柄,就可以切换到对应的窗口了。
2023-07-19 21:00:00 1936
原创 selenium:鼠标模拟操作ActionChains
调用ActionChains的方法时,不会立即执行,而是将所有的操作,按顺序存放在一个队列里,当你调用perform()方法时,队列中的事件会依次执行。1.导入ActionChains包。
2023-07-17 21:30:00 661
原创 dockerfile的语法和指令
Dockerfile 是由一系列指令和参数构成的脚本,一个 Dockerfile 里面包含了构建整个镜像的完整命令。通过 docker build 执行 Dockerfile 中的一系列指令自动构建镜像。dockerfile是什么?
2023-06-27 20:45:00 464
原创 selenium\webdriver\remote\errorhandler.py:242: SessionNotCreatedException问题解决
尝试卸载Chrome,重新安装小版本Chrome 112(现有的chromedriver版本,根据报错来的)重新下载新版本的Chromedriver.exe,并放到对应的目录下,并修改环境变量,还是不行。通过报错信息可看出是Chrome浏览器版本和Chromedriver.exe 不兼容。考虑是Chrome版本太高了,没有匹配的diver。重新安装chrome 112版本后执行成功。最新的driver也无法执行成功。
2023-06-25 23:00:00 780
原创 Docker-compose的使用
Docker-compose 是用于定义和运行多容器的 Docker 应用程序的工具。可以使用YAML文件来配置应用程序的服务。(通俗讲是可以通过yml文件配置,批量运行多容器的docker应用程序)使用 Dockerfile 定义应用程序的环境,以便可以在任何地方复制它在docker-compose.yaml 中定义组成应用程序的服务,以便它们可以在隔离的环境中一起运行。运行 docker-compose up,然后compose 启动并运行整个应用程序。
2023-06-25 22:00:00 2391
原创 docker容器介绍及安装
Docker 起源于2013年。Docker 是一个开源的应用容器引擎,基于 Go语言开发,Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的系统。虚拟机容器概念。
2023-06-15 22:00:00 1255
原创 selenium:元素定位之xpath、css
在UI自动化测试中,xpath和css是依据html文档的路径进行定位,分为绝对路径和相对路径。1. 在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。元素定位是在做UI自动化测试中最重要的一环,要牢牢掌握定位的方法,才能更有效率的进行UI自动化测试。1)数字 例如: /html/body/div[4]/div[2]/div[2]2)last() 例如: /html/body/div[last()]2)@* 例如://title[@*]
2023-06-09 21:00:00 1909
原创 Prometheus+grafana+node_exporter环境搭建
node_exporter采集数据,Prometheus通过配置文件Prometheus.yml配置node_exporter信息获取采集到的数据并做展示,grafana将Prometheus作为数据源展示node_exporter采集到的数据。# systemctl start grafana-server #启动grafana-server。进入解压目录下,vi prometheus.yml,以示例的格式将node_exporter的信息填写好;
2023-05-30 21:00:00 757
原创 python3+pytest+requests+allure+yaml测试框架搭建
模块与模块之间接口的复杂程度尽量低,比如在类内部尽可能减少方法之间的调用,否则一个方法的变动会影响调用它的另一个方法。而是调用对应的数据文件、配置文件等。对于一些较通用的方法,可以封装,比如发送请求、log日志、公共方法(多个模块均需要调用此方法,可进行封装)。自动化测试框架思路均类似,可根据实际项目调整适配,根本思想是少改代码多适配,尽量修改数据文件、配置文件等。mode:封装接口最底层的内容,包括传参的参数、request的调用等。api:封装业务逻辑的处理,包括前后接口的处理,场景的处理等等。
2023-05-18 20:00:00 976
原创 selenium的三种等待方式
在selenium进行UI自动化测试时,由于网络等原因会出现元素还未出现就操作,进而出现报错的情况,为了避免这种情况的发生,可以使用等待。固定等待时长,即设置了多长时间,就一直等这么长时间,再进行下一步操作。设置一个等待时间,轮询查找元素是否出现,如果没出现就抛出异常。注意:隐式等待相当于是设置的全局等待,对所有的元素均起作用。默认都加上,时间不要太长。
2023-05-15 19:36:01 251
原创 selenium的安装及使用
3.将chromedriver.exe文件放到Chrome安装目录的application目录下。cmd打开命令框,输入pip install selenium。2. 下载Chromedriver.exe。三、使用selenium进行UI自动化测试。1. 查看Chrome浏览器版本。二、下载Chromedriver。2. pycharm 中安装。选择对应的版本下载即可。查看安装成功提示即可。运行成功即可正常使用。
2023-05-05 21:30:00 187
原创 jmeter压测结果分析
默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间。jmeter结果查看主要在结果树和聚合报告,实际在做压测过程中不做可视化操作,用命令行执行,再查看测试报告。表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户执行10次,总数就是100。3. 随着负载的增加,吞吐量应该增加,若吞吐量增加速度放缓,则表示系统可能已经达到了性能瓶颈。:90%/95%/99% 用户的响应时间。
2023-04-24 08:00:00 4257
原创 接口自动化测试框架-多环境运行
自动化测试用例,会在多个环境进行运行,例如:测试环境、开发环境、甚至生产环境,为了不用每次修改测试环境,可将环境信息通过yaml做数据驱动,每次只要修改yaml中信息即可。1. yaml文件中存储所有测试环境ip或域名,指定默认环境。2. 测试用例读取默认环境替代url中的域名,执行测试用例。3. 修改运行环境,只要修改默认环境即可。将url中域名用不同的测试环境替代。
2023-04-19 22:00:00 182
原创 TypeError: XXX missing 1 required positional argument: ‘self‘问题解决
1. 类和实例不同,类定义函数时默认有一个参数是self,self指的是实例本身,在调用类的函数时,没有实例化,就会提示要传self,实例化后self代表实例本身,就不需要传参,只需要传正常参数即可。2. self是使用惯例,也可以用其他值代替,一般用self。调用类的函数时,没有先对类进行实例化,直接调用,就会报错。先对类进行实例化,再调用实例的函数。
2023-04-19 14:33:12 4884
原创 pytest-fixture
工厂作为Fixture方法”模式可以在单个测试中多次需要Fixture方法结果的情况下提供帮助。不是直接返回数据,而是返回一个生成数据的函数。然后可以在测试中多次调用此函数。目的是为测试的重复执行提供一个可靠的固定基线。
2023-04-14 13:53:35 178
原创 pytest.mark
Pytest是python一个第三方测试框架,有非富的第三方插件可以扩展简单灵活,容易上⼿;⽀持参数化;能够⽀持简单的单元测试和复杂的功能测试,还可以⽤来做selenium/appium等⾃动化测试、接口⾃动化测试(pytest+requests);pytest具有很多第三⽅插件,并且可以⾃定义扩展, ⽐较好⽤的如 pytest-allure(完美html测试报告⽣成) pytest-xdist(并发执行测试用例)可以很好的和jenkins集成;
2023-04-13 19:59:14 650
原创 Jmeter前置处理器和后置处理器
(3)模板:⽤$$引⽤起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等, 表示解析到的第⼏个值给title。如:$1$表示解析到的第1个值。(1)引⽤名称:下⼀个请求要引⽤的参数名称,如填写title,则可⽤${title}引⽤它。本质上是⼀种对sampler发出请求后接受到的响应数据进⾏处理 (后处理)的⽅法。取第几个匹配结果,0随机,-1全部,1代表第一个,2代表第二个,....以此类推。(4)匹配数字:0代表随机取值,1代表全部取值,通常情况下填0。:存放提取出的值的参数。
2023-04-13 19:35:35 1928
原创 Jmeter定时器 Timer
Target throughput(in samples per minute):⽬标吞吐量。每分钟发送的请求数,如果要求20QPS,则需要设置120。Constant Delay Offset (milliseconds) 固定等待时⻓。3.Constant Throughput 定时器(吞吐量定时器)Deviations (milliseconds) ⾼斯定时器参数。思考时间:实际操作中,模拟真实⽤户在操作过程中的等待时间。⾼斯定时器参数+固定等待时⻓ = 总等待时长。设置40QPS查看聚合结果。
2023-04-13 16:37:09 103
原创 Jmeter控制器 Logic Controller
可以理解有个 counter ,每处理⼀个请求加 1 ,1 秒后 counter = QPS。TPS:每秒钟处理完的事务次数,⼀般TPS是对整个系统来讲 的。⼀个应⽤系统1s能完成多少事务处理,⼀个事务在分布式 处理中,可能会对应多个请求,用于衡量单个接⼝服务的处理。Module控制器正好与Include控制器相反,是通过测试计划内部调用的方式执行。满⾜条件执⾏其下的所某个⼦结点,可用于判断上个节点执行成功后再执行此节点。作⽤:指定其⼦节点运⾏的次数,可以使⽤具体的数值,也可以使⽤变量。
2023-04-13 16:35:07 160
原创 Jmeter原理
1. Pre-porcessors、Post-porcessors和Assirtions等元件仅对Sampler作用,如在它们作用域内没有任何Sampler,则不会被执行;Jmeter基本原理是建立一个线程池,多线程运行sample产生大量负载,在运行过程中通过断言来验证结果的正确性,可以通过监听来记录测试结果。GUI:图形用户界面运行模式,可视化,更加直观,方便实时查看运行状态,如测试结果、运行线程数等;非GUI:命令行模式,对负载机的资源消耗更小,GUI模式会影响负载量的生成。
2023-04-12 10:53:55 1021
原创 jenkins持续集成实战
3)配置git源码,注意设置验证,不设置的话构建时会报错ERROR: Error cloning remote repo 'origin'以上就是jenkins持续集成实战的所有内容了,如果在过程中遇到问题,看报错信息,预估排查方向,实在没有头绪,可以参考别人是怎么解决的。顾名思义,这个模块的配置是服务器工具的配置,如git,jdk,为了运行代码,预先工具的安装。H 8,10,12 * * * 每天的8点,10点,12点分别构建一次。第五颗*表示一周中的第几天,取值0~7,其中0和7代表的都是周日。
2023-03-29 22:30:00 366
原创 功能测试-测试流程
如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等。如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等。阻碍开发或测试工作的问题;阻碍开发或测试工作的问题;需求评审、整理测试计划和测试方案、需求分析提取测试用例(测试点)、等待提测、冒烟测试、一轮测试、二轮测试、三轮测试、回归测试、提交测试报告。
2023-03-28 21:45:00 624
原创 mysql数据库介绍及使用
将图书馆的书籍放在计算机系统中,银行的客户信息等保存在计算机系统中,使用时通过检索可以快速找到需要的信息。像这种将大量的数据保存起来,通过计算机加工而成的可以进行高效访问的数据集合称为数据库。
2023-03-27 21:30:00 233
原创 mysql数据库常用sql
用于从多条记录中收集数据,并将结果按一列或多列分组。通常用于 SELECT 语句中,可以在分组列上使用一些聚合函数,如 COUNT、SUM、MIN、MAX、AVG 等。注意:该语句仅复制表及其数据。它不会复制表的所有依赖对象,例如索引、触发器、主键约束、外键约束等。HAVING 子句与 GROUP BY 子句一起使用。删除全部数据时去掉where条件即可,例如delete from customers。使用场景:当我们想从表中删除整个数据而不删除表结构时,我们会使用此命令。一次性增加多列就多加几个add。
2023-03-27 21:00:00 83
原创 面向对象-多继承和mixin
使用时将mro打印出来可以看到继承顺序,若父类中有方法重复,则先继承谁,就调用谁的方法。在面向对象的设计中,一个复杂的类,往往需要很多功能,而这些功能有来自不同的类提供,这就需要很多的类组合在一起。
2023-02-15 13:39:02 259
原创 python线程-threading.local、定时器
python提供 threading.local 类,将这个类实例化得到一个全局对象,不同的线程使用这个对象存储的数据其他线程看不见。threading.Timer继承自Thread,用来定义多久执行一个函数
2022-12-13 21:45:00 212
原创 python线程-daemon线程和non-daemon线程
Python中,构造线程的时候,可以设置daemon属性,这个属性必须在start方法前设置好主线程是non-daemon线程,即daemon = False。
2022-12-13 11:50:01 991
原创 python线程-线程安全
print函数打印时分两步,第一步打印字符串,第二步打印换行符,在线程执行中,可能会把这两步分开,就造成连续打印两次及以上字符串,再连续打印2次及以上换行符,这就是线程不安全。执行一段代码,不会产品不确定的结果,就是线程安全。2. 使用日志处理模块logging。1. print不打印换行。
2022-12-12 21:00:00 437
原创 python-进程和线程
进程:一个程序的执行实例就是一个进程,表现为程序是源代码编译后的文件,而这些文件存放在磁盘上。当程序被操作系统加载到内存中,就是进程。进程中存放着指令和数据(资源),它也是线程的容器。进程( Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。Linux进程有父进程、子进程,Windows的进程是平等关系线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运行单位。线程,有时被称为轻量级进程
2022-12-08 12:02:39 1127
原创 python-异常处理
程序正确,但是在某些特殊情况下,导致程序无法正常的执行下去。例如open函数操作一个文件,文件不存在,或者创建一个文件时该文件已经存在了,或者访问一个网络文件,突然断网了,这就是异常
2022-12-02 20:15:00 738
原创 魔术方法4-描述器
Python中,一个类实现了__get__(),__set__(),__delete__()三个方法中的任何一个方法,就是描述器。同时实现了__get__(),__set__(),就是数据描述符 data descriptor。__delete__方法和__set__方法有同样的效果,有了这个方法,就是数据描述器
2022-12-01 12:02:04 71
原创 魔术方法3-反射
反射,reflection,指的是运行时获取类型定义信息。反射主要应用于类的对象上,在运行时,将对象中的属性和方法反射出来,通过字符串对对象成员(属性、方法)进行查找、获取、删除、添加成员等动作
2022-12-01 10:45:13 81
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人