软件测试
文章平均质量分 66
蜀山客e
这个作者很懒,什么都没留下…
展开
-
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 · 1701 阅读 · 0 评论 -
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 · 4337 阅读 · 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 · 2775 阅读 · 0 评论 -
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 · 1406 阅读 · 0 评论 -
Linux之自动化部署
自动化部署git项目#!/bin/bash# 清除项目进程和历史文件pkill -f start.pysleep 1cd /root/automation |rm -rf testProduce/# 获取项目最新git代码(前提服务器配置好git账户)git clone git@dev.test.com:test_code/testProduce.git# 启动项目cd testProduce/nohup /usr/python/bin/python3 start.py &原创 2020-12-08 15:34:04 · 1066 阅读 · 1 评论 -
RobotFramework + HTTP接口自动化实现
一、 什么是自动化测试?1. 定义自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程,也可以说是软件测试的一种技术手段。2. 常见工具 Appium: AppUI自动化测试,一个移动端自动化测试开源工具。 Selenium: WebUI自动化测试 ,一个用于Web应用程序测试的工具。 QTP : WebUI自动化测试,提供符合所有主要应用软件环境的功能测试和回归测试的自动化。 Robot: 多功能自动化测试,是一款python编写的功能原创 2020-12-08 14:42:24 · 817 阅读 · 0 评论 -
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 · 1651 阅读 · 1 评论 -
Docker私有仓库搭建与界面化管理
一、关于Registry官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去。但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像。这个可以通过开源软件Registry来达成目的。Registry在github上有两份代码:老代码库和新代码库。老代码是采用python编写的,存在pull和push的性能问题,出到0.9.1版本之后就标志为deprecated,不再继续开发。从2.0版本开始就到在新代码库进行原创 2020-12-08 13:34:57 · 563 阅读 · 0 评论 -
Django实战总结 - 快速开发一个Web服务
一、简介Django 是一个开放源代码的 Web 应用框架,由 Python 写成。Django 只要很少的代码就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的 Web 服务。Django 本身基于 MVC 模型,同时也是一个MTV模型 。Django的MTV 模式本质上和 MVC 是一样的,都是为了各组件间保持松耦合关系,只是定义上有些许不同。MVC分别是指:模型(Model)- 编写程序应有的功能,负责业务对象与数据库的映射(ORM)。视图(View)- 图形界面,负原创 2020-12-07 20:01:33 · 1598 阅读 · 0 评论 -
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 · 454 阅读 · 1 评论 -
测试进阶之Docker实战总结
一、 Docker简介Docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。简单的理解,docker就是一个软件集装箱化平台,就像船只、火车、卡车运输集装箱而不论其内部的货物一样,软件容器充当软件部署的标准单元,其中可以包含不同的代码和依赖项。按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境,如果出现的故障,也可以通过镜像,快速恢复服务。二、 Docker优势1.原创 2020-12-07 19:09:50 · 300 阅读 · 0 评论 -
详解MySQL---存储过程
一、概述1、什么是存储过程概述:简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;说明 :存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用。2、优点提高代码的重用性简化操作减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率二、delimiter命令讲存储过程先讲下delimiter命令。我们都知道sql语句默认都是以分号’;'解释。如果下select *原创 2020-12-05 19:16:08 · 301 阅读 · 0 评论 -
详解MySQL---变量
这里学习变量主要是为后面学习存储过程和函数做铺垫。变量的分类系统变量:全局变量会话变量自定义变量:用户变量局部变量一、系统变量1、概述说明:变量由系统定义,不是用户定义,属于服务器层面。注意:全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话级别。使用步骤:# 1、查看所有系统变量show global|【session】variables;# 2、查看满足条件的部分系统变量show global|【session】 variable原创 2020-12-05 15:50:07 · 260 阅读 · 0 评论 -
教你深入了解MySQL---锁
一概述数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制。MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定。MySQL大致可归纳为以下3种锁:表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。页面锁:开销和加锁时间界于表锁和行锁之间;会出现原创 2020-12-05 15:13:58 · 256 阅读 · 0 评论 -
详解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 · 324 阅读 · 0 评论 -
详解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 · 317 阅读 · 0 评论 -
【JMeter】---HTTP压测
一、创建线程组右击–>添加–>Threads(Users)–>线程组下面对比较重要的几个参数,讲解下:名称: 就是给你这个线程组起名字。线程数:指压力测试时候模拟几个用户测试接口。Ramp-Up:这里指几秒运行完上面的模拟用户数。循环次数:指循环几次线程数。总的理解下:上面的意思是2秒内模拟5个用户请求API,循环2次。二、添加HTTP在线程组上右击–>添加–>Sampler–>HTTP请求@RequestMapping(value = "users原创 2020-12-05 13:49:30 · 493 阅读 · 0 评论 -
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 · 444 阅读 · 0 评论 -
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 · 324 阅读 · 0 评论 -
【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 · 314 阅读 · 0 评论 -
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 · 293 阅读 · 0 评论 -
一文搞懂MYSQL主从复制原理
一、概述1、什么是主从复制?概念 主从复制是用来建立一个和 主数据库完全一样的数据库环境称为从数据库;主数据库一般是准实时的业务数据库。2、主从复制作用我们来思考如果在企业网站中,后端MYSQL数据库只有一台时候,会有以下问题:1、单点故障服务不可用2、无法处理大量的并发数据请求3、数据丢失所以通过主从复制后,它的优点就很明显1、如果主节点出现故障,那么我们就直接将服务切到从节点,来保证服务立马可用。2、如果并发请求特别大的时候,我们可用进行读写分离操作,让主库负责写,从库负责读。3、原创 2020-12-04 14:11:26 · 15366 阅读 · 5 评论 -
测试进阶Mockserver之Moco框架搭建使用
客户要求进行完整的产品展示,人员和时间都有限,来不及开发后端服务。。。工期比较紧的项目,前端已开发完成,需要调试,后端接口还未开发完成。。。公司某个项目依赖于第三方服务,但是第三方服务不方便频繁调用。。。实际的工作当中,从商务到开发再到测试,经常会遇到上述所说的情况,如此的反复就造成了项目的进度受限,这被称为短板效应。此时,Moco框架可以很好的解决这些问题。一、MOCO简介Moco是基于Java开发的开源项目,是一个简单搭建模拟服务器的框架,可以模拟http、https、socket等协议。原创 2020-12-03 19:17:15 · 841 阅读 · 0 评论 -
Jenkins自动化部署项目-微服务下的持续集成
一、前言只从公司用了Jenkins后就很想写这个了,因为这个真真真的是太方便了,想起小农刚工作的时候,那个时候部署项目怎么部署呢?首先需要将对应的class文件和xml一个一个导出来,放到对应的包文件里面,有时候一不小心很有可能会导错,这个时候又要去重新拉一下对应的class文件,然后对比看有没有导入错误,是不是class文件,先停止对应的tomcat服务,然后放到服务器上,之后再启动tomcat,这个过程简直就是繁琐重复而且没有技术含量,为此公司还专门配置了一个做这个工作的运维人员,完全没有必要,这点工原创 2020-12-03 16:37:36 · 818 阅读 · 0 评论 -
Python __new__ 方法解释与使用
解释我们通常把__init__ 称为构造方法,这是从其他语言借鉴过来的术语。其实,用于构建实例的是特殊方法__new__:这是个类方法(使用特殊方式处理,因此不必使用 @classmethod 装饰器),必须返回一个实例。返回的实例会作为第一个参数(即 self)传给__init__ 方法。因为调用__init__方法时要传入实例,而且禁止返回任何值,所以 __init__方法其实是“初始化方法”。真正的构造方法是 __new__。我们几乎不需要自己编写__new__方法,因为从 object 类继原创 2020-12-03 15:24:02 · 394 阅读 · 0 评论 -
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 · 1463 阅读 · 0 评论 -
重构出优雅后台 API 接口
偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐的重复代码,使其开发更加优雅。展示具体重构代码之前,我们先来看下原先对外 API 接口是如何开发的。这个 API 接口主要是用来与我们 APP 交互,这个过程我们统一定义一个交互协议,APP 端与后台 API 接口统一都使用 JSON 格式。另外后台 API 接口对 APP 返回时,统一一些错误码,APP 端需要根据相应错误码,在页面弹出一些提示原创 2020-12-03 14:48:32 · 298 阅读 · 0 评论 -
基于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 · 659 阅读 · 0 评论 -
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 · 219 阅读 · 0 评论 -
做统计用到的几个常用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 · 322 阅读 · 0 评论 -
用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 · 1043 阅读 · 0 评论 -
Python面向对象:封装和多态
一、封装封装是隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。1、简单理解封装顾名思义,封装属性就是把已有的属性封装到一个类里面去:class Person(): def __init__(self, name, age, sex): self.name = name s原创 2020-12-02 14:08:32 · 271 阅读 · 0 评论 -
最流行的语言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 · 256 阅读 · 0 评论 -
最流行的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 · 607 阅读 · 0 评论 -
性能测试-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 · 600 阅读 · 0 评论 -
性能测试-JMeter内存溢出
一、问题原因用JMeter压测,有时候当模拟并发请求较大或者脚本运行时间较长时,JMeter会停止,报OOM(内存溢出)错误。原因是JMeter是一个纯Java开发的工具,内存由java虚拟机JVM管理,当内存回收不及时,堆内存不足时,就会报内存溢错误。概念补充:内存泄露:应用使用资源之后没有及时释放,导致应用内存中持有了不需要的资源。内存溢出:应用的内存已经不能满足正常使用了,堆栈已经达到系统设置的最大值,进而导致崩溃。通常都是由于内存泄露导致堆栈内存不断增大,从而引发内存溢出。对JMete原创 2020-11-28 13:16:07 · 972 阅读 · 1 评论 -
性能测试-JMeter处理form-data类型的接口
最近的需求中,有的接口入参是form-data类型的,除了用python多进程代码进行压测,考虑用Jmeter试试看,比对一下结果。线程数设置的是50,循环次数为100,一共发送5000次请求。HTTP请求设置如下:如果有文件,在"Files Upload中"添加,MIME类型填入:application/octet-stream或者binary请求成功:希望本文对你有所帮助~~如果对软件测试、接口测试、自动化测试、面试经验交流感兴趣可以加入我们。642830685,免费领取最新软件测试大厂原创 2020-11-28 13:12:11 · 579 阅读 · 0 评论 -
Selenuim+Python之元素定位总结及实例说明
网页自动化最基本的要求就是要定位到各个元素,然后才能对该元素进行各种操作(输入,点击,清除,提交等),所以笔者今天来总结下Selenuim+Python最基本的几种定位方式及实例说明,希望能帮助到大家。以百度搜索输入框为例,具体说明各个定位方式的用法:(通过chrome浏览器查看元素或者搜狐浏览器的firebug查看,即可看到html源码)注意点:第三行的元素是灰色的,该元素是不可定位到的,下方会说明。<span class="bg s_ipt_wr quickdelete-wrap">原创 2020-11-27 14:53:10 · 433 阅读 · 0 评论 -
用python文件处理
在python中,文件其实就是对象。通过open()函数,打开文件,文件的属性包括读文件,写文件,关闭文件等.1.python文件打开方式1.1文件打开方法open(name[,access_mode=‘r’[,buffering=-1]])name:文件路径access_mode:打开方式,可选选项,默认以只读的方式打开。下方会详细介绍几种模式的区别。buffering:用于指示访问文件所采用的缓冲方式,可选选项,默认是使用系统默认缓冲机制。其中0表示不缓冲。1表示只缓冲一行数据,任何大于1的原创 2020-11-27 14:33:32 · 326 阅读 · 0 评论 -
接口自动化测试之requests库详解
由于web接口自动化测试需要用到python的第三方库–requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试。今天先来总结一下requests库的用法。希望对大家有帮助!目录1.GET请求1.1查看get函数的使用1.2 requests的get函数的入参说明1.3 requests函数的返回值(http响应)1.4举例说明1.5用fiddler查看抓包情况1.6 get请求总结2.POST请求2.1查看post函数的使用2.2原创 2020-11-27 14:17:52 · 565 阅读 · 0 评论