自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何实现一个业务系统的自动化框架搭建

首先创建如下几个目录common(公共模块)、config(公共配置)、logs(运行日志)、reports(测试报告)、resources(测试资源)、testcases(测试用例)、utils(工具脚本)。common目录下主要存放着各个业务模块的关键字封装(cass_step)和一些公用的场景,如连接数据库、读取配置文件内容、获取登录用户token、request请求封装。config.ini用来管理多套测试环境(dev、sit、uat),config.py用来管理项目目录的存取。

2023-09-26 13:29:26 518

原创 selenium——元素定位法

selenium快速学会元素定位法

2023-02-20 17:18:38 1971

原创 python---ConfigParser模块

快速使用configparse模块

2023-02-20 11:43:11 668

原创 多线程爬取免费代理IP

思路:1、找到一家免费的高匿代理IP网站,解析网页结构获取有用的内容def get_html(url, headers): try: r = requests.get(url, headers=headers, timeout= 10) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return ""def get_proxy(html): soup = Bea

2020-10-28 12:50:44 423

原创 快速验证代理IP是否可用

利用的http://icanhazip.com/返回的IP进行校验,如返回的是代理池的IP,说明代理有效,否则实际代理无效import requestsrequests.adapters.DEFAULT_RETRIES = 3res1 = requests.get("http://icanhazip.com/",proxies={'http':"120.24.91.188:8080"},timeout=6)print(res1.text)上面这个如果打印出来的是 你放入proxies中的

2020-10-27 23:01:03 3604 1

转载 僵尸进程和孤儿进程

1、前言  之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念  我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。当一个 进程完成.

2020-10-27 13:13:58 120

原创 python中的锁

一、全局解释器锁(GIL)1、什么是全局解释器锁每个CPU在同一时间只能执行一个线程,那么其他的线程就必须等待该线程的全局解释器,使用权消失后才能使用全局解释器,即使多个线程直接不会相互影响在同一个进程下也只有一个线程使用cpu,这样的机制称为全局解释器锁(GIL)。GIL的设计简化了CPython的实现,使的对象模型包括关键的内建类型,如:字典等,都是隐含的,可以并发访问的,锁住全局解释器使得比较容易的实现对多线程的支持,但也损失了多处理器主机的并行计算能力。2、全局解释器锁的好处1、避免

2020-10-27 13:04:31 195

转载 进程、线程和协程

进程与线程之间的关系线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。线程可与属于同一进程的其它线程共享进程所拥有的全部资源,但是其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的信息(如程序计数器、一组寄存器和栈)。python 线程Threading用于提供线程相关的操作,线程是应用程序中工作的最小单元。1、threading模块threading 模块建立在 _thread 模块之上。thread

2020-10-27 12:49:53 190

原创 同步和异步

定义:同步和异步关注的是消息通信机制(synchronous communication/ asynchronous communication)。同步,就是调用某个东西是,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用同步执行异步执行同步异步和阻塞非阻塞区分阻塞和非阻塞强调的是程序在等待调用结果(消息,返回值)时的状态....

2020-10-27 12:33:11 275

原创 并行和并发

并行和串行:串行:一次只能取得一个任务并执行这一个任务 并行:可以同时通过多进程/多线程的方式取得多个任务,并以多进程或多线程的方式同时执行这些任务 注意点: 如果是单进程/单线程的并行,那么效率比串行更差 如果只有单核cpu,多进程并行并没有提高效率 从任务队列上看,由于同时从队列中取得多个任务并执行,相当于将一个长任务队列变成了短队列 并发:并发是一种现象:同时运行多个程序或多个任务需要被处理的现象 这些任务可能是并行执行的,也可能是串行执行的,和CPU核心数无关,是操作系统

2020-10-27 12:23:17 192

转载 Python高级——抽象类和接口类

https://blog.csdn.net/brynjiang/article/details/89434204

2020-10-23 00:09:21 103

转载 Python高级——@property

@property是python的一种装饰器,是用来修饰方法的。作用:可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的制度属性,可以与所定义的属性配合使用,这样可以防止属性被修改。使用场景1、修饰方法,使方法可以像属性一样访问。class DataSet(object): @property def method_with_property(self): ##含有@property return 15 def meth

2020-10-23 00:00:18 140

原创 Python——类的魔法属性

