自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(608)
  • 收藏
  • 关注

原创 接口测试——postman生成测试报告

做完测试后,都会编写一份测试报告,测试报告中最主要的就是呈现出测试结果,哪些用例通过了,哪些用例没有通过。像postman这么强大的功能也可以自动生成报告,供我们测试同学进行查看,显得更加有B格~~~newmanNewman是一款基于nodejs开发的可以运行postman脚本的工具,使用Newman,可以直接从命令运行和测试postman集合。1、安装nodejs:选择自己系统相对应的版本内容进行下载,然后傻瓜式安装查看是否安装成功,打开cmd输入node -v2、安装newman:注意

2020-08-12 15:23:34 10154 16

原创 测试十年的前辈工作心得与经验分享

前言由于各种原因,大部分测试人员,最开始接触都是纯功能界面测试,随着工作年限,会接触到一些常用测试工具,比如抓包,数据库,linux等。长江后浪推前浪,前浪死在沙滩上”,曾经一句让人会心一笑的调侃,而今变成了软件测试行业的真实写照。由于软件测试行业入门门槛低,薪资报酬高,不断有新鲜血液冲刷着软件测试行业的“前行者”们,给我们带来了非常大的压力。那些入行几年,但是依然是功能测试的同学所面临的的压力可想而知。说到底,软件测试行业还是属于技术岗位。既然是技术岗位,那就要靠技术说话。不断掌握新的技能,提高软件

2020-07-24 14:29:33 3451 2

原创 搭建框架——你会吗?教你打造属于自己的测试框架。

1 接口测试接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。接口自动化相对于UI自动化来说,属于更底层的测试,这样带来的好处就是测试收益更大,且维护成本相对来说较低,是我们进行自动化测试的首选2 框架选型目前接口自动化的框架比较多,比如jmeter,就可以集接口自动化和性能测试于一体,该工具编写用例效率不高;还有我们常用的postman,结合newman也可以实现接口自动化;Python+unittest+requests+HTMLTestR

2020-07-01 21:19:12 1477

原创 Python 接口自动化常用方法封装

#!/usr/bin/env python# -*- coding:utf-8 -*-# *************************************# @Time : 2019/7/1# @Author : Zhang Fan# @Desc : RobotFramework Library# @File : MyKeyworks.py# @Update : 2019/8/23# *************************************

2020-12-09 15:33:23 1593

原创 RobotFramework - IF、FOR语句使用

一、IF 语句1.  IF语句简单实现Run Keyword If 1<2 Log  1111112.  IF语句赋值实现${rst} Set Variable If 1 < 2 2    13.  IF…ELSE实现${rst}   Run Keyword If   1 < 2      Set Variable  2...     ELSE         Set Variable  14.  IF语句嵌套实现${rst}

2020-12-09 15:31:37 4081 1

原创 Robot Framework 实现并行测试

