- 博客(253)
- 资源 (5)
- 收藏
- 关注
原创 综合项目实战--jenkins流水线
软件生产环节,如:需求调研、需求设计、概要设计、详细设计、编码、单元测试、集成测试、系统测试、用户验收测试、交付等,这些流程就组成一条完整的流水线。脚本式流水线(pipeline)的出现代表企业人员可以更自由的通过代码来实现不同的工作流程。
2024-07-02 01:27:25 312
原创 综合项目实战--jenkins节点模式
DevOps是一种方法论,是一系列可以帮助开发者和运维人员在实现各自目标的前提下,向自己的客户或用户交付最大化价值及最高质量成果的基本原则和实践,能让。5)jenkins配置webhook,下载插件Generic Webhook Trigger。java8/java11 2.164
2024-06-26 00:20:29 272
原创 Web UI自动化测试--PO模式
PO(Page Object Model)页面对象模型,是自动化测试项目开发实践的最佳设计模式之一,相同的操作(但可能是不同的数据)带来的不同的结果可以封装成不同的方法。测试用例就是组合了1个或多个页面的方法,操作对应的元素,完成的测试。换句话来说,模块下的页面,页面中元素许多动作形成业务。业务层:上面2层的组合,并联合到一起形成某个业务动作,在页面中对若干元素操作后所实现的功能。(页面类的方法,也可以是多个页面的组台)操作层:对页面可见元素的操作。表现层:页面中可见的元素,都属于表现层。
2024-05-08 23:46:51 251
原创 Web UI自动化测试--selenium其他使用方法
通常来说,有2个原因你需要使用Grid。一是在多种浏览器,多种版本的浏览器,不同操作系统里的浏览器里执行你的测试,二是缩短完成测试的时间。user_data_dir的获取可以通过chrome://version得到,注意去掉尾部的default。对于select_by_visible_text的内容,注意不要把空格复制进去。本质上也可以用点击来完成,但selenium提供了API来操作,操作更加方便。select元素操作。
2024-04-28 01:21:21 418 2
原创 Kubernetes(k8s)架构原理
比如在服务器上部署一个博客应用服务,但是太过受欢迎,访问量太大,应用服务经常会挂,使用自动重启工具,并且将应用服务部署在了好几个服务器上,总算抗住了。后来又上线了商城应用服务和语言应用服务,随着应用服务变多,需求也千奇百怪,有的应用服务不希望被外网访问,有的应用服务要求内存大于多少g才能跑,所以每次都要登录到各个服务器上执行手动操作更新,不仅容易出错,还浪费时间,那么问题来了,有没有办法能解决这个问题?当然有,就是在服务器和应用服务之间加一个中间层,这次我们加的中间层叫kubernetes。
2024-03-31 19:17:32 1678 2
原创 Web UI自动化测试--元素操作
什么是web ui自动化测试1、通过代码来模拟人的手工操作,执行测试内容2、自动化是为了代替重复的手工操作,提高测试效率ui自动化的价值:1、回归速度的对比,以前进行全量回归测试需要x天,现在有没有减少2、负责功能测试的同事,是不是有更多的时间测试新需求了3、自动化测试不是为了发现bug,而是为手工测试节省回归时间ui自动化的原理(selenium与webdriver):selenium是一个用于web测试的工具,测试运行在浏览器当中,就像真的用户在操作浏览器一样,支持所有的主流浏览器;web
2024-03-17 15:53:30 277
原创 接口测试实战--gitlab容器化部署
2、修改/srv/gitlab/data/gitlab-rails/etc/gitlab.yml,找到关键字"Web server settings",将host的值改成映射的外部主机ip地址和端口,这里会显示在gitlab克隆地址。svn是集中式版本控制系统,版本库是集中放在中央服务器的,而开发人员工作的时候,用的都是自己的电脑,所有首先要从中央服务器下载最新的版本,然后开发,开发完后需要把自己开发的代码提交给中央服务器。从代码的私有性上来看,GitLab 是一个更好的选择;
2024-03-14 00:06:54 262
原创 接口测试实战--使用docker方案去部署jenkins并搭建接口自动化项目
下载gitlab、allure插件,下载完成重启jenkins生效(页面点击重启或者输入docker ps -a获取容器id,再输入输入docker restart 容器id重启jenkins容器)5)手动把项目代码直接通过xftp直接传递到/var/jenkins_node/workspace/autotest(后续采用gitlab方案)进入 Manage Jenkins----->Manage Plugin----->Advanced最下面有 Update Site 设置为。
2024-03-12 01:19:40 272
原创 接口测试实战--mock测试、日志模块
所以,当我们做接口测试的时候,如果后端某些接口还不成熟、所依赖的接口不稳定或者所依赖的接口为第三方接口、构造依赖的接口数据太复杂等问题时,我们可以用mock的方式先虚拟这些接口返回来代替,提高工作效率。这样用户在线等待的时间太长,给用户一种卡死了的感觉(就是系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉)。在前后端分离项目中,当后端工程师还没有完成接口开发的时候,前端开发工程师利用Mock技术,自己用mock技术先调用一个虚拟的接口,模拟接口返回的数据,来完成前端页面的开发。
2024-02-27 00:53:37 196
原创 接口测试实战--读取yaml用例
基本数据类型:字符串、整型、列表、null(可使用~表示)、布尔型、时间。4)变量的使用:一个数据后面被使用了很多次,一般定义一个变量去调用的。handle_yaml.py:读取yaml测试用例。缩进的空格数目不重要,只要相同层级的元素左对齐。handle_path.py:获取各种路径。缩进时不允许用tab键,只能使用空格。扩展:yaml文件里引用yaml文件。login.py:业务层----登录。test_login.py:测试脚本。3)yaml单引号与双引号的区别。baseApi.py:基类。
2024-02-25 23:19:53 99
原创 接口测试实战--Pytest测试框架
pytest是python第三方单元测试框架。完美兼容python自带unittest框架,支持丰富的插件。环境搭建pip install pytest - html # 查看是否安装成功 pip show pytest# @pytest.fixture(scope='module') # 装饰器,声明下面的函数是setup函数# scope='function' 默认级别,每个方法或函数都跑一次# scope='class' 每个类执行一次# scope='module' 每个模块执行一次。
2024-02-25 19:15:34 129
原创 接口测试实战--自动化测试流程
不差钱的,直接使用比较成熟的第三方;代码层级框架开发是对中小型创业型公司,既要培养人才,又要节省成本,还有就是个人自身能力培养,扩展性强,不过每个人编程能力和风格不一样,要着重代码的规范;请求头有User-Agent(客户端相关信息)、refer(告诉服务器请求是哪个页面发出来的,防盗链)、X-Requested-With(告诉服务器是一个ajax请求)、cookie、content-type(消息体数据类型)等;RSA加密:非对称加密,公钥加密/验签,私钥解密/签名,加密速度慢,安全。
2024-02-24 22:54:33 292
原创 Linux(Ubuntu)环境下安装卸载Python3(避免踩坑)
注:windows下,直接在C:\Users\XXX\AppData\Roaming\pip目录中找到一个pip目录(没有就新建),找到文件pip.ini(没有就新建)进入/usr/local/目录,下载Python3,这里我下载的是python 3.8.10,如果要下载其他版本改下链接中的版本号,需与官网版本号对应。配置下安装目录,安装到之前创建的目录/usr/local/python3,目的是下次想卸载python直接卸载该目录下的即可。pip版本需要和python版本对应,升级下最新版本解决。
2024-02-08 00:52:05 10801 14
原创 多线程与socket编程
tcp(语音聊天、视频聊天、线下缓存高强电影、qq远程控制、发邮件)死锁:A线程操作占用资源1没有释放,B线程再来操作资源1,造成死锁。发生在发送端:发送间隔短,数据短,由于优化机制就合并在一起发送了;发生在接收端:接收不及时,所以数据就在接收方的缓存端黏在一起了。粘包的本质:tcp协议的传输是流式传输,数据与数据之间没有边界。接收端先接受四字节,知道数据的长度,再按照长度接收数据。发送端先发送四字节数据长度,再按照长度发送数据。udp(在线播放视频、qq发消息、微信消息)2、tcp、udp特点。
2024-02-03 23:48:08 150
原创 编码处理与装饰器
数据在内存中全部是以Unicode编码的,但是当你的数据用于网络传输或者存储到硬盘,必须以非Unicode(utf8,gbk)可以使用chardet库,获取编码类型,一般爬虫使用requests库结合chardet可以识别网页编码类型。函数名可以被复制给其他变量,可以当做参数传递,可以作为返回值(非常重要!闭包:只发生在嵌套函数,内部函数对外部函数的非全局变量的引用(开放封闭原则)先了解几个概念:位(bit)、字节(byte)、字符、字符集、编码、解码。编码:密码本,二进制与文字的对应关系。
2024-02-03 22:10:31 99
原创 pytest框架
tips:选择pytest执行方式 settings->Tools->python integrated tools,选择default test runner。session级别,setup函数的代码是在conftest.py里,项目目录的所有文件一共执行一次。可以让测试数据参数化,把测试数据单独管理,类似ddt数据驱动作用,方便代码和测试数据分离。注意:前面./report是报告和数据的父目录,./report/report是报告目录。声明上面代码是setup用法,下面的代码是teardown的用法。
2024-01-12 21:47:51 357
原创 python之异常与日志
日志级别(从低到高):debug info warning error critical。关键字:try except else finally raise(手动抛异常)所有异常都是exception的子类或者子类的子类。使用读取配置文件模块。
2024-01-12 20:41:30 135
原创 python之面向对象
继承执行顺序:调用多个父类的同名方法时,按继承顺序进行调用(mro)一般来说,一个类可以生成任意个实例,单例模式只生成一个实例。私有方法、属性:前面加双下划线(外部不能调用,只能内部调用)判断方法或函数,可以用type(),也可以用inspect。父类对子类约束:抽象类,子类中必须实现和父类同名的方法。继承:完全继承,部分继承,父类方法扩展。类方法:@classmethod。所有的类都是object的子类。调用父类同名方法:super()3.实例方法、类方法、静态方法。多继承,一个类可以有多个父类。
2024-01-11 01:32:11 255
原创 pycharm的使用技巧
settings->editor->file and code templates,选择python script。settings->editor->inspections,选择python,取消勾选PEP 8 两个选项。settings->editor->live templates,在右侧点击+号,添加自定义的内容。settings->keymap,查询split关键字,找到分屏的图标,设置快捷键。6.设置快捷键----分屏。${NAME} 文件名。5.真实环境与虚拟环境。${DATE} 日期。
2024-01-10 00:48:25 681
原创 python第三方模块之yaml模块
PyYaml 5.1之后,通过禁止默认加载程序(FullLoader)执行任意功能,该load函数也变得更加安全。
2024-01-10 00:03:59 501
原创 Elasticsearch文档操作
他明处貌似还有俩老婆:家里红旗不倒,家外彩旗飘摇:注意:当执行命令时,如果数据不存在,则新增该条数据,如果数据存在则修改该条数据。咱们通过命令查询一下:结果如下:查询也没啥问题,但是你可能说了,人家老二是黄种人,怎么是黑的呢?好吧咱改改和:上例,我们仅修改了和两处,而、和三个属性没有变化,我们可以忽略不写吗?查查看:结果如下:哎呀,出事故了!修改是修改了,但结果不太理想啊,因为、和属性都没啦!注意:**命令,在做修改操作时,如果未指定其他的属性,则按照指定的属性进行修改操作。**也就是如上例
2023-11-20 22:38:38 424
原创 Elasticsearch安装
es插件是一种增强Elasticsearch核心功能的途径。它们可以为es添加自定义映射类型、自定义分词器、原生脚本、自伸缩等等扩展功能。es插件包含JAR文件,也可能包含脚本和配置文件,并且必须在集群中的每个节点上安装。安装之后,需要重启集群中的每个节点才能使插件生效。es插件包含核心插件和第三方插件两种。elasticsearch-head是elasticsearch的一款可视化工具,依赖于node.js ,所以需要先安装node.jsNode.js 就是运行在服务端的 JavaScript。
2023-11-12 00:33:47 582
原创 Elasticsearch倒排索引、索引操作、映射管理
在创建索引的时候,可以预先定义字段的类型及相关属性Es会根据Json数据源的基础类型,猜测你想要映射的字段,将输入的数据转变成可以搜索的索引项。Mapping是我们自己定义的字段数据类型,同时告诉es如何索引数据及是否可以被搜索作用:会让索引建立的更加细致和完善。
2023-11-11 23:20:24 640
原创 Elasticsearch--Python使用、Django/Flask集成
【代码】Elasticsearch--Python使用、Django/Flask集成。
2023-11-11 21:39:54 784
原创 Elasticsearch集群搭建、数据分片以及位置坐标实现附近的人搜索
脑裂这个词描述的是这样的一个场景:(通常是在重负荷或网络存在问题时)elasticsearch集群中一个或者多个节点失去和主节点的通信,然后各节点就开始选举新的主节点,继续处理请求。这个时候,可能有两个不同的集群在相互运行着,这就是脑裂一词的由来,因为单一集群被分成了两部分。为了防止这种情况的发生,我们就需要设置集群节点的总数,规则就是节点总数除以2再加一(半数以上)。这样,当一个或者多个节点失去通信,小老弟们就无法选举出新的主节点来形成新的集群。因为这些小老弟们无法满足设置的规则数量。
2023-10-31 23:52:56 640
原创 Elasticsearch删除映射类型
官方解释:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html在elasticsearch6.0.0或更高的版本中创建索引仅能包含单个映射类型。在具有多种映射类型的5.x版本中创建的索引将继续像以前一样在elasticsearch6.x中运行。类型将在elasticsearch7.0.0中的API中弃用,并在8.0.0中完全删除。
2023-10-31 23:36:29 490
原创 Elasticsearch打分机制
进一步说,仅仅以二元的方式来考虑文档和查询的匹配可能是有意义的,也就是百度搜索引擎返回了二元的匹配结果:是的,找到了 or 不,没找到!而需要xx才能访问的xx浏览器,在正确的给用户返回二元结果之前,更多的考虑文档的相关性(relevancy),因为就某个结果而言,如果A文档要比B文档更和结果相关,那么A文档在结果中就要比B文档靠前,再加上以其他的优化,最终将所有结果返回,而用户最期待的那条结果很可能排在最高位,岂不美哉?很显然,返回的结果中,尤其是前几条,有时甚至是前几页,都跟我们想要的结果相差深远!
2023-10-24 23:31:08 442
原创 Elasticsearch配置文件
在elasticsearch.yml,es相关的配置。jvm.options,Java jvm相关参数的配置。log4j2.properties,日志相关的配置,因为es采用了log4j的日志框架。这里以elasticsearch6.5.4版本为例,并且由于版本不同,配置也不太也一样,仅作参考!
2023-10-24 23:12:30 851
原创 Elasticsearch常见错误
如果选择动态创建一篇文档,映射关系取决于你添加的第一条文档的各字段都对应什么类型。很多时候,我们在查询文档时,一次查询结果很可能会有很多,而elasticsearch一次返回多少条结果,由。参数最大默认值到十万,这时,一次查询结果只要不超过10万就都会一次返回。中,添加一条数据时(此时,如果索引存在则直接新增或者更新文档,不存在则先创建索引),首先检查该。现在我们如果执行插入数据,就会报开始的错误。现在再查看该索引就正常了,也可以正常的插入数据和查询了。而该类型又不支持聚合,所以,就会报错了。
2023-10-24 22:57:25 677
原创 算法、语言混编、分布式锁与分布式ID、IO模型
信息安全:如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源(空间复杂度)和时间(时间复杂度)却会有很大的区别。数据结构和算法是程序的基石。我们使用的所有数据类型就是一种数据结构(数据的组织形式),写的程序逻辑就是算法。在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式锁,那具体什么是分布式锁?全局唯一性:不能出现重复的ID号,既然是唯一标识,这是最基本的要求。
2023-10-23 00:44:54 741
原创 快速上手Docker
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案,Docker的基础是Linux 容器(LXC)等技术。容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面上实现。与传统虚机相比,Docker优势体现为启动速度快、占用体积小。C/S架构软件,Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具以及一整套RESTful API。
2023-09-27 01:59:53 366
原创 Python操作Elasticsearch
由上例的配置可以看到,各节点有一个共同的名字my_es1,但由于是本地环境,所以各节点的名字不能一致,我们分别启动它们,它们通过单播列表相互介绍,发现彼此,然后组成一个my_es1集群。节点名称是node1,监听本地9200端口,可以有权限成为主节点和读写磁盘(不写就是默认的)。节点名称是node4,监听本地9204端口,仅能读写磁盘而不能被选举为主节点。节点名称是node2,监听本地9202端口,可以有权限成为主节点和读写磁盘。节点名称是node3,监听本地9203端口,可以有权限成为主节点和读写磁盘。
2023-09-25 00:24:08 1045
原创 分布式搜索引擎Elasticsearch
1.Elasticsearch产生背景大数据量的检索NoSql: not only sql,泛指非关系型的数据库Nginx的7层负载均衡和4层负载均衡2.Elasticsearch是什么一个基于Lucene的分布式搜索和分析引擎,一个开源的高扩展的分布式全文检索引擎Elasticsearch使用Java开发:需安装jdkApache:公司:开源协议在它的条款下开源很多主流的开源软件都捐献给Apache,让它维护顶级开源项目:Kafka,ES,Echarts。
2023-09-24 23:53:28 648
原创 SQLAlchemy快速使用
sqlalchemy是一个基于python实现的orm框架,跟web框架无关,独立的。同步orm框架:django的orm(3.0以后支持异步)、sqlalchemy(大而重)、peewee(小而轻、同步和异步)异步orm框架:GINO(国内)补充:1.微服务框架有哪些?python:nameko(python界没有一个特别好的微服务框架)java:dubbo(阿里开源)、springcloud2.django的orm原生sql怎么写?
2023-08-07 00:32:21 605
原创 python--local对象、flask上下文源码分析
背景:多线成并发操作一个变量,会导致数据错乱,可以使用互斥锁加锁处理数据不安全的情况 (临界区)解决:使用local对象处理,多个线程操作的变量是local对象,就不会有并发安全的问题。因为它处理了并发安全的问题---->请求统一放在一个大字典中,key值是线程id号,value是个字典。1.基本使用不使用local,多线程并发操作,数据错乱使用local2.自己写一个local类,线程和协程并发安全通过字典自定义threading.local(函数):使用面向对象:通过__setattr_
2023-08-02 02:06:32 810
原创 python--pipreqs的使用、函数与方法、偏函数
方法,你得看谁来调用,如果类调用对象的方法,它就变成了普通函数,就不是方法了。咱们写项目,项目的依赖:requirements.txt文件。方法是函数,但是它会自动传值,面向对象中概念。函数就是普通函数,不会自动传值。
2023-08-02 01:19:20 1593
原创 信号、flask-script、自定义命令的使用
使用了python的Local对象(java threadlocal),多个线程可以同时读写这个变量,并且不会有并发安全的问题---->不同线程操作的是自己的数据---->大字典---->key值为线程id号。悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。线程锁(线程级)---->分布式锁(应用级别):即分布式系统中的锁。使用同步锁---->修改数据之前先拿到---->开始修改---->释放锁---->别人再拿。
2023-07-20 01:22:59 276
原创 flask-session、数据库连接池、wtforms的使用
我们创建出连接池后,每次从池中获取连接使用,能够避免并发量过大,导致的数据库崩掉的危险。不会,python开的线程受GIL锁的限制,uwsgi用C写的,它开的5个线程不会只执行1个。异步框架:sanic,fastapi,只要被async装饰的函数,就是协程函数。一旦遇到IO,不释放cpu,就切换到别的任务上去了,造成一条线程很忙的样子。使用了第三方以后,用法跟之前一样,只是在项目启动是,执行一些代码。只要前后端混合的项目才用到,现在基本上都是前后端分离的,只作了解。9.用uwsgi会有GIL锁的限制吗?
2023-07-20 00:12:24 317 1
原创 flask路由、模板、请求与响应、闪现以及请求扩展
flask的路由基于装饰器---->在视图函数上再加装饰器---->加多个装饰器的执行顺序---->登录认证装饰器---->加载router下,先做路由匹配,匹配成功执行被auth包裹的视图函数。前端带着cookie再一次请求---->请求来的时候,反解出数据,再放到session中,这样你才能使用。4、endpoint如果不传,是None,也有个默认值---->函数的名字(了解)---->在请求走的时候把这个数据,加密,放到cookie中给了前端。flask的路由是基于装饰器的---->但是它的本质是。
2023-07-17 01:58:52 656
docker-compose部署python项目
2022-05-07
Docker-相关文件
2022-05-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人