目录__doc____module__和__class____init____del____call____dict____str____getitem__/__setitem__/__delitem____getslice__/__setslice__/__delslice____doc__表示类的描述信息__module__和__class____module__:表示当前操作的对象在哪个模块__class__:表示当前操作的对象的类时什么

2020-10-22 23:51:55 265

原创 Python高级——实例方法、静态方法和类方法

实例方法实例方法最大的特点就是,它最少也要包含一个self参数,用于绑定调用此方法的实例对象(python会自动完成绑定)。class CLanguage: #类构造方法,也属于实例方法 def __init__(self): self.name = "C语言中文网" self.add = "http://c.biancheng.net" # 下面定义了一个say实例方法 def say(self): print("正

2020-10-22 23:35:30 143

转载 详解python中的多线程编程

目录一、简介二、详解1、线程和进程2、使用线程2.1全局解释器锁(GIL)2.2 退出线程2.3 python的线程模块3、thread模块4、threading模块4.1 threading的Thread类4.2 threading模块中的其他函数5、Queue模块6、线程相关模块三、总结一、简介多线程编程技术可以实现代码并行性,优化处理能力,同时功能的更小划分可以使代码的可重用性更好。Python中threading和Queue模块可以用来

2020-10-22 16:36:34 387

原创 MySQL面试知识点总结

数据库三大范式是什么第一范式:每个列都不可以再拆分。第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是只依赖于主键的一部分。第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。MyISAM索引与InnoDB索引的区别InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。InnoDB的主键索引的叶子结点存储着行数据,因此主键索引非常高效。MyISAM索引的叶子节

2020-10-19 18:50:58 367 1

转载 网络编程——TCP/UDP

一、TCP/IP网络模型计算机与网络设备要互相通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要实现确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议。...

2020-09-12 06:06:57 269

原创 python——内存管理

python的内存管理机制:引用计数、垃圾回收,内存池机制一、变量与对象关系图:python中万物皆对象,所以python的存储问题是对象的存储问题,并且对于每个对象,python会分配一块内存空间去存储它。 对于整数和短小的字符等,python会执行缓存机制,将这些对象进行缓存,不会为相同的对象分配多个内存空间。 容器对象,如列表、元组、字典等,存储的其他对象,仅仅是其他对象的引用,即地址,并不是这些对象本身。二、引用计数在python中,每个对象都有指向该对象的引用总数——称为

2020-09-11 09:04:23 722

原创 python——策略模式(Strategy)

内容:定义一系列的算法,把它们一个个封装起来,并且使它们可互相替换。本模式使得算法可独立于使用它的客户而变化。角色:抽象策略(Strategy) 具体策略(ConcreteStrategy) 上下文(Context)适用场景:许多相关的类仅仅是行为有异 需要使用一个算法的不同变体 算法使用了客户端无需知道的数据 一个类中的多种行为以多个条件语句的形式存在,可以将这些行为封装入不同的策略类中。优点:定义了一系列可重用的算法和行为。 消除了一些条件语句 可以提供相同行为的不同实

2020-08-31 20:56:20 1189

原创 python——工厂模式(Factory Method)

内容:定义一个用于创建对象的接口(工厂接口),让子类决定实例化哪一个产品类。角色:抽象工厂角色(Creator) 具体工厂角色(Concrete Creator) 抽象产品角色(Product) 具体产品角色(Concrete Product)工厂方法模式相比简单工厂模式将每个具体产品都对应了一个具体工厂。适用场景:需要生产多种、大量复杂对象的时候。 需要降低耦合度的时候。 当系统中的产品种类需要经常扩展的时候。优点:每个具体产品都对应一个具体工厂类,不需要修改工厂类代码

2020-08-31 16:56:34 358

原创 python——单例模式(Singleton)

内容:保证一个类只有一个实例,并提供一个访问它的全局访问点。使用场景:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。优点:对唯一实例的受控访问。 单例相当于全局变量,但防止了命名空间被污染。实现:使用__new__方法(推荐) ​​​​​​​当我们实例化一个对象时,是先执行了类的__new__方法(没写时,默认调用object.__new__),实例化对象;然后再执行类的__init__方法,对这个对象进行初始化,所以我们可以基于这个,实现单例模式。 思路:在一个

2020-08-31 16:19:32 1736

转载 python——mixin设计模式(多重继承)

