自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 jmeter发送https请求(超详细)

1.下载证书2.证书下载好后,用win+R打开控制台,将下载的改成.storeE:\anzhuang\java\java8\bin>keytool.exe -import -alias "my.store" -file "E:\anzhuang\jmeter\wenjian\sou.cer" -keystore my.store3.打开jmeter—选项—ssl管理器,选择之前my.store修改https的请求,修改协议和端口号之后就可以请求https...

2020-06-19 10:14:16 5122 4

原创 使用Charles清除沙盒(苹果)账号上的订单(掉单的)

app在测试订阅型商品(自动续费)时使用沙盒账号来支付,购买自动续费后,账号上可能会有很多的掉单的记录,导致每次打开app时都会去调取补单,但是因为沙盒的不稳定,**补单不成功**。这样日积月累,这个账号后面再购买订阅商品时,前面还会有一堆的订单等着补单,可能会影响到支付的测试。 可以通过Charles来修改订单的响应参数,**将响应的数据改成已经补单成功**,这样前端就会finish掉订单,这个订单以后就不会再来请求了。 要修改响应的数据: 1.可以通过Charles打断点...

2020-05-29 16:11:50 1147

原创 解决:charles连接代理后不能使用苹果支付的问题

用Charles,app连接代理后,发现ios的设备不能使用沙盒账号来支付了,这个是因为你设置的代理没有过滤掉苹果的请求。点击Proxy–>SSL Proxying Settings:如果你的设置是这样的,表示所有的请求都会经过代理,可以在host后面直接加上你需要连接代理的请求的域名,这样苹果的请求就不会经过代理了,也就可以使用苹果支付了,例如:...

2020-05-29 15:55:48 1060

原创 charles,批量修改请求和响应的数据(rewrite使用)

在Charles中可以通过打断点的方式来修改请求和响应的数据,但是如果要修改某个请求的数据并且希望后面遇到这个请求也使用修改后的,那么打断点的方式就比较麻烦了,要一个一个去修改,而且有的请求的超时时间比较快,还没修改完就直接结束了。此时,就需要批量的去修改这些数据了。此时可以使用Charles中的rewrite的功能。rewrite是重写对应的内容,具体使用如下:点击tools–>Rewrite:1.添加请求页面:2.注:修改的数据type可以自己选择:以上的都填好后就可以去请求

2020-05-29 15:41:19 2007 1

原创 解决appium元素定位不到的问题