Robot Framework 实现并行测试需要使用第三方库 Pabot,该库可以将一个执行分成多个以节省测试执行时间。安装: pip install -U robotframework-pabot命令行选项:pabot [--verbose|--testlevelsplit|--command .. --end-command| --processes num|--pabotlib|--pabotlibhost host|--pabotlibport port| --

2020-12-09 15:13:03 2475

原创 Cypress 之 URL访问

visit作用:访问一个远程URL。(建议:使用前设置 baseUrl)语法:cy.visit(url)cy.visit(url, options)cy.visit(options)使用:cy.visit('http://localhost:3000') // 产生远程页面的窗口参数: > url (String)要访问的URL。(如果你设置了baseUrl,将使用baseUrl配置的url作为前缀) > options (Object)传入一个o

2020-12-08 16:04:59 1241

原创 Linux之自动化部署

自动化部署git项目#!/bin/bash# 清除项目进程和历史文件pkill -f start.pysleep 1cd /root/automation |rm -rf testProduce/# 获取项目最新git代码(前提服务器配置好git账户)git clone [email protected]:test_code/testProduce.git# 启动项目cd testProduce/nohup /usr/python/bin/python3 start.py &

2020-12-08 15:34:04 939 1

原创 RobotFramework + HTTP接口自动化实现

一、 什么是自动化测试?1. 定义自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,也可以说是软件测试的一种技术手段。2. 常见工具 Appium: AppUI自动化测试,一个移动端自动化测试开源工具。 Selenium: WebUI自动化测试 ,一个用于Web应用程序测试的工具。 QTP : WebUI自动化测试,提供符合所有主要应用软件环境的功能测试和回归测试的自动化。 Robot: 多功能自动化测试,是一款python编写的功能

2020-12-08 14:42:24 740

原创 AirtestIDE详解(跨平台的UI自动化编辑器)

Airtest 是网易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。AirtestIDE 是一个跨平台、多端(Windows、web、android、ios、游戏)的UI自动化测试编辑器,支持自动化脚本录制、一键回放、报告查看。Game:通过图像识别和UI层次结构,支持所有游戏引擎和应用程序,使用方便Android:通过访问Android原生应用程序,可以发挥重要作用,即插即用IOS:通过poco可以访问iOS原生元素并找出它们的位置和属性,这使得iOS测试过程变得简单方便W

2020-12-08 14:05:04 1498 1

原创 Docker私有仓库搭建与界面化管理

一、关于Registry官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。从2.0版本开始就到在新代码库进行

2020-12-08 13:34:57 477

原创 Django实战总结 - 快速开发一个Web服务

一、简介Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 只要很少的代码就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务。Django 本身基于 MVC 模型,同时也是一个MTV模型 。Django的MTV 模式本质上和 MVC 是一样的,都是为了各组件间保持松耦合关系,只是定义上有些许不同。MVC分别是指:模型(Model)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM)。视图(View)- 图形界面,负

2020-12-07 20:01:33 1377

原创 Pytest自动化测试 - allure报告进阶

Allure除了具有Pytest基本状态外,其他几乎所有功能也都支持。1、严重性如果你想对测试用例进行严重等级划分,可以使用 @allure.severity 装饰器,它可以应用于函数,方法或整个类。它以 allure.severity_level 枚举值作为参数,分别为:BLOCKER(中断),CRITICAL(严重),NORMAL(常规),MINOR(轻微),TRIVIAL(不重要)。示例:# test_sample.pyimport allure# 两数相加def add(x, y

2020-12-07 19:19:47 403 1

原创 测试进阶之Docker实战总结

一、 Docker简介Docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。简单的理解,docker就是一个软件集装箱化平台,就像船只、火车、卡车运输集装箱而不论其内部的货物一样,软件容器充当软件部署的标准单元,其中可以包含不同的代码和依赖项。按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境,如果出现的故障,也可以通过镜像,快速恢复服务。二、 Docker优势1.  

2020-12-07 19:09:50 255

原创 详解MySQL---存储过程

一、概述1、什么是存储过程概述:简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;说明 :存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用。2、优点提高代码的重用性简化操作减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率二、delimiter命令讲存储过程先讲下delimiter命令。我们都知道sql语句默认都是以分号’;'解释。如果下select *

2020-12-05 19:16:08 253

原创 详解MySQL---变量

这里学习变量主要是为后面学习存储过程和函数做铺垫。变量的分类系统变量:全局变量会话变量自定义变量:用户变量局部变量一、系统变量1、概述说明:变量由系统定义,不是用户定义,属于服务器层面。注意:全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话级别。使用步骤:# 1、查看所有系统变量show global|【session】variables;# 2、查看满足条件的部分系统变量show global|【session】 variable

2020-12-05 15:50:07 219

原创 教你深入了解MySQL---锁

一概述数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制。MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定。MySQL大致可归纳为以下3种锁:表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。页面锁:开销和加锁时间界于表锁和行锁之间;会出现