多重继承继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。回忆一下Animal类层次的设计,假设我们要实现以下4种动物:Dog - 狗狗; Bat - 蝙蝠; Parrot - 鹦鹉; Ostrich - 鸵鸟。如果按照哺乳董伟和鸟类归类,我们可以设计出这样的类的层次:但是如果按照“能跑”和“能飞”来归类,我们就应该设计出这样类的层次:如果要把上面的两种分类都包含进来,我们就得设计更多的层次:哺乳类:能跑的哺乳类,能飞的哺乳类; 鸟类:能跑

2020-08-31 15:01:20 288

原创 python——设计模式

设计模式是什么设计模式是经过总结、优化的,对我们经常会碰到的一些编程问题的可重用解决方案。一个设计模式并不像一个类或一个库那样能够直接作用于我们的代码。反之,设计模式更为高级,它是一种必须在特定情形下实现的一种方法模板。设计模式不会绑定具体的编程语言。一个好的设计模式应该能够用大部分编程语言实现(如果做不到全部的话,具体取决于语言特性)。最为重要的是,设计模式也是一把双刃剑,如果设计模式被用在不恰当的情形下将会造成灾难,进而带来无穷的麻烦。然而如果设计模式在正确的时间被用在正确的地方,它将是你的救星。

2020-08-30 19:59:07 189

原创 python——异常处理

一、常见异常:异常名称 描述 BaseException 所有异常的基类 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit 生成器(generator)发生异常来通知退出 ArithmeticError 所有数值计算错误的基类 FloatingPointError 浮点计算错误 ZeroDivi.

2020-08-30 16:25:01 154

原创 python——面向对象

一、面向对象&面向过程区别面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 优点:程序逻辑性强,复杂的问题简单化。 缺点:维护性差,功能拓展性差。 实例:面向过程式的登录注册程序。 """注意:一般认为,如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程的方式是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护的,那还是用面向对象方便。"""import json,redef log

2020-08-28 20:28:08 134

原创 python——模块

常用内置模块getpass模块 os模块(与操作系统交互) sys模块(与python解释器交互) subprocess模块(执行系统命令) hashlib模块(加密相关) json和pickle(序列化使用) shutil模块 time模块 datatime模块 re模块 random模块 ConfigPrarser模块 traceback模块 itertools模块 logging模块(用于便捷记录日志且线程安全的模块)查看详细https://www.cnblogs.c

2020-08-27 19:23:55 131

原创 python基础——深浅拷贝

赋值(=)数据完全共享,其实就是对象的引用。 赋值是在内存中指向同一个对象,如果是可变类型,比如列表,修改其中一个,另一个必定改变;如果是不可变类型,比如字符串,修改了其中一个,另一个并不会变 b = a:赋值引用,a 和 b 都指向同一个对象。浅拷贝(copy)拷贝父对象,不会拷贝对象的内部的子对象。 b = a.copy():浅拷贝, a 和 b 是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。深拷贝(deepcopy)copy模块的deepcopy方...

2020-08-27 15:59:31 127

原创 python基础——递归函数

递归函数在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。递归函数特性:必须有一个明确的结束条件。 每次进入更深一层递归时,问题规模相比上次递归都应有所减少。 相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)。 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以递归

2020-08-26 18:47:43 226 1

原创 python——函数传参

一、位置与关键字传参位置传参:先用形式参数定义,然后在调用时对应位置使用实参(具体的数值)调用def sum(a, b): return a + b sum(5, 6)关键字传参:先用形式参数定义,然后调用时使用定义时的关键词并赋予其相应的值def sub(a, b): return a - b s1 = sub(a=6, b=3) *注意:关键字传递是根据每个参数的名字进行参数传递的,关键字可以不遵守位置的对应关系; 关键字传递可以和位置传递混用,但位

2020-08-22 01:06:45 348

原创 python高级——闭包和装饰器

一、闭包如果在一个函数的内部定义了另一个函数,外部的函数叫它外函数,内部的函数叫它内函数。二、闭包条件在一个外函数中定义了一个内函数 内函数里运用了外函数的临时变量 外函数的返回值是内函数的引用...

2020-08-21 22:22:56 127

原创 python高级——函数的参数传递机制

对象和变量python中一切皆对象。在python中,类型属于对象,变量是没有类型的,这正是python的语言特性。所有的变量都可以理解是内存中一个对象的“引用”,所以,希望大家在看到一个python变量的时候,把变量和真正的内存变量区分开。可变(mutable)和不可变(immutable)对象在python中,字符串,元组和数字是不可变的对象,而列表、字典等是可变的对象。不可变对象用值传递:像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在..