最近自学appium,好不容易工具都安装好了,app也可以启动了,启动页面的广告可以正常定位元素,但是关闭广告后,首页的元素不论怎么设置都定位不到。以下为各种尝试:1.百度说是设置:‘automationName’: ‘uiautomator2’,就好了,开心的去改代码,出现新的报错了接下来搞了1天,还是没解决,啊,真是头痛2.之后尝试用元素坐标来定位,代码是:driver.tap([(...

2020-01-06 11:24:10 7714 2

原创 app第三方支付测试点

1.支付安全:用fiddler抓包尝试修改价格2.正常支付流程:从下单到回调是否正常3.支付过程:输入正确/错误的密码弱网/无网络时点击购买输入正确的密码后,在第三方还没有返回支付成功的页面前,断网付款的账号余额不足时,正好时,多余时调起支付后,返回输入密码时,网络异常需要添加地址的订单要注意4.不同状态的订单:待支付状态:订单是否可以正常支付;是否可以取消取消状态...

2019-09-25 18:04:08 6354

原创 5、Python-循环执行多次sql语句

【代码】5、Python-循环执行多次sql语句。

2023-03-29 14:48:21 1195

原创 4、Python-数据库连接池

数据库连接的昂贵之处:创建并维持网络连接。

2023-03-29 14:13:07 415

原创 62.Python之列表推导式

官方文档的解释:对序列或可迭代对象中的每个元素应用某种操作,用生成的结果创建新的列表;或用满足特定条件的元素创建子序列。例1:1个for循环且没有判断条件# 普通for循环a = []for i in range(3): a.append(i*2)print(f'a={a}')# 使用列表推导式b = [i*2 for i in range(3)]print(f'b={b}')例2:1个for循环且有判断条件# 普通for循环a = []for i in range(3

2021-09-30 17:33:43 252

原创 61.Python之位运算

二进制:通常我们说的整数是十进制,由0123456789组成二进制的数则是由01组成比如将整数123转换成二进制的123除以2,等于61余161除以2,等于30余130除以2,等于15余015除以2,等于7余17除以2,等于3余13除以2,等于1余11除以2,余1将上面获得余数从底向上填写,即:1111011,这个就是十进制123转成二进制的数将1111011转成十进制,从右往左取数:12^0=112^1=202^2=012^3=812^4=1612^5=321*2

2021-09-30 17:29:20 340

原创 60.Python之闭包

在一个嵌套函数内,外函数返回了内函数,且内函数使用了外函数中定义的局部变量,这个就叫做闭包例:# 定义一个外函数def outer(): a = 1 # 定义一个内函数 def inner(): # nonlocal关键字使外函数中定义的局部变量可以在内函数中使用 nonlocal a a += 1 print(a) # 外函数返回内函数 return innerr = outer() #.

2021-09-28 14:55:40 97

原创 59.Python之回调函数

一个函数A中的参数是另一个函数B,并在A函数中使用了传递进来的函数B,那这个函数B就叫做回调函数即把一个函数作为形参进行传递,作为回调函数例:# 定义一个函数,里面的形参是一个函数def t(f): f()# 回调函数def p(): print('测试一下')t(p)运行后正常打印:测试一下在实际运用中,比如一个函数中传递另一个函数以及它所需的变量# 定义一个函数,里面的形参是一个函数以及它所需的变量def t(x,y,f): return f(x,.

2021-09-28 14:52:18 139

原创 58.python之关键字nonlocal

作用:在使外函数中定义的局部变量可以在内函数中引用并修改例1:外函数中定义的变量可以正常在内涵数中引用# 定义一个外函数def outer(): # a是局部变量 a = 2 # 定义一个内函数 def inner(): print(a) inner()outer()运行上面的可以正常返回2例2:在内函数中对外函数中定义的局部变量进行修改,会报错# 定义一个外函数def outer(): # a是局部变量 a

2021-09-28 11:35:26 115

原创 57.SQL语句循环执行多次,executeMany()

循环执行sql语句游标对象中得executeMany()函数可以反复执行一条SQL语句sql = "insert into my_class(id,name,class) VALUES(%s,%s,%s)" data = [ [1, "张三" , "A" ] , [2, "李四" , "B" ] ] cursor.executemany(sql, data)例如:import mysql.connector.poolingconfig = { "host" :

2021-09-06 17:33:13 1301

原创 56.python之数据库连接池

数据库连接是一种关键的、有限的、昂贵的资源,在并发执行的应用程序中体现得尤为突出数据连接池(Connection Pool)预先创建出一些数据库连接,然后缓存起来,避免了程序语言反复创建和销毁连接昂贵代价数据库连接池得语法:import mysql.connector.pooling# 数据库连接信息config = {……}# 创建数据库连接池pool = mysql.connector.pooling.MySQLConnectionPool( # 连接数据库 **con.

2021-09-06 17:30:58 387

原创 55.抵御SQL攻击(SQL预编译机制)

SQL注入的危害由于SQL语句是解释型语言,所以在拼接SQL语句的时候,容易被注入恶意的SQL语句比如下面的SQL语句:id = "1 OR 1=1" sql = "delete from score where id=" + id相当于sql = "delete from score where id=1 OR 1=1"or后面的语句为True,也就是说where后面的始终都是True,整个score表会被删除例如:下面的执行后,整个表中数据都会被删除import mysql.

2021-09-06 17:15:09 166

原创 54.python之连接数据库MySQL Connector

MySQL Connector是mysql官方的驱动模块,兼容性特别好一些第三方模块对MySQL8.0的兼容性不是很好,可能连接不上最新版的MySQL安装方式一:https://dev.mysql.com/downloads/connector/python/下载好后双击安装方式二:下载第三方包pip install mysql-connector连接数据库方式一:import mysql.connector con = mysql.connector.connect(

2021-09-06 17:08:16 657 1

原创 3.mysql之事务的隔离性详解

事务机制事务的四个隔离级别读取未提交的数据读取已提交的数据重复读取序列化事务选择哪个隔离级别是根据具体的业务场景来使用的,并没有哪个绝对的好坏读取未提交的数据比如下面的案例:前提:买票系统中的某个座位还未售出:D座A事务读取到D座未售出状态,然后将他改成已售出,但是此时这个事务还没有提交,只是A事务的redo日志中显示已售出此时B事务看到D座未售出状态,然后将他改成已售出并且在A之前提交了事务;那么A事务在提交的时候因为此时的座位状态已经被改变,因此A事务就触发了回滚,这种情况

2021-09-02 17:09:24 92

原创 2.mysql之事务

事务机制目的是避免写入直接操作数据文件比如说在执行更新数据时系统突然重启了,但此时又不知道哪些数据是已更新的,哪些是未更新的,因此如果数据的写入直接操作数据文件是非常危险的事情事务是利用日志来实现间接写入利用日志来实现间接写入mysql总共有5种日志,其中只有redo日志和undo日志与事务有关日志文件相当于数据文件的一个副本,SQL语句操作什么样的记录,mysql会把它拷贝到undo日志里面,然后增删改查的操作会记录在redo日志里,如果这些数据没有什么问题,会把redo日志和数据文件同

2021-09-02 16:49:39 107

原创 1.mysql(Navicat)数据的导入与导出

数据导入与导出数据导出与备份的区别数据导出,导出的纯粹是业务数据数据备份,备份的是数据文件、日志文件、索引文件等等备份有2种:全量备份:完整备份数据库,占用空间大增量备份:只备份变动的数据,硬盘空间占用小数据导出有2种SQL文档:数据少,可以导出SQL文档文本文档:数据多,可以导出文本文档导出SQL文件mysqldump 用来把业务数据导出成SQL文件,其中也包括了表结构mysqldump -uroot -p [no-data] 逻辑库 > 路径-uroot:

2021-09-02 16:36:24 2836

原创 53.python之正则表达式

正则表达式 通过匹配规则来获取或者验证字符串中的数据应用场景:判断一个字符串是否符合规则取出制定数据爬虫核心的技术彩票网站匹配彩票信息匹配字符串的需要条件:正则表达式模块-re匹配的规则,即正则表达式被匹配的字符串正则表达式中特殊字符例:import rea = 'my name is zs,age is 18'print(f'字符串:{a}')# 匹配字符串开头和结尾# 匹配到则返回列表(列表中有匹配到的字符串),匹配不到则显示空列表b1 = re.fi

2021-09-01 13:30:38 79

原创 52.python之创建虚拟环境

Python中的虚拟环境Python 应用经常需要使用一些包,第三方包或者模块,有时需要依赖特定的包或者库的版本,所以不能有一个能适应所有 Python应用的软件环境,很多时候不同的 Python 应用所依赖的版本是冲突的,满足了其中一个,另一个则无法运行,解决这一问题的方法是 虚拟环境。虚拟环境是一个包含了特定 Python 解析器以及一些软件包的自包含目录,不同的应用程序可以使用不同的虚拟环境,从而解决了依赖冲突问题,而且虚拟环境中只需要安装应用相关的包或者模块,可以给部署提供便利虚拟环境工

2021-08-25 17:25:23 304

原创 51.python之常用内置函数

abs:返回数字的绝对值,参数:Number,返回值:正数字print(abs(-1))print(abs(1))all:判断列表内容是否全是true,参数:List,返回值:boolprint(all([1, 'a', True]))print(all([1, 'a', False]))help:打印对象的用法a = [1, 'a']print(help(a))enumerate:迭代时记录索引,参数:可迭代对象a = ['a', 'b', 'c']for i in enume

2021-08-25 17:20:27 98

原创 50.python之日志 logging模块

日志用来记录程序行为可以记录一些重要信息,比如哪里报错,以及报错原因等日志等级(由低到高):debug:在开发时查看一些输出信息是否正确,可以替代print函数info:消息类信息,记录一些程序的行为warnning:警告,提示程序可能存在的潜在风险error:业务中出现错误,比如异常critical:比error更高级别的错误logging模块的使用使用logging.basicConfig配置基本设置参数:level:日志记录的最低等级,比如level=logging.

2021-08-24 17:20:24 246 2

原创 49.python之随机模块 random使用

random.random:随机返回一个0到1之间的浮点数random.uniform:随机返回一个a到b之间的浮点数random.randint:随机返回一个a到b之间的整数random.choice:随机返回对象中一个元素,支持字符串、列表、元组random.sample:随机返回对象中指定个数的元素,支持字符串、列表、元组,但返回的都是列表random.randrange:获取区间内的一个随机数,有3个参数,第一个参数是起始数(包含起始数),第二个是终止数(终止数不包含),第三个是步长.

2021-08-24 17:11:00 157

原创 48.python之迭代器和生成器

迭代器一般的数据都是一次性写入到内存中,而迭代器是按需加载,有一点内容就写入内存中,此时可以立即使用内存中的数据进行逻辑处理,这样就不需要等待所有的数据都写入内存中后才进行逻辑处理,提高了使用的效率若是数据中内容很大时,相比较一次性将数据写入内存中,迭代器使用一个数据就放入内存中的的方式更加高效迭代器使用生成一个迭代器对象用法:iter(iterable)参数:iterable:可迭代的数据类型,包含字符串、列表、元组、字典、集合等使用迭代器对象返回一个迭代器中数据用法:

2021-08-24 17:09:00 124

原创 47.python之魔法函数 filter、map、reduce

filter用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。返回一个迭代器对象用法:filter(func,list)参数:func:对list每个item进行条件过滤的定义list:需要过滤的列表例1:使用匿名函数a = [1, 3, 5]b = filter(lambda x: x < 5, a)print(list(b))例2:使用普通函数a = [1, 3, 5]def test(item): if item < 5

2021-08-24 17:04:26 101

原创 46.python之异步

异步一般代码是从上而下执行的,比如有3个打印语句,正常执行是从第一个到最后一个按照顺序打印出来,也就是后面的打印语句会等待前面的打印语句执行完后在执行,这个是同步执行,同步意味着有序执行;而异步就是,后面的打印语句不会等待前面的执行完后再执行,也就是说异步不会阻塞其他任务执行,异步意味着无序执行异步与多线程多进程:异步是轻量级的线程,可以叫做协程多进程和多线程无法获取函数的返回值,但是异步可以获取函数的返回值,进程池和线程池可以说是有异步的效果,它们可以获取函数的返回值主进程是异步才可以使

2021-08-23 16:49:13 614

原创 45.python之线程锁

线程锁前面在创建多线程的时候发现,线程的执行顺序有时会变乱,或者2个打印语句会打印在同一行,要想多线程不乱,可以使用线程锁加上线程锁后,同一时间只会执行一个线程,也就是线程独占资源要注意,锁不能滥用,若是因为某些原因没有解锁,就会造成死锁的现象,这样后面的线程也就无法执行。模块threading中的Lock用法:import threadinglock = threading.Lock()线程锁的加锁和解锁例1:不加锁import threadingimport timef

2021-08-20 18:02:38 308

原创 44.python之线程池

线程池普通多线程方案会使用“即时创建,即时销毁”的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于不停的创建线程,销毁线程的状态。一个线程的运行时间可以分为3部分:线程的启动时间、线程体的运行时间和线程的销毁时间。在多线程处理的情景中,如果线程不能被重用,就意味着每次创建都需要经过启动、销毁和运行3个过程。这必然会增加系统相应的时间,降低了效率。使用线程池,线程预先被创建并放入线程池中,同时处理完当前任务之后并不销

2021-08-20 17:57:44 1440

原创 43.python之创建线程

概念线程线程是CPU调度和分派的基本单位,通过进程的资源来执行任务它可与同属一个进程的其他的线程共享进程所拥有的全部资源是完成某个特定功能的一段代码,但线程的开销要比进程小的多。一个Python程序至少有一个线程,那就是Python的主线程,程序启动由Python解释器负责创建主线程,程序结束时由Python解释器来负责结束主线程。线程与进程:进程提供线程执行程序的前置要求,线程在充足的资源配备下,去执行程序一个核心中在多个时间片上同时处理线程的行为,叫做并发执行多进程在不同内核跑道

2021-08-20 17:50:46 92

原创 42.python之进程间的通信-队列

进程的通信–队列2个进程之间的通信主要依赖队列,队列支持发送消息和接收消息队列的创建:模块multiprocessing的Queue类from multiprocessing import Queueq = Queue(mac_count)参数:mac_count:队列最大可以传入多少消息,默认不传,表示无限长度队列发送消息和接收消息例:from multiprocessing import Queuefrom multiprocessing import Processi

2021-08-19 17:58:16 126

原创 41.python之进程锁

进程锁多个进程之间虽然是独立的,但仅限于内存和运算,如果涉及到其它一些资源,就可能存在竞争问题,当多个进程使用同一份数据资源的时候,就会引发数据安全或顺序混乱问题,添加进程锁则可以解决此类问题。进程锁,在同一时间执行一个进程要注意,锁不能滥用,若是因为某些原因没有解锁,就会造成死锁的现象,这样后面的进程也就无法执行。进程锁的创建:模块multiprocessing的Manager类from multiprocessing import Managermanager = Manager()l

2021-08-19 17:55:20 550

原创 40.python之进程池

进程池进程创建太多会造成资源消耗过大,为了避免出现这种情况,就需要固定进程的数量,此时就需要进程池。可以把进程池当做一个池子,在这个池子里提前创建好一定数量的进程,进程池中的进程会伴随进程池一起被创建。每个实例化对象当使用完成时,都会被内存管家回收,普通的进程也会伴随着创建与关闭的过程,而这样创建和关闭的过程是会消耗一定性能的;但是进程池中的进程经过一次创建后就不会关闭,可以重复使用,这样也就避免了创建与关闭的消耗。进程池中的进程是随着进程池的关闭而关闭。当有任务时,会先判断进程池中是否有空闲的进

2021-08-19 17:50:29 970 2

原创 39.python之创建进程

进程概念进程进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一个进程都有一个自己的地址空间,至少有 5种基本状态,它们是:初始态,执行态,等待状态,就绪状态,终止状态。例如每打开一个软件,或者每执行一个python脚本都是启动一个进程启动进程会占用cpu和内存多进程就是同时启动多个软件(进程)例如手机系统启动多个软件,手机系统属于主进程,启动的多个软件属于子进程多个进程同时在执行程序时,他们之间互不干扰,各自执行自己的业务逻辑进程的创建模块

2021-08-19 17:43:37 2165

原创 38.python之yaml文件的读取和写入

第三方包pyyaml安装:pip install pyyaml一组数据读写读取一组数据:yaml.load()写一组数据:yaml.dump()例:import yamlimport oscurrent_path = os.getcwd()path = os.path.join(current_path, 'b.yaml')aproject = {'name': 'Silenthand Olleander', 'race': '哈哈哈黑',

2021-08-18 15:51:31 1600

原创 37.yaml基本语法

基本语法大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层级的元素左对齐即可'#'表示注释数据类型:对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)纯量:单个的、不可再分的值纯量字符串布尔值整数浮点数Null时间日期boolean: - TRUE #true,True都可

2021-08-18 15:19:51 99

原创 36.python之序列化和反序列化

定义序列化将对象信息或者数据结构信息,通过一定规则进行转换,可以达到文件存储或者网络传输的效果。反序列化将通过序列化规则生成的字符串转化成原始的数据类型可序列化的数据类型numberstrlisttupledict序列化模块:json模块是一个通用的模块,即在所有的编程语言中都有json模块,并且序列化和反序列化的规则是统一的。json.dumps,参数解析:sort_keys=True:sort_keys是告诉编码器按照字典排序(a到z)输出indent=4:i

2021-08-18 14:37:07 231

原创 35.python之文件读取和写入

内置函数open获取文件对象生成文件对象,进行创建、读写操作用法:open(path,mode)参数:path:文件路径mode:操作模式返回值:文件对象文件读取文件读取操作模式:文件对象的操作方法之读:创建文件b.txt,放在当前目录下,内容如下你好 Pythonhello world例1:使用r模式import os# 获取当前路径current_path = os.getcwd()# print(current_path)# 获取当前目录下的文件

2021-08-18 10:42:11 258

原创 34.python之sys库

sys包中常用方法:例:import sys# 程序外部获取参数print(sys.argv)common = sys.argv[1]if common == 'modules': # Python启动时加载的模块 print(sys.modules)elif common == 'path': # 返回当前Python的环境路径 print(f'当前路径:{sys.path}')elif common == 'code': # 获取系统编码

2021-08-09 13:53:00 217

空空如也

空空如也

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

TA关注的人

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