自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小吴的笔记本

学无止境

  • 博客(36)
  • 收藏
  • 关注

原创 规避pytest失败用例重跑时,重新执行conftest.py文件中的夹具函数的方法

UI自动化,规避失败用例重跑时会执行conftest中夹具函数(类级别以上)的方法比如:该夹具函数会前置生成driver,后置关闭driver

2022-09-01 14:52:50 631 2

原创 python并发编程

一、相关概念引入多任务: 操作系统可以同时进行多个任务。例如:你一边在使用浏览器上网,一边在听MP3,一边在用word赶作业,这就是多任务。多核CPU已经非常普及了,但是,即使过去的单核CPU,也可以执行多任务。由于CPU执行代码都是顺序执行的,那么,单核CPU是怎么执行多任务的呢?操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就

2021-10-24 22:37:40 227

原创 Django框架基础(五)数据库

一、数据库配置以配置mysql数据库为类1.使用MySQL数据库首先需要安装驱动程序pip install PyMySQL2.在Django的工程同名子目录的__init__.py文件中添加如下语句#作用是让Django的ORM能以mysqldb的方式来调用PyMySQLfrom pymysql import install_as_MySQLdbinstall_as_MySQLdb()3.修改DATABASES配置信息DATABASES = { 'default': {

2021-10-20 12:47:22 285

原创 mysql数据库DML语句汇总

一、库的管理1.创建数据库CREATE DATABASE 数据库名CREATE DATABASE IF NOT EXISTS 数据库名2.删除数据库DROP DATABASE 数据库名DROP DATABASE IF EXISTS 数据库名二、表的管理1.创建表数据类型:整型(TINYINT SMALLINT INT BIGINT )、浮点型(FLOAT,DOUBLE,DECIMAL)字符型(CHAR、VARCHAR、TEXT)、日期型(DATE TIME DATETIME TIM

2021-10-17 20:29:16 347

原创 测试基础总结

一、软件开发过程中的方法和目的瀑布模型(V,W)V:软件概念–用户需求分析–架构设计–详细设计-编码-测试-系统维护特点:严格按照线性方式进行各阶段具有里程碑特征基于文档的驱动,严格的阶段评审机制优点:有利于大型软件开发过程的人员的组织和管理有利于 开发方法和工具的使用提高了软件的质量和效率缺点:各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量线性,不可逆,用户只有等到整个过期末期才见到成果,会增加开发的风险早期错误后期测试阶段才发现,带来严重的后果需求不明确

2021-10-12 23:52:07 109

原创 Django框架基础(四)类视图和中间件

一、类视图1.使用类视图可以将视图对应的不同请求方式以类中的不同方法来区别定义。如下所示:from django.views.generic import Viewclass RegisterView(View): """类视图:处理注册""" def get(self, request): """处理GET请求,返回注册页面""" return render(request, 'register.html') def post(self,

2021-10-12 22:22:30 93

原创 Django框架基础(三)

一、django请求request1.路径参数未命名参数按定义顺序传递, 如:url(r'^weather/([a-z]+)/(\d{4})/$', views.weather),def weather(request, city, year): print('city=%s' % city) print('year=%s' % year) return HttpResponse('OK')命名参数按名字传递,如:url(r'^weather/(?P<city&

2021-10-08 21:34:02 119

原创 Django框架基础(二)

一、django配置文件1.当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))2.调试模式,创建工程后初始值为True,即默认工作在调试模式下作用:    修改代码文件,程序自动重启    Django程序出现异常时,向前端显示详细的

2021-10-08 20:17:29 65

原创 Django框架基础(一)

一、工程搭建1.创建工程:django-admin startproject 工程名称2.工程目录说明settings.py 是项目的整体配置文件urls.py 是项目的URL配置文件wsgi.py 是项目与WSGI兼容的Web服务器入口manage.py 是项目管理文件,通过它管理项目3.运行服务python manage.py runserver ip:端口默认为8080端口4.创建子应用python manage.py startapp 子应用名称admin.py 文件跟网站

2021-10-08 19:48:44 83

原创 django 创建定时任务

一、导入应用:安装安装 django_celery_results django_celery_beat并且在setting文件中注册这两个应用INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'djan

2021-10-08 12:56:08 363

原创 Django迁移数据库文件

一、生成数据库文件1.Django生成迁移文件的时候,默认是对全局的(有几个models,就生成几个应用的迁移)生成全局的迁移文件:python manage.py makemigraions生成全局的迁移python manage.py migrate2.如果只对部分APP生成迁移的话,则执行如下命令:python manage.py makemigraions appnamepython manage.py migrate appname或将指定的迁移文件执行到指定的数据库中

2021-10-08 11:01:03 1299

原创 shell编程(四)脚本实例

例1:判断两台主机是否ping通#!/bin/env bash# 该脚本用于判断当前主机是否和远程指定主机互通# 交互式定义变量,让用户自己决定ping哪个主机read -p "请输入你要ping的主机的IP:" ip# 使用ping程序判断主机是否互通ping -c1 $ip &>/dev/nullif [ $? -eq 0 ];then echo "当前主机和远程主机$ip是互通的" else echo "当前主机和远程主机$ip不通的"fi逻

2021-09-22 23:15:23 241

原创 shell编程(三)循环

一、for循环1.列表循环for variable in {list} do command command … done或者for variable in a b c do command command done2.不带列表循环for variable do command command …

2021-09-22 22:51:10 62

原创 shell编程(二)条件变量和流程控制

一、条件判断1、语法格式格式1:test 条件表达式格式2: [ 条件表达式 ]格式3:[[ 条件表达式 ]]2.判断类型    1)判断文件类型参数含义-e判断文件是否存在-d判断文件目录是否存在-s判断文件是否存在且是一个非空文件-p判断文件是否存在,并且是个命名管道文件-b判断文件是否存在,并且是个块设备文件-L判断文件是否存在,并且是个软连接文件-f判断文件是否存在,且是普通文