2020-08-21 21:58:38 218

原创 python高级——编写函数的四个原则

python编写函数的4个原则原则一:函数设计要尽量短小,嵌套层次不宜过深。 ​​​​​​​函数中需要用到if;elif;while;for等循环语句的地方,尽量不要嵌套过深,最好能控制在3层以内。 原则二:参数个数不宜太多。 ​​​​​​​函数申明应该做到合理、简单、易于使用。除了函数名能够正确反映其答题功能外,参数的设计也应该简洁明了,参数个数不宜过多。 原则三:函数参数设计应该考虑向下兼容。 ​​​​​​​通过加入默认参数避免退化,做到向下兼容 原则四:一个函数只做一件事

2020-08-21 21:18:52 885

原创 python内置函数——匿名函数

说明:在定义函数的时候,不想给函数起一个名字。这个时候就可以用lambda来定义一个匿名函数语法:lambda 参数:表达式(block)参数:可选,通常以逗号分隔的变量表达式形式,也就是位置参数。表达式:不能包含循环,return;可以包含if...eles..语句使用:func = lambda x, y, z: x + y + zret = func(1, 2, 3)print(ret) # 6使用if...else...:func = lambda x,

2020-08-12 17:11:28 119

原创 python内置函数——enumerate()

说明:emumerate()函数用于将一个可遍历的序列(如列表,元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环中。语法:enumerate(sequence, [start=0])参数:sequence:表示一个序列、迭代器或其他支持迭代的对象;start:下标起始位置,默认为0。使用:seasons = ['spring', 'summer', 'fall', 'winter']print(list(enumerate(seasons, s

2020-08-12 17:00:11 601

原创 python内置函数——map()使用

官方文档说明:map(func, *iterables) --> map objectMake an iterator that computes the function using arguments fromeach of the iterables. Stops when the shortest iterable is exhausted.map()返回的是一个map对象(python2.0中返回的是列表,后面会讲到)。 map的第二个参数是可变的,*iterables等

2020-08-12 16:29:27 302

原创 python内置函数——Counter

使用字典统计词频:#统计词频colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']result = {}for color in colors: if result.get(color)==None: # if color not in result result[color]=1 else: result[color]+=1print (result)#{'red': 2, 'blue

2020-08-12 16:00:24 596

原创 python基础——命名空间和作用域

命名空间命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过Python字典来实现的。命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响的。一般有三种命名空间:内置名称(built-in names),Python语言内置的名称,比如函数名abs、char和异常名称BaseException、Exception等等。 全局名称(global names),模块中定

2020-08-10 18:15:51 121

原创 python内置函数——zip()和zip(*)

python3中的zip函数1、zip()zip函数接受任意多个可迭代对象作为参数,将对象中对应的元素打包成一个tuple,然后返回一个可迭代的zip对象。用两个列表生成一个zip对象:>>> a1=[1,2,3]>>> a2=[4,5,6]>>> a4=["a","b","c","d"]>>> zip1=zip(a1,a2a3)>>> print(zip1)<zip object

2020-08-09 19:19:36 541 1

原创 python基础——常用推导式(列表、字典、集合)

1、列表推导式列表推导式为我们提供了一种在一行内实现较为复杂逻辑的生成列表的方法。其核心语法是用中括号[]将生成逻辑封装起来。基础写法:L = [x * x for x in range(1, 10)]print(L) #[1, 4, 9, 16, 25, 36, 49, 64, 81]# 理解为,首先执行for循环,对于每一个x,代入x*x中进行运算,将运算结果逐一添加到一个新列表内,循环结束,得到最终列表。增加条件语句:>>> [x * x for x in

2020-08-09 18:32:40 174

原创 python基础——字典常用方法集合

目录字典描述字典基础操作字典排序(sorted)字典合并字典解包字典描述字典是python语言中唯一的映射类型。映射类型对象里哈希值(key)和指向的对象(value)是一对多的关系,通常被认为是可变的哈希表。字典对象是可变的,它是一个容器类型,能存储任意个数的python对象,其中也可包括其他容器类型。字典类型与序列类型的区别:存取和访问数据的方式不同 序列类型只用数字类型的键(从序列的开始按数值顺序索引) 映射类型可以用其他对象类型作键(如:数字、字.

2020-08-08 23:40:34 341

空空如也

空空如也

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

TA关注的人

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