Python
文章平均质量分 73
liuchunming033
关注软件的自动化测试与持续集成,平时的主要工作包括接口测试、性能测试、APP测试、WEB测试、测试平台开发等。可以关注我的个人公众号《明说软件测试》接收最新文章
展开
-
测试开发之Python核心笔记(30):Python反射的应用
通常,我们操作对象的属性或者方法时,是通过点“.”操作符进行的。例如下面的代码:class Person: type = "mammal" def __init__(self, name): self.name = name def say_hi(self): print('Hello, my name is', self.name) @staticmethod def feed(): print("Three原创 2021-08-15 13:02:24 · 562 阅读 · 2 评论 -
测试开发之Python核心笔记(29):队列及其操作
classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawl(amount)mermaid原创 2020-10-09 14:27:35 · 1016 阅读 · 0 评论 -
测试开发之Python核心笔记(11):列表相关算法
程序设计中,有一种最最基础的数据结构是数组,数组把相同类型的若干个元素按连续顺序存储在内存中。数组通过索引来记录元素的位置。大多数编程语言中,数组的索引从0开始。如果索引超出了数组的范围,会报数组越界异常。在Python中,数组中的元素类型不要求必须保持一致,而且支持负数索引,比如-1表示数组中最后一个元素。在Python中,数组被封装成列表(List),是一种容器类型,具有更多的高级功能。例如:列表将数组插入、删除数据时搬移其他数据的操作进行了封装。列表支持动态扩容。在项目开发中,对于业务开发原创 2020-08-27 18:00:28 · 765 阅读 · 1 评论 -
测试开发之Python核心笔记(19): 深入理解类的属性
属性作为类的重要组成部分,除了平时常用的读取和设置操作之外,还有很多隐藏的、高级的操作。比如属性的查找顺序、属性的类型检查、限制属性的动态添加等等。这一小节,就让我们深入理解属性的各种高级操作。19.1 通过字符串操作属性和方法反射是一个很重要的概念,它可以把字符串映射到实例的属性或者方法,然后可以去执行调用、修改等操作。Python提供了四个函数,可以通过字符串操作属性和方法:hasattr、getattr、setattr和delattr。但是要注意属性和方法不能是私有的,如果是以“_”开头的属性和原创 2020-08-13 19:16:25 · 776 阅读 · 1 评论 -
测试开发之Python核心笔记(26): 协程
协程是实现并发编程的一种方式。 Python 3.7 以上版本中,使用协程写异步程序非常简单。26.1 同步与异步我们首先来区分一下 Sync(同步)和 Async(异步)的概念。所谓 Sync,是指操作一个接一个地执行,下一个操作必须等上一个操作完成后才能执行。而 Async 是指不同操作间可以相互交替执行,如果其中的某个操作被 block 了,程序并不会等待,而是会找出可执行的操作继续执行。从而可以提高效率。26.2 Asyncio原理Python使用Asyncio库进行异步编程。Async原创 2020-08-12 17:50:47 · 828 阅读 · 1 评论 -
测试开发之Python核心笔记(25): 多进程与多线程
25.1 并发和并行并发Concurrency工作互相切换,如线程切换和任务切换多线程(线程切换)、协程(任务切换)并行Parallelism同一时刻、同时发生多进程并行还是并发?并发通常应用于 I/O 操作频繁的场景,比如你要从网站上下载多个文件,I/O 操作的时间可能会比 CPU 运行处理的时间长得多。而并行则更多应用于 CPU heavy 的场景,比如 MapReduce 中的并行计算,为了加快运行速度,一般会用多台机器、多个处理器来完成。25.2 多线原创 2020-08-12 17:47:36 · 539 阅读 · 0 评论 -
测试开发之Python核心笔记(24):日志
日志主要目的是在程序运行过程中,输出我们感兴趣的内容,以便程序出现异常时,我们根据日志排查问题。Python中内置的日志模块是logging。24.1 日志级别日志输出的内容是分等级的,我们可以根据等级控制输出的内容。可以通过help(loggging)查看日志帮助文档,文档最下方列出了Python支持的日志级别。DATABASIC_FORMAT = ‘%(levelname)s:%(name)s:%(message)s’CRITICAL = 50DEBUG = 10ERROR = 40F原创 2020-08-12 17:22:09 · 638 阅读 · 0 评论 -
测试开发之Python核心笔记(23):抽象类、枚举类与元类
23.1 抽象类抽象类是一种特殊的类,只能有抽象方法(没有实现功能),有两个典型特点:不能被实例化,只能被继承。强制子类必须实现抽象方法,使用相同的方法和方法名称。抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),通常用作类似JAVA中接口的作用,用来规范子类的行为。让每个人可以关注抽象类的方法和描述,而不需要考虑过多的实现细节,通过抽象类操作具体类的实例。看一个例子:from abc import ABCMeta, abst原创 2020-08-12 14:38:49 · 528 阅读 · 0 评论 -
测试开发之Python核心笔记(22):组合、继承与多态
20.1 多用组合不同的类可以混合使用,加入到其他类中,来增强类的功能和代码重用性。也就是一个类的属性可以是其他类的实例。当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好。来看一个例子:class Name: def __init__(self, first_name, last_name): self.first_name = first_name self.last_name = last_name def __str__(s原创 2020-08-12 14:23:43 · 948 阅读 · 3 评论 -
测试开发之Python核心笔记(21):对象的比较与拷贝
21.1 变量与对象的关系Python中任何事物都是对象,包括变量、函数和类,都是对象。表达式a=‘s’中的字符串’s’就是对象。换句话说,变量a指向了对象’s’。变量就相当于一个标签,这个标签标识了一个对象。每一个对象都是由三部分组成:标识符(identity)、类型(type)、值(value)组成。标识符:每个对象都有唯一的标识,来标识自己,可以使用内置函数id()来查看对象的标识。例如查看变量a的标识,标识可以简单的认为这个值是该对象的内存地址:>>> id(a)4310原创 2020-08-11 17:28:00 · 534 阅读 · 0 评论 -
测试开发之Python核心笔记(20): 类内置高级方法
当我们定义了一个类之后,Python会自动为我们提供一些方法,这些方法大部分是从object类或者type类继承来的。我们可以覆盖这些方法实现特定的操作。20.1 让对象打印出来更易读用print()打印对象,会展示__str__()函数的内容,直接运行实例的时候,打印的对象,会展示__repr__()函数的内容。因此可以通过实现__str__()和__repr__()这两方法,让对象打印出来更符合人类阅读。比如class Student: def __init__(self, name, a原创 2020-08-11 16:58:34 · 763 阅读 · 1 评论 -
测试开发之Python核心笔记(18): 类与对象入门
Python是面向对象编程语言。面向对象编程中两个最基本的概念就是类和对象。类是一群有着相同属性和函数的一类对象的模板,类实例化后产生对象。在Python中创建一个类和对象是很容易的。18.1 定义一个类使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾,通常类名首字母大写:下面是一个类的例子:class Document: """ 这是一个文档字符串 """ # 类变量 WELCOME_STR = 'Welcome! The contex原创 2020-08-10 14:40:36 · 417 阅读 · 0 评论 -
测试开发之Python核心笔记(17): 调试程序
17.1 为什么要调试代码本身有问题,需要我们找到 root cause 并修复代码效率有问题,比如过度浪费资源,latency很大,因此需要我们 debug在开发新的 feature 时,一般都需要测试阅读开源项目时,通过调试了解处理逻辑17.2 调试方法17.2.1 print调试法对于简单的程序,使用print函数输出可以进行调试。但是对于大型程序,怀疑出错的地方可能很多,就可能代码中需要写大量的print函数。调试完毕后,还要再删除掉。显然比较麻烦。17.2.2 Pycharm断原创 2020-08-09 17:26:57 · 1136 阅读 · 1 评论 -
测试开发之Python核心笔记(16):模块与包
16.1 概念函数、类、常量拆分到不同的.py文件,这些文件就是模块将多个模块放到一个文件夹中,这个文件夹就是包,包中通常还包含一个文件__init__.py,表述包对外暴露的模块接口。内容也可以为空,并不是必须的。通过模块和包组织的项目,组织结构看起来更加清晰,例如基于Pytest的自动化测试项目的结构:├── Pipfile├── Pipfile.lock├── config│ ├── prod│ └── test├── conftest.py├── data│ └原创 2020-08-09 17:05:01 · 508 阅读 · 0 评论 -
测试开发之Python核心笔记(15):迭代器与生成器
15.1 可迭代对象Iterable还记得for循环吗?for循环可以循环迭代处理字符串以及列表、元组、字典、集合这些容器类型,知道为什么这些数据类型可以被for迭代吗?因为这些对象都是可迭代对象。判断是否是可迭代对象,可以isinstance(obj, Iterable)判断,输出True表示obj对象是可迭代的(iterable)。15.2 迭代器iterator通过迭代器,程序员可以迭代非序列类型,就是除了列表、元素、字典和集合之外类型。迭代器通过next()方法获取对象中的下一个元素,可以原创 2020-08-09 16:52:51 · 1186 阅读 · 1 评论 -
测试开发之Python核心笔记(14): 装饰器
14.1 概念所谓的装饰器,其实就是通过装饰器函数,来修改原函数的一些功能,使得原函数不需要修改。装饰器依赖前面介绍的Python函数的五个特性:函数也是对象函数对象可以赋值给变量函数对象可以作为参数传递给另外的函数函数对象可以作为另外一个函数的返回值函数可以嵌套定义14.2 函数装饰器14.2.1 装饰器的简单例子my_decorator() 是一个装饰器,它把真正需要执行的函数 func() 包裹在其中,并且改变了它的行为,但是原函数 func不变。定义装饰器分三步走:调用原函原创 2020-08-09 16:50:26 · 442 阅读 · 0 评论 -
测试开发之Python核心笔记(13):递归函数
13.1 概念在函数内部,可以调用其他函数。如果一个函数在内部调用自身,这个函数就是递归函数。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。计算阶乘n! = 1 x 2 x 3 x … x n,用函数fact(n)表示:def fact(n): if n==1: return 1 return n * fact(n - 1)13.2 写递归代码的套路写递归代码的关键就是找到如何将大问题分解为小问题的规律,然后按照下面套路即可实现:第一步,写出原创 2020-08-09 16:44:04 · 530 阅读 · 0 评论 -
测试开发之Python核心笔记(12): 匿名函数与高阶函数
12.1 定义匿名函数匿名函数应用非常广泛。常用在不方便定义常规函数的地方,作为参数的值来使用。lambda开头 接着参数列表,接着冒号,后面是表达式,函数返回值就是表达式的值。lambda x: x**2可以赋值给变量:>>> square = lambda x: x**2>>> square(3)912.2 匿名函数的用处用在常规函数 def 不能用的地方,比如,用在列表内部[(lambda x: x*x)(x) for x in原创 2020-08-09 16:42:03 · 771 阅读 · 0 评论 -
测试开发之Python核心笔记(10):Python函数
10.1 定义函数使用def关键字函数可以有返回值也可以没有返回值# content of test_sample.pydef inc(x): # 有返回值 return x + 1def test_answer(): # 没有返回值 assert inc(3) == 510.2 调用函数add_one=inc(3)函数被调用时,这个函数此前必须定义过10.3 函数的参数10.3.1 位置参数def divmod(x, y): # known原创 2020-08-09 16:37:03 · 678 阅读 · 0 评论 -
测试开发之Python核心笔记(9):时间与日期
时间在编程中应用广泛:日志、统计程序性能、统计函数执行时长等。Python 与时间处理相关模块有:time 模块和 datetime 模块。9.1 time模块在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。time 模块是围绕着 Unix Timestamp 进行的。五个常用函数:获取当前时间戳timestamp = time.time() # 1590465647.9812.原创 2020-08-09 12:50:27 · 344 阅读 · 0 评论 -
测试开发之Python核心笔记(8):错误与异常
8.1 概念程序中的错误通常包括两种,一种是语法或逻辑错误,另一种则是运行时的异常。Python3版本的异常类型请参考:https://docs.python.org/3/library/exceptions.html。为了程序的健壮,代码要对可预知的异常进行处理。8.2 处理异常8.2.1 try…except通常使用 try 和 except 来解决异常。try: s = input('please enter two numbers separated by comma原创 2020-08-09 12:47:00 · 320 阅读 · 0 评论 -
测试开发之Python核心笔记(7):输入与输出
输入输出的设备主要有键盘、屏幕、网卡、文件等。7.1 键盘和屏幕input接收键盘的输入,得到的是字符串,name = input('your name:'),要想的到数字,需要进行类型转换print输出到屏幕,print(“Hello world”)7.2 文件路径对文件系统的访问,大多通过Python的os模块实现。该模块是Python访问文件系统功能的主要接口。通过下面代码可以查看os模块的全部功能。>>> import os>>.原创 2020-08-09 12:44:33 · 941 阅读 · 0 评论 -
测试开发之Python核心笔记(6):分支与循环
6.1 分支根据不同条件,进入到不同的处理逻辑逻辑中,条件判断使用if语句。条件判断最好是显性的,写的明明白白的。6.1.1 两个分支例如,取绝对值:if x < 0: y = -xelse: y = x再如,取两个数中的较小值,可以写在同一行:smaller = x if x< y else y上面取绝对值的代码也可以写在一行:absolute= x if x>0 else -x条件表达式用 in 或者not in可以大大简化代码,比如:cm.原创 2020-08-09 12:40:04 · 473 阅读 · 0 评论 -
测试开发之Python核心笔记(5):字典与集合
5.1 字典字典是一系列由键(key)和值(value)配对组成的元素的集合。键不能重复,Python中大部分对象可以作为key,但是key必须是可哈希的,列表、字典这类不能作为key,元组可以。在 Python3.7+以后,字典记住了插入的顺序。内部是哈希表存储结构,查找、添加和删除操作效率非常高,都能在O(1)复杂度内完成。5.1.1 声明字典创建字典的方法很简单,使用一对中括号 {},键值对中间用冒号,每项间使用逗号分割。d1 = {'name': 'jason',原创 2020-08-09 12:36:41 · 624 阅读 · 0 评论 -
测试开发之Python核心笔记(4):列表与元组
元组和列表都是容器,容器里面可以放各种类型的数据,同一个列表,允许放不同数据类型的数据。4.1 声明声明列表两种方法:inibasenames = ["pytest.ini", "tox.ini", "setup.cfg"] # 测试框架pytest的3类配置文件,推荐pytest.ini,通常放到项目根目录li = list("requests") # ['r', 'e', 'q', 'u', 'e', 's', 't', 's']lis = list(range(10)) # [0, 1原创 2020-08-09 12:33:25 · 651 阅读 · 0 评论 -
测试开发之Python核心笔记(3):数值与随机数
3.1 数值类型Python支持的数值类型有整型int、布尔型bool、浮点型float、Decimal。type(100) # <class 'int'>type(1.0) # <class 'float'>type(True) # <class 'bool'>type(False) # <class 'bool'>这里要提一下,布尔型是只有两个值的整数。True对应1,False对应0。对于布尔型要从以下方面理解:有两个值True原创 2020-08-05 18:50:20 · 450 阅读 · 0 评论 -
测试开发之Python核心笔记(2):字符串与正则表达式
2.1 字符串表示表示一个字符串就是用引号将一连串字符包裹起来,或者使用str()构造器。单引号’’双引号 “”三引号之中(’’’ ‘’'或""" “”",两者一样)构造器str()打开Pycharm集成开发环境,输入下面的代码:a = 'This is a string' # 用单引号b = "Selenium automates browsers. That's it!" # 如果字符串内容包含单引号,那么最好用双引号将其括起来c = """ # 用三个引号,定义多行字符串原创 2020-08-05 18:33:16 · 798 阅读 · 0 评论 -
测试开发之Python核心笔记:认识Python
1. 认识PythonPython是一门动态的、强类型的语言,是目前非常流行的语言。流行的主要原因是Python 语言应用广泛,可以用应用在Web开发、爬虫、数据分析、软件测试和机器学习等多个领域。另外,Python语言简单易学,吸引了更多编程初学者的喜爱。Python语言简洁的语法和丰富的第三方库,使得业务开发的效率非常高。在自动化测试中,Python也是首选的编程语言,可以做接口测试、web测试、app测试、性能测试和测试平台开发。Python测试开发核心笔记系列文章第一篇,先来认识Python这门原创 2020-06-08 08:49:21 · 874 阅读 · 0 评论 -
Python做自动化测试必知必会思维导图
Python语言语法简单、入门容易,简洁高效,是软件测试领域的首选语言。如果想用Python开展自动化测试,或者已经开始使用Python但是又不知道应该掌握哪些Python知识的同学们,希望本文能够对你有所帮助。我是2014年开始接触Python语言的,当时是在Irdeto上班,那时是给数字视频内容保护系统的后台进行自动化测试,选用的自动化工具是Selenium,因为Selenium的API...原创 2020-04-26 14:50:17 · 21935 阅读 · 14 评论 -
利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境
本文给大家介绍了如何使用pyenv安装多个版本Python,如何在不同的Python版本间切换。还介绍了一种Python官方推荐使用的包管理工具pipenv,它结合pyenv和pip和virtualenv的优点于一身,可以帮我们管理项目的虚拟环境、管理项目的依赖包。原创 2018-03-16 16:35:39 · 17472 阅读 · 4 评论 -
Linux&Mac上让Python3和Python2共存
Linux和MacOS默认都是安装了Python2的。我们如何在操作系统中继续安装Python3但不覆盖系统自带的Python2呢?这里的小技巧就是,下载Python3的源码之后,使用 “make altinstall”安裝而不是“make install”安装。Python 的 make install 跟 make altinstall 有什么差別呢? 我们看下make的帮助文档,insta原创 2017-12-12 14:40:37 · 3495 阅读 · 0 评论 -
Mac OS 上用pyenv和pyenv-virtualenv管理多个Python多版本及虚拟环境
软件简介:pyenv 是一款特别好用的Python版本管理器,可以在同一台电脑上不同的目录里分别运行不同版本的Python, 并且互不影响,安装的包也互不影响。github项目地址:https://github.com/yyuu/pyenvpyenv-virtualenv 是pyenv的一个plugin,可以用来创建基于不同Python版本的干净的虚拟环境。github项目地址:https://gi原创 2017-10-25 19:20:42 · 3356 阅读 · 0 评论 -
用Python处理json数据
1、什么是JSON:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。第一次接触到它是在进行服务器端接口测试的时候。现在很多服务器返回的结果都是json格式。主要是由于它比较容易解析和生成。JSON格式的数据本质上一种被格式化了的字符串。2、Python处理JSON用Python处理json也很简单,Python自带有json模块。可以对python对象与原创 2016-08-26 11:05:10 · 18454 阅读 · 3 评论 -
Python中的编码与解码
之前一直对python文件中编码解码糊里糊涂,今天看到一篇文章,觉得把我讲的有点明白了。写个心得吧。1、编码解码是怎么一回事?Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化。编码是 unicode -> str,相反的,解码就是 str -> unicode。str形式,也就是字符串形式都是以一定的编码格式存在的,常见的编码格式有utf-8、ASCII、gb2原创 2016-08-16 17:56:41 · 7498 阅读 · 3 评论 -
Python测试框架doctest
doctest是python自带的一个模块。本博客将介绍doctest的两种使用方式:一种是嵌入到python源码中,另外一种是放到一个独立文件。doctest 的概念模型在python的官方文档中,对doctest是这样介绍的: doctest模块会搜索那些看起来像是python交互式会话中的代码片段,然后尝试执行并验证结果。从名字上是否会让你联想到docstring呢?doctest的编写翻译 2016-05-19 18:46:17 · 24969 阅读 · 2 评论 -
使用Python的Requests库进行web接口测试
1、Requests简介Requests 是使用 Apache2 Licensed 许可证的 HTTP 库。用 Python 编写,真正的为人类着想。Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。总之,大家以后对u原创 2015-05-06 18:40:45 · 26249 阅读 · 0 评论 -
简明python教程学习笔记之九-对象参考
当你创建一个对象并给它赋一个变量的时候,这个变量仅仅 参考 那个对象,而不是表示这个对象本身!也就是说,变量名指向你计算机中存储那个对象的内存。这被称作名称到对象的绑定。原创 2014-05-15 15:08:54 · 792 阅读 · 0 评论 -
使用requests库发送HTTP请求
在Requests官网上有这么一句话:Requests: HTTP for Humans。什么意思呢?就是说Requests是真正方便人类与HTTP进行交互的库。相比与urllib库,Requests真的是太方便了。目前Requests 支持 Python 2.6—2.7以及3.3—3.7。通过这篇文章,你将能够知道:如何使用requests发送http请求(GET 、POST)...原创 2018-03-26 18:47:01 · 3603 阅读 · 0 评论 -
Python序列解包实例
有时候我们需要使用到列表或者元组中某一些变量时,可以利用序列分解法得到这些变量。1. 将序列分解为单独的变量序列解包指的是通过赋值操作,将序列中的元素赋值给独立的变量。比如元组分解,tuple_num=(1,2,3)first, second, third = tuple_num再比如列表分解,list_info=["lily",18,(2010,10,20)]name,age,...原创 2018-12-22 13:47:12 · 1955 阅读 · 2 评论 -
Python中eval的强大与危害
eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。想象一下变量赋值时,将等号右边的表达式写成字符串的格式,将这个字符串作为eval的参数,eval的返回值就是这个表达式的结果。python中eval函数的用法十分的灵活,但也十分危险,安全性是其最大的缺点。本文从灵活性和危险性两方面介绍eval。1、强大之处举几个例子感受一下,字符串与list、tuple、...原创 2019-02-18 20:17:33 · 74715 阅读 · 10 评论