2021-09-22 22:38:39 112

原创 mysql-储存过程之流程控制结构

一、分支结构if函数语法:if(条件,值1,值2)功能:实现双分支应用在begin end中或外面case结构语法:情况1:类似于switchcase 变量或表达式when 值1 then 语句1;when 值2 then 语句2;…else 语句n;end情况2:casewhen 条件1 then 语句1;when 条件2 then 语句2;…else 语句n;end应用在begin end 中或外面if结构语法:if 条件1 then 语句1;elsei

2021-09-22 22:01:59 97

原创 mysql-函数

一、函数的介绍含义:一组预先编译好的SQL语句的集合,理解成批处理语句1、提高代码的重用性2、简化操作3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率区别:存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新函数:有且仅有1 个返回,适合做处理数据后返回一个结果二、函数的创建一、创建语法CREATE FUNCTION 函数名(参数列表) RETURNS 返回类型BEGIN 函数体END注意:1.参数列表 包含两部分:参数名 参数类型2.函数

2021-09-22 21:42:12 66

原创 mysql-存储过程

一、存储过程含义:一组预先编译好的SQL语句的集合,理解成批处理语句1、提高代码的重用性2、简化操作3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率二、存储过程的创建语法:CREATE PROCEDURE 存储过程名(参数列表)BEGIN 存储过程体(一组合法的SQL语句)END注意:1、参数列表包含三部分参数模式 参数名 参数类型举例:in stuname varchar(20)参数模式:in:该参数可以作为输入,也就是该参数需要调用方传入值ou

2021-09-22 21:33:28 73

原创 mysql-变量

一、变量系统变量:全局变量和会话变量自动以变量:用户变量和局部变量二、系统变量定义:变量由系统定义,不是用户定义,属于服务器层面注意: 全局变量需要添加global关键字,会话变量需要添加session关键字,如果不写,默认会话级别使用方法:1.查看所有系统变量show global|/session variables;2.查看满足条件的部分系统变量show global|/session variables like ‘%char%’;3、查看指定的系统变量的值select @@

2021-09-22 21:21:46 81

原创 mysql-事务

一、事务的概念事务: 一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行。事务的特性:原子性:一个事务不可再分割,要么都执行要么都不执行一致性:一个事务执行会使数据从一个一致状态切换到另外一个一致状态隔离性:一个事务的执行不受其他事务的干扰持久性:一个事务一旦提交,则会永久的改变数据库的数据.二、事务的用法事务的创建:隐式事务:事务没有明显的开启和结束的标记比如insert、update、delete语句显式事务:事务具有明显的开启和结束的标记前提:必须先

2021-09-20 09:46:38 89

原创 mysql-索引

一、索引的作用概念:索引就是帮助数据库管理系统高效获取数据结构索引不是万能的:数据表中行数过少,就不需要创建索引,比如小于1000行,当数据重复度大,就不需要对这个字段使用索引,比如高于10%二、索引的种类普通索引: 普通索引是基础的索引,没有任何约束,主要用于提高查询效率。唯一索引: 就是在普通索引的基础上增加了数据唯一性的约束,在一张数据表里可以有多个唯一索引。主键索引: 主键索引在唯一索引的基础上增加了不为空的约束,也就是 NOT NULL+UNIQUE,一张表里最多只有一个主键索引。全

2021-09-20 09:39:12 119

原创 shell编程(一)变量

一、shell基础1.shell解释器#/bin/bash:选择监视器运行脚本2.shell脚本中的注释方法3.shell脚本的执行方法    1)绝对路径:./xxxxsh     需要对应的可执行权限    2)指定解释器执行:sh XXX.sh    3)source命令读取脚本文件它们三者区别:使用绝对路径和指定解释器运行的

2021-08-17 22:40:25 169

原创 python中的反射机制

python中的反射机制一、方法简介1.import() 动态加载模块2.hasattr()判断实例中是否存在字符串对应的属性3.getattr() 获取字符串对应的属性4.setattr() 将字符串对应的已存在的属性添加到实例中5.delattr()删除实例中字符串对应的属性二、动态导入模块包事前准备:在同级别目录下新建一个名为func_001的py文件,且内容为class Func001(): def process(self): print("这是原函数")#再新建一个文

2021-08-15 22:02:07 97

原创 selenium(三)使用js操作元素和文件上传

一、使用js操作页面元素1.使用js脚本,操作日期控件"""js操作execute_script"""import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysdriver=webdriver.Chrome()driver.get("https://www.12306.cn/in

2021-08-15 20:42:03 648

原创 selenium(二)元素的常用操作和常见场景处理

一、元素的常见操作#固定代码from selenium import webdriverfrom selenium.webdriver.common.by import Bydriver=webdriver.Chrome()driver.get("http://www.baidu.com")el=driver.find_element(By.ID,"kw")#输入el.send_keys()#点击el.click()#获取元素文本内容el=driver.find_element(B

2021-08-15 16:45:38 230

原创 selenium(一)简介以及元素定位

selenium简介以及元素定位一、selenium简介selenium是企业主流应用广泛web自动化测试框架selenium的三大组件:1、selenium IDE 浏览器插件:实现脚本录制2、WebDriver 实现对浏览器的各种操作(API包)3、Grid 分布式执行,用例同时在多个浏览器同时执行,提搞测试效率二、selenium原理启动浏览器驱动(chromedriver.exe)服务后,启动浏览器驱动(chromedriver.exe)服务,不同的指令对浏览器进行不同的操作。三、

2021-08-12 23:13:49 352

原创 pytest单元测试框架(三)

一、allure测试报告的定制用例的相关名称1.史诗(项目名称): @allure.epic(“项目名称:码尚教育接口自动化测试项目”)2.特性(模块名称):@allure.feature(“模块名称:用户管理模块”)3.分组(接口名称):@allure.story(“接口名称:查询商品”)4.测试用例标题:    (1)@allure.title(“这是用例名称1”),适用于一个方法对应一个用例。    (2)a

2021-07-17 19:43:03 211 2

原创 pytest单元测试框架(二)

一、使用fixture实现部分前后置@pytest.fixture(scope=“作用域”,params=“数据驱动”,autouser=“自动执行”,ids=“自定义参数名称”,name=“别名”)参数说明:scope=“作用域”    functioin:在每个方法(测试用例)的前后执行一次。    class:在每个类的前后执行一次。    module:在每个py文件前

2021-07-16 21:45:18 273 1

原创 pytest单元测试框架实战(一)

一、pytest简介1.基于python的单元测试框架,它可以和selenium,requests,appium结合实现自动化测试。2.实现用例跳过skip和reruns失败用例重跑。3.它可以结合allure-pytest插件生成allure报告。4.很方便和jenkins实现持续集成。5.有很多强大的插件:    pytest-html 生成html测试报告。    pytest-xdist 多线程执行测试用

2021-07-15 22:57:02 1542 1

原创 接口自动化工具之httprunner的实战应用(一)

接口自动化工具之httprunner的实战应用(一)一、什么是Httprunner1.httprunner是一个面向http协议的通用测试框架2.它的思想是只需要维护yaml/json/py文件就可以实现接口自动化测试,性能测试,线上监控,持续集成二、httprunner的设计理念1.充分复用开源项目,不追求重复的造轮子,而是将市面强大的轮子转成战车,降低框架的开发成本以及学习成本。2.遵循约定大于临时配置的准则。(合同,考勤)3.配置文件组织测试用例。三、httprunner环境安装1.

2021-07-11 20:10:55 485 2

原创 postman接口测试工具实战(三)

postman接口测试工具实战(三)一、接口鉴权1.cookie、session、tokencookie鉴权:cookies它是由服务器产生,保存在浏览器,主要是因为http协议无连接,无状态。(超市:没有会员卡,cookie:会员卡)cookies通过键值对的方式去保存记录。原理:当用户第一次访问服务器的时候,那么服务器会产生cookie并且会在响应头的set-cookie里面发给浏览器,浏览器保存,在第2-n次请求的时候会带上cookie信息。cookie信息一般包括name,value,do

2021-07-04 20:00:08 832 3

原创 postman接口测试工具实战(二)

postman接口测试工具实战(二)一、接口关联,接口依赖应用场景:下一个接口的参数是使用的上一个接口的返回值1.JSON提取器。(都是从返回值里面提取)//javascript脚本,var定义变量 //打印responseBody返回值 console.log(responseBody); //使用json提取器把responseBody返回值转化成一个字典。 var jd = JSON.parse(responseBody); //提取access_token,并且设置为全局变量(就是

2021-06-29 22:20:47 227

原创 postman接口测试工具实战(一)

postman接口测试工具实战(一)1.http协议详解http协议:http协议是超文本传输协议,主要是用于浏览器和服务器之间交互数据,交互分为请求和响应两部分。请求:请求行,请求头,请求正文数据。响应:响应行,响应头,响应正文数据。响应码:1XX信息,2XX请求成功,3XX重定向,4XX客户端错误,5XX服务器错误。HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务请求:请求行:POST /phphead/index.php?m=u&

2021-06-29 21:23:53 383

转载 python 装饰器

@根据一些python装饰器例子,了解装饰器的原理和工作机制装饰器:所谓函数装饰器,就是通过装饰器函数,在不修改原函数的前提下,来对函数的功能进行合理的扩充。本质是函数闭包的语法糖函数闭包:一个函数,其参数和返回值都是函数语法糖:指计算机语言中添加的某种语法,这种语法对语言的功能没有影响语法糖没有增加新功能,只是一种更方便的写法语法糖可以完全等价地转换为原本非语法糖的代码装饰器的装饰函数时候的特点在第一次调用之前增强只增强一次实例代码如下:装饰器问题引入yimport ti

2021-04-18 22:55:01 130

原创 python logging日志的应用

@python logging日志的应用python 实现日志的收集logging模块 实现日志收集1.ogging模块与Print区别:可以实现不同级别日志的输出logging模块的应用 内置模块1.Logger 日志器 提供一个入口,供所有的应用程序接口使用2.Handler 处理器 决定日志输出的位置3.Formator 格式器 决定日志显示的内容4.Filter过滤器 筛选感兴趣的内容关系:一个Logger日志器可以有多个处理器,每个处理器都有各自的格式器和过滤器代码如何实现

2021-04-18 20:43:22 149 1

原创 python openpyxl库的详细使用

@python openpyxl库的详细使用首先安装包pip install openpyxl打开文件创建1.创建一个excel文件from openpyxl import Workbook #创建对象wb = Workbook()#激活工作表ws = wb.active2.打开已有的excel文件from openpyxl import load_workbook#创建对象wb2 = load_workbook('文件名称.xlsx')#激活工作表ws = wb.a

2021-04-17 23:09:45 1306

原创 python之ini和yaml文件操作

@python之ini和yaml文件操作使用配置文件来灵活配置一些参数是很常见的事,配置文件的解析并不复杂,在python里更是如此,在官方发布的库configParser,configParser解析的配置文件的格式比较像ini的配置文件格式,就是文件由多个section构成,每个section又有多个配置项ini配置文件的格式如下::备注[section]option1=value1option2=value2ini文件的读取#自己在py文件同目录下新建一个config.ini文件

2021-04-17 20:39:58 576 2

空空如也

空空如也

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

TA关注的人

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