2020-12-05 15:13:58 222

原创 详解MySQL--慢查询

简介开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。一、配置慢查询1、参数说明slow_query_log : 慢查询开启状态(默认关闭)slow_query_log_file : 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限, 一般设置为MySQL的数据存放目录)long_query_time : 查询超过多少秒才记录(默认10秒)2.查看慢查询相关参数show variables like 'slo

2020-12-05 14:40:30 279

原创 详解MySQL优化

一、单表、双表、三表优化1、单表首先结论就是,range类型查询字段后面的索引全都无效(1)建表create table if not exists article( id int primary key auto_increment, author_id int not null, category_id int not null, views int not null, comments int not null, title varchar(25

2020-12-05 14:28:07 259

原创 基于Redis组件的特性,实现一个分布式限流

场景 为了防止我们的接口被人恶意访问,比如有人通过JMeter工具频繁访问我们的接口,导致接口响应变慢甚至崩溃,所以我们需要对一些特定的接口进行IP限流,即一定时间内同一IP访问的次数是有限的。实现原理 用Redis作为限流组件的核心的原理,将用户的IP地址当Key,一段时间内访问次数为value,同时设置该Key过期时间。比如某接口设置相同IP10秒内请求5次,超过5次不让访问该接口。第一次该IP地址存入redis的时候,key值为IP地址,value值为1,设置key值过期时间为10秒。第二次

2020-12-05 14:12:19 356

原创 【JMeter】---HTTP压测

一、创建线程组右击–>添加–>Threads(Users)–>线程组下面对比较重要的几个参数,讲解下:名称: 就是给你这个线程组起名字。线程数:指压力测试时候模拟几个用户测试接口。Ramp-Up:这里指几秒运行完上面的模拟用户数。循环次数:指循环几次线程数。总的理解下:上面的意思是2秒内模拟5个用户请求API,循环2次。二、添加HTTP在线程组上右击–>添加–>Sampler–>HTTP请求@RequestMapping(value = "users

2020-12-05 13:49:30 441

原创 Shell学习之数组

常用的 Bash Shell 只支持一维数组,不支持多维数组。一、概念Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。Shell 数组元素的下标也是从 0 开始计数。1、Shell 数组的定义在 Shell 中,用括号( )来表示数组,数组元素之间用空格来分隔。由此,定义数组的一般形式为:array_name=(ele1 ele2 ele3 ... elen)注意,赋值号=两边不能有空格,必须紧挨着数组名和数组元素。下面是一个定义数组的实例:nums=(3 13 23

2020-12-04 15:39:39 378

原创 Shell学习之变量

一、shell变量1、定义变量Shell 支持以下三种定义变量的方式xub$ name=valuexub$ name='value'xub$ name="value"# name 是变量名,value 是赋给变量的值。区别如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。使用单引号和使用双引号也是有区别的 下面讲。注意 赋值号=的两边不能有空格。xub$ name="小小" #赋值xu

2020-12-04 15:24:48 249

原创 【linux】的常用命令整理

一、ls命令就是list的缩写,通过ls 命令不仅可以查看linux文件夹包含的文件,而且可以查看文件权限(包括目录、文件夹、文件权限)查看目录信息等等常用参数搭配:ls -a 列出目录所有文件,包含以.开始的隐藏文件ls -A 列出除.及…的其它文件ls -r 反序排列ls -t 以文件修改时间排序ls -S 以文件大小排序ls -l 除了文件名之外,还将文件的权限、所有者、文件大小等信息详细列出来(可以直接写成 ll)实例:ll name* #列出当前目录中所有以“nam

2020-12-04 14:52:38 274

原创 JMeter---MySQL压测

一、添加MySQL驱动jar包在测试计划(Test Plan)页面添加jar包二、添加MySQL连接配置添加线程组右击–>添加(add)–>配置元件(config element)–>JDBC connection configuration核心配置 variable name for created pool(已创建池的变量名称) Max Number of connections : 最大连接数 MAX wait :最大等待时间 Auto Commit: 是否自

2020-12-04 14:22:12 262

原创 一文搞懂MYSQL主从复制原理

一、概述1、什么是主从复制?概念 主从复制是用来建立一个和 主数据库完全一样的数据库环境称为从数据库;主数据库一般是准实时的业务数据库。2、主从复制作用我们来思考如果在企业网站中,后端MYSQL数据库只有一台时候,会有以下问题:1、单点故障服务不可用2、无法处理大量的并发数据请求3、数据丢失所以通过主从复制后,它的优点就很明显1、如果主节点出现故障,那么我们就直接将服务切到从节点,来保证服务立马可用。2、如果并发请求特别大的时候,我们可用进行读写分离操作,让主库负责写,从库负责读。3、

2020-12-04 14:11:26 13463 5

原创 测试进阶Mockserver之Moco框架搭建使用

客户要求进行完整的产品展示,人员和时间都有限,来不及开发后端服务。。。工期比较紧的项目,前端已开发完成,需要调试,后端接口还未开发完成。。。公司某个项目依赖于第三方服务,但是第三方服务不方便频繁调用。。。实际的工作当中,从商务到开发再到测试,经常会遇到上述所说的情况,如此的反复就造成了项目的进度受限,这被称为短板效应。此时,Moco框架可以很好的解决这些问题。一、MOCO简介Moco是基于Java开发的开源项目,是一个简单搭建模拟服务器的框架,可以模拟http、https、socket等协议。

2020-12-03 19:17:15 770

原创 Jenkins自动化部署项目-微服务下的持续集成

一、前言只从公司用了Jenkins后就很想写这个了,因为这个真真真的是太方便了,想起小农刚工作的时候,那个时候部署项目怎么部署呢?首先需要将对应的class文件和xml一个一个导出来,放到对应的包文件里面,有时候一不小心很有可能会导错,这个时候又要去重新拉一下对应的class文件,然后对比看有没有导入错误,是不是class文件,先停止对应的tomcat服务,然后放到服务器上,之后再启动tomcat,这个过程简直就是繁琐重复而且没有技术含量,为此公司还专门配置了一个做这个工作的运维人员,完全没有必要,这点工

2020-12-03 16:37:36 773

原创 Python __new__ 方法解释与使用

解释我们通常把__init__ 称为构造方法,这是从其他语言借鉴过来的术语。其实,用于构建实例的是特殊方法__new__:这是个类方法(使用特殊方式处理,因此不必使用 @classmethod 装饰器),必须返回一个实例。返回的实例会作为第一个参数(即 self)传给__init__ 方法。因为调用__init__方法时要传入实例,而且禁止返回任何值,所以 __init__方法其实是“初始化方法”。真正的构造方法是 __new__。我们几乎不需要自己编写__new__方法,因为从 object 类继

2020-12-03 15:24:02 348

原创 python 中 try...finally...

1. 关于 try… finally…要保证每个实例最后都要挂掉。代码可简写如下:try: born() # 出生 # 正常降临世界 # do something..except ValueError: # 安排错误 # do something...except AttributeError: # 特征错误 # do something...except TypeError: # 种类错误 # do somethi

2020-12-03 15:15:17 1320

原创 重构出优雅后台 API 接口

偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐的重复代码,使其开发更加优雅。展示具体重构代码之前,我们先来看下原先对外 API 接口是如何开发的。这个 API 接口主要是用来与我们 APP 交互,这个过程我们统一定义一个交互协议,APP 端与后台 API 接口统一都使用 JSON 格式。另外后台 API 接口对 APP 返回时,统一一些错误码,APP 端需要根据相应错误码,在页面弹出一些提示

2020-12-03 14:48:32 250

原创 基于Python+requests搭建的自动化框架-实现流程化的接口串联

上图:getpathInfo.py:获取autoapi文件夹所在的目录,便于项目换家,有没有其实无所谓的;import osdef get_path(): path = os.path.split(os.path.realpath(__file__))[0] return pathif __name__ == '__main__': print('测试路径是否OK,路径为:', get_path())readConfig.pyimport osimport

2020-12-02 15:34:15 604

原创 Mysql中几种sql的常见用法

mysql如何更新替换某一个字段中的特定字符串UPDATE t_bss_employeesSET mobilephone = REPLACE (mobilephone, "2129", "0000")WHERE id IN ( SELECT a.id FROM ( SELECT id FROM t_bss_employees WHERE mobilephone IN ( '18121299262', '

2020-12-02 14:58:21 187

原创 做统计用到的几个常用sql

计算同比SELECT old.now_time, ROUND( ( new.count - old.count ) / old.count * 100, 2 ), new.count ncount, old.count ocount FROM (SELECT sum( IF ( b.count > 1, 1, 1 ) ) count, b.now_time, b.tenant_code FROM ( SELECT date_format( ro.create_dt, '%

2020-12-02 14:50:38 287

原创 用python爬取抖音app视频

编程工具:pycharmapp抓包工具:mitmproxyapp自动化工具:appium运行环境:windows10思路:假设已经配置好我们所需要的工具1、使用mitmproxy对手机app抓包获取我们想要的内容2、利用appium自动化测试工具,驱动app模拟人的动作(滑动、点击等)3、将1和2相结合达到自动化爬虫的效果一、mitmproxy/mitmdump抓包确保已经安装好了mitmproxy,并且手机和PC处于同一个局域网下,同时也配置好了mitmproxy的CA证书,网上有很多

2020-12-02 14:21:00 870

原创 Python面向对象:封装和多态

一、封装封装是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。1、简单理解封装顾名思义,封装属性就是把已有的属性封装到一个类里面去:class Person(): def __init__(self, name, age, sex): self.name = name s

2020-12-02 14:08:32 243

原创 最流行的语言Python操作redis、MongoDB

一、操作redisredis是一个key-value存储系统,value的类型包括string(字符串),list(链表),set(集合),zset(有序集合),hash(哈希类型)。为了保证效率,数据都是缓冲在内存中,在处理大规模数据读写的场景下运用比较多。备注:默认redis有16个数据库,即db0~db15, 一般存取数据如果不指定库的话,默认都是存在db0中。resid提供2种连接方式:直接连接、连接池连接1、直接连接示例:import redis

2020-11-28 13:44:40 202

原创 最流行的Python合并2个字典成1个新字典的9种方法

d1 = {'name': 'revotu', 'age': 99}d2 = {'age': 24, 'sex': 'male'}输出:{'name': 'revotu', 'age': 24, 'sex': 'male'}# d = {}# d.update(d1) # 方法1,使用两次update方法向字典中添加元素# d.update(d2)# print(d)# d = d1.copy() # 方法2,先复制,后更新# d.upd

2020-11-28 13:37:18 583

原创 性能测试-JMeter资源监控插件PerfMon的使用

1、插件下载首先下载jmeter的插件管理工具,下载地址:jmeter-plugins.org如英文说明,把下载后的jar包放到jmeter的安装目录lib/ext文件夹下,重启jmeter,就会在jmeter的GUI上看到已经安装好的插件管理工具Plugins Manager。使用Plugins Manager安装PerfMon插件(我这个是已经安装好的,没有安装时,在Available Plugins中搜索安装)2、使用PerfMon插件2.1、监听器中添加PerfMon插件2.2、添

2020-11-28 13:35:43 541

原创 性能测试-JMeter内存溢出

一、问题原因用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。概念补充:内存泄露:应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源。内存溢出:应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致崩溃。通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。对JMete

2020-11-28 13:16:07 897 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除