python测试之道pdf百度云_Python测试之道——笔记1

引言

如果利用python做自动化测试的话,一些python相关的基础知识是必须要掌握的。常用的比如:python代码规范、变量与数据类型、运算、函数和字符串处理等。

语法规范

这里只介绍重点和常用的一些注意事项。

在使用python编码的时候,我们应该严格按照pep8的规范来要求自己,这样不仅仅提高代码的可读性,同时也提高了自己编码的整体水平。

重点关注:

1. python不像java一样,代码以分号结束,python一条命令一行代码,没有分号。

2.每行的长度不超过80个字符。这里是除导入较长的模块和注释里的内容。

3.python的隐式连接是使用()、[]和{}。 切记不要使用反斜杠来连接行。

不推荐这种:

a = "这是一个超长的字符串" \

"这是一个很长的字符串"

print(a)

我们使用这种:

b = ("这是一个超长的字符串"

"这是一个很长的字符串")

print(b)

4.使用4个空格作为缩进代码,不要使用tab键。

5.类与方法之间需要空一行,定级定义之间空两行,其他保持一行就可以了。

6.括号内不要有空格。

7.如果一个类不继承其他的类,就显示的从object继承,嵌套也一样。

推荐使用:

class TestClass01(object):

pass

不要使用这种:

class TestClass01:

pass

8.字符串合并使用+,不要使用%s%s,字符串打印使用format格式化,不要使用+

如:

# 推荐

a = "a" + "b"

b = "{},{}".format(1,2)

c = "key1: %s, key2: %d"%("aa",2)

d = "key1: {}, key2: {}".format("python",1)

print(a)

print(b)

print(c)

print(d)

# 不推荐

a = "%s%s" % ("a","b")

b = "{}{}".format(1,2)

c = "key1: aa" + ", " + "key2: 2"

d = "key1: " + "python" + ", " + "key2: " + str(1)

print(a)

print(b)

print(c)

print(d)

执行结果:

ab

1,2

key1: aa, key2: 2

key1: python, key2: 1

ab

12

key1: aa, key2: 2

key1: python, key2: 1

Process finished with exit code 0

9.导入的格式,每个导入应该单独占一行,

# 推荐

import os

import sys

# 不推荐

import os,sys

10. 块注释和行注释,使用#号来注释。

语法规范总结:

规范有很多,平时使用注意以下几点就行:

1、换行和缩进

2、模块导入

3、注释

更多了解,可以参考官方文档:https://www.python.org/dev/peps/pep-0008/

变量与变量类型

变量定义:大家知道程序是用来处理数据的,而变量是用来存储数据的。python中变量不需要声明类型,可以存储任何值,每个变量在内存中被创建,

变量赋值以后该变量才会被创建。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。

等号(=)用来给变量赋值。

python五种标准的数据类型:

1、Numbers(数字)

2、String(字符串)

3、List(列表)

4、Tuple(元组)

5、Dictionary(字典)

6、Set(集合)

Python3 的六个标准数据类型中:

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);

可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。

Python 数字

当指定一个值(数字),数字对象就被创建:

var = 1

print(var)

python有四种不同的数字类型:

int(有符号整型)

long(长整型[也可以代表八进制和十六进制])

float(浮点型)

complex(复数)

Python字符串

字符串转换

# 字符转换

str(x) # x为任意数据类型

# 字符串合并

a = 123

b = "123"

print(str(a) + b)

# 字符串截取

a = "a=abc,b=123,abcd,(1,2,3)"

print(a.split(','))

print(a.split(',', 2))

print(a.split(',')[1].split('=')[1])

#字符串替换

a = "a=abc,b=123,abcd,(1,2,3)"

print(a.replace(',', ':'))

print(a.replace(',', ':', 2))

print(a.replace(',', ':', 3))

b = a.replace(',', ':', 3)

print(b)

Python 列表

List(列表)是python中使用最频繁的数据类型

列表可以完成大多数集合类的数据结构实现,它支持字符,数字,字符串甚至可以包含列表(即嵌套)。

列表用 [ ] 标识,是 python 最通用的复合数据类型。列表中值的切割也可以用到变量 [头下标:尾下标]

一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step)。当只有一个“:”时,默认第三个参数step=1;当一个“:”也没有时,start_index=end_index,表示切取start_index指定的那个元素。

切片操作基本表达式:object[start_index:end_index:step]

step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情说三遍!

start_index:表示起始索引(包含该索引对应值);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

end_index:表示终止索引(不包含该索引对应值);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”

"""列表"""

a = [1,2,"python",(3,"aa")]

# 删除

a.remove("python")

print(a)

# 新增

a.append(4)

print(a)

a.insert(1,"java")

print(a)

# 修改

a[2] = "python"

print(a)

# 合并

b = [5,6,7]

a.extend(b)

print(a)

b = b + a

print(b)

Python 元组

元组不可修改,使用小括号()存储数据,元素之间使用逗号分隔。

a = (1, "a", (3, "python"))

print(a[0])

print(a[1])

print(a[2])

print(a[-1])

print(a[2][-1])

print(a[-1][0])

print(a[1:-1])

Python 字典

列表是有序集合,而字典是无序集合。两者区别,字典表现形式是{},并且通过键来存取的,而列表是通过偏移存取。

字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。键(key)必须使用不可变类型。

在同一个字典中,键(key)必须是唯一的。

"""字典"""

a = {'a':1,'b':2,'c':3}

print(a)

# 删除

del(a['a'])

print(a)

b = {'a':4,'d':5}

# 更新

a.update(b)

print(a)

Python 集合

使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用set() 而不是 { },因为 { } 是用来创建一个空字典。

# 集合

test = {1,2,3,"python","java","python"}

# 输出元素,重复的自动去掉

print(test)

# 增加元素

test.add("php")

print(test)

# 增加多个

test.update([4,5,6])

print(test)

# 删除元素

test.remove(6)

print(test)

a = set('abc')

b = set('abcde')

print(a)

print(a - b) # 差集

print(b - a)

print(a | b) # 并集

print(a & b) # 交集

print(a ^ b) # a与b不同时存在的元素

# 成员关系判断

member = {"python","php","java","c#"}

if "python" in member:

print("python在集合中")

else:

print("不在集合中")

运算符

自动化测试中,经常使用运算符,对数据进行处理。

python中运算符主要有:

1、算术运算符

2、比较(关系)运算符

3、赋值运算符

4、逻辑运算符

5、位运算符

6、成员运算符

7、身份运算符

经常使用的是赋值、算术,比较这三种,当然在断言的时候,会使用成员运算符。判断两个变量是否是相同的标识(id),可以使用身份运算符。

当然,条件判断的时候,还会使用逻辑运算符。

# and和or 左右两边不一定是布尔类型,有可能是表达式,and左边为真时,才会去算右边的值,or左边为真时,就不会去算右边的值,not右边值为假才会返回真。

# 0为False , 1为True

a = 1

b = 2

c = 0

print(a and b)

print(a or b)

print(not a)

print(bool(a))

print(a and c)

print(bool(c))

print(c or b)

print(a and b and c)

if a > 0 and b:

print(a)

字符串

python使用时,字符串是非常频繁的一个数据类型。

创建方式:使用''或"",即可。

访问方式:通过[]来截取。

# 字符串合并

a = 123

b = "123"

print(str(a) + b)

# 字符串截取

a = "a=abc,b=123,abcd,(1,2,3)"

print(a.split(','))

print(a.split(',', 2))

print(a.split(',')[1].split('=')[1])

# 字符串替换

a = "a=abc,b=123,abcd,(1,2,3)"

print(a.replace(',', ':'))

print(a.replace(',', ':', 2))

print(a.replace(',', ':', 3))

b = a.replace(',', ':', 3)

print(b)

# 访问

a = "adfa_2323"

print(a[:-2])

在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符,使用最频繁的是:

# 续行符

print("test \

test")

# 反斜杠

print("\\")

# 换行

print("test\ntest")

# 响铃

print("\a")

# 单引号

print('\'')

# 双引号

print("\"")

字符串前面使用r,是显示原始字符串,不是转义

字符串前面使用u,一般是中文使用u,进行unicode编码时,防止中文乱码。

字符串前面使用b,是bytes字节串类型。

a = u"中国"

print(a)

b = r"fadfa\\"

print(b)

c = bytes("中国",encoding='utf8')

print(c)

d = c.decode()

print(d)

输出结果:

中国

fadfa\\

b'\xe4\xb8\xad\xe5\x9b\xbd'

中国

在Python3中,所有的字符串都是Unicode字符串(16位)。

函数

1、函数的定义:什么是函数呢?

其实函数就是一段代码的集合,里面是有很多方法和内容,可以重复调用的。主要是内置函数和自定义函数。

平时我们使用print,其实就是python的内置函数。

python主要的内置函数如下:

2、函数的返回值。

这主要是我们自己定义的函数,如:

#!/usr/bin/python3

# 可写函数说明

def sum( arg1, arg2 ):

# 返回2个参数的和."

total = arg1 + arg2

print ("函数内 : ", total)

return total

# 调用sum函数

total = sum( 10, 20 )

print ("函数外 : ", total)

3、函数的参数。

主要分为四种:位置参数,默认参数,不定长参数(可变和关键字参数)

位置参数:

调用函数时,传入实参的值按照位置顺序以此赋给形参。下面这个函数中的x和n就是位置参数。

def power(x, n):

s = 1

while( n ):

n = n - 1

s = s * x

return s

默认参数:

python的函数同时还允许你给函数的参数设置默认值,当调用者没有给出参数的值时自动使用默认值。设置默认参数时要注意,必选参数必须在默认参数之前。

def power(x, n = 2):

s = 1

while( n ):

n = n - 1

s = s * x

return s

注意:默认参数必须指向不可变对象,否则会发生不可预知的错误。

可变参数:

在Python函数中还可以定义可变的参数,参数的个数可以是任意个,定义参数时,只需要在参数的前面加一个 * 符号即可。

def N(×num):

s = 1

for n in num:

s = s * n

return s

A = N(1,2,3,4,5,6,7,8,9,10) #A = 3628800

关键字参数(keyword argument):

python的关键字参数允许你传入任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。传入关键字参数的时候必须指定参数的名称(参数名由调用者自行取定),否则该参数会被认为是位置参数从而报错。

def keyword_params(**kwargs):

return kwargs

keyword_params(key1="values1",key2="values2")

可变和关键字参数混搭:

def test_fuc(*args,**kwargs):

print(args,111)

print(kwargs,222)

test_fuc(1,2,3,key1="values")

注意事项:

*args与**kwargs的区别,两者都是python中的可变参数。

*args表示任何多个无名参数,它本质是一个tuple;

**kwargs表示关键字参数,它本质上是一个dict;

如果同时使用*args和**kwargs时,必须*args参数列要在**kwargs前。

在这个场景下使用这两个关键字。其实并不是必须写成*args 和**kwargs。  *(星号)才是必须的. 你也可以写成*ar 和**k. 而写成*args 和**kwargs只是一个通俗的命名约定。

关键字和位置参数混搭:

def person(name, age, **kw):

print('name:', name, 'age:', age, 'other:', kw)

preson("J",33,city = "Beaijing",job = "Engineer")

4、函数嵌套

在函数中再定义一个函数,就叫做嵌套函数。嵌套函数可以访问包围范围内的变量。

如图:

def add_test(a,b):

c = a + b

def ride_test(x):

x = x*x

print(c)

return x

return ride_test(c)

print(add_test(1, 2))

这里嵌套会涉及一个闭包概念,闭包就是把内部函数作为一个变量来使用。

我们可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包。

格式如下:

def 外层函数(参数):

def 内层函数():

print("内层函数执行", 参数)

return 内层函数

内层函数的引用 = 外层函数("传入参数")

内层函数的引用()

简单的一个闭包案例:

def outter(x):

def inner(y):

return x + y

return inner

test = outter(2)

print(test(3))

闭包也叫工厂函数,它的作用如下:

a:记忆外层作用域中的值;

b:可以保护变量不被修改;

c:可以让一个变量常驻内存;

内函数中修改外函数的值:

def outter(x):

a = 100

def inner(y):

nonlocal a

a = 200

return x + y + a

return inner

test = outter(2)

print(test(3))

这个结果是205,而不是105。

一般在函数结束时,会释放临时变量,但在闭包中,由于外函数的临时变量在内函数中用到,此时外函数会把临时变量与内函数绑定到一起,这样虽然外函数结束了,但调用内函数时依旧能够使用临时变量,即闭包外层的参数可以在内存中进行保留

如果想要在内函数中修改外函数的值,需要使用 nonlocal 关键字声明变量。

在看一个典型的装饰器原型:

import time

def showtime(func):

def wrapper(x):

s_time = time.time()

func()

e_time = time.time()

print('speed is {}'.format(e_time - s_time))

return x

return wrapper

def wait():

print('waiting...')

time.sleep(3)

foo = showtime(wait)

print(foo(3))

运行结果:

waiting...

speed is 3.000234603881836

3

总结

有兴趣加入测试交流群,欢迎测开爱好者加入我们~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

libcurl实现解析(3) - libcurl对select的使用

1.前言 在本系列的前一篇文章中。介绍了libcurl对poll()的使用。參考"libcurl原理解析(2) - libcurl对poll的使用"。 本篇文章主要分析curl_poll()中对select()的封装使用。与前一篇类似,我们仅仅分离出与select相关的代码。 2.curl_poll函数分析 这个函数…

C#子窗体运行时无法正常最大化的解决办法

通常情况下,要是一个窗体运行时最大化,最简单的做法就是鼠标捏一下将窗体的WindowState属性设为Maximized。但要是一个窗体是MDI的子窗体的话,以上做法就失灵了!这是我们就选择用代码控制,示例代码如下: Education_Train TE = new Education_Train(); TE.MdiParent = thi…

C和指针之高级指针话题通过函数指针实现在链表中找到特定的值

1、问题 通过函数指针实现在链表中找到特定的值,这里可以是int 类型或者char *类型 思路: 整形数据自己写比较函数,字符串比较用strcmp,然后把这个函数指针传递到函数作为参数。 2、代码实现 #include <stdio.h> #include <string.h>typedef struct No…

internet访问局域网内部方法之----------路由器端口映射

很多人每天都问为什么要端口映射&#xff1f;例如:通过路由器上网的&#xff0c;网站自己可以访问&#xff0c;但是别人就不能&#xff1b;输入127.0.0.1可以访问&#xff0c;别人还是看不到&#xff1b;输入localhost可以看到&#xff0c;但是别人就是看不到&#xff0c;气人啊…

Xamarin效果第四篇之CollectionView子项右侧布局

前面基于PopupPage然后实现了手机底部弹窗;今天再次基于他从手机右侧弹出一个可以交互的窗口;直接看看最终实现的效果:右侧弹窗不是重点主角是排行榜:我还是直接使用CollectionView然后对于头像那一块还是CollectionView然后通过修改他的子项和Header模板然后旋转让子项从右侧布…

由于TempDB设置错误导致SQL Server无法重启错误的解决方案

场景&#xff1a;前几天接到一个朋友的电话&#xff0c;说他们由于将TempDB设置错误导致SQL Server无法重启&#xff0c;让我帮忙看看。他们本来是想将TempDB的文件挪动到其他路径,比如准确的脚本应该是&#xff1a; USE master GO ALTER DATABASE tempdb  MODIFY FILE (…

知道经纬度用python画路线图_神级程序员教你用Python如何画一个中国地图!(好好玩)...

为什么是Python先来聊聊为什么做数据分析一定要用 Python 或 R 语言。编程语言这么多种&#xff0c; Java , PHP 都很成熟&#xff0c;但是为什么在最近热火的数据分析领域&#xff0c;很多人选择用 Python 语言&#xff1f;数据分析只是一个需求&#xff0c;理论上来讲&#x…

判断一个偶数(大于4)是不是两个素数之和

问题:编制具有如下原型的函数sushu(int n),用来判断整数n是否为素数; 而后编制主函数,任意输入一个大于4的偶数d,找出满足d=d1+d2的所有数对,其中要求d1与d2均为素数(通过调用sushu函数来判断素数)。如偶数18可以分解为11+7以及13+5;而偶数80可以分解为:43+37、61+19、…

C和指针之动态内存分配堆、栈、全局区(静态区)、常量区对比总结学习笔记

一、各个区的介绍 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是…

.NET 6 使用 string.Create 提升字符串创建和拼接性能

本文告诉大家&#xff0c;在 dotnet 6 或更高版本的 dotnet 里&#xff0c;如何使用 string.Create 提升字符串创建和拼接的性能&#xff0c;减少拼接字符串时&#xff0c;需要额外申请的内存&#xff0c;从而减少内存回收压力本文也是跟着 Stephen Toub 大佬学性能优化系列博客…

java读取csv文件

2019独角兽企业重金招聘Python工程师标准>>> CSV其实就是COMMA SEPARATED VALUE的缩写。在开发中用Java操作csv文件有专门的的API叫javacsv.jar javacsv.jar下载地址&#xff1a; http://sourceforge.net/project/showfiles.php?group_id33066 package com.syc.tes…

python中plt.hist_关于python中plt.hist参数的使用详解

python matplotlib hist堆积直方图&#xff1f;可以帮小编实现下面两张图的代码吗与怪物战斗的人&#xff0c;应当小心自己不要成为怪物。当你远远凝视深渊时&#xff0c;深渊也在凝视你。from sklearn.datasets import load_iris import matplotlib.pyplot as plt iris load_…

两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)

本篇文章主要介绍了"两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)"&#xff0c;主要涉及到两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)方面的内容&#xff0c;对于两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)感兴趣的同学可…

子窗体菜单合并到父窗体菜单的解决办法

系统中既有父窗体又有子窗体&#xff0c;子窗体添加下拉菜单&#xff0c;运行时子窗体的菜单会合并到父窗体的菜单中&#xff0c;解决办法是&#xff0c;将子窗体菜单控件的AllowMerge属性设为false。

C和指针之预处理器之普通c/c++文件的编译过程

1、简单总结c/c++文件的编译3个过程 1)、预处理器进行预编译 比如我们测试这段代码 #include <stdio.h>int main() {printf("hwllo word\n");return 0; } 主要做的事情是: (1)将所有的#define删除,并且展开所有的宏定义。说白了就是字符替换 (2)处理所…

Android笔记:Activity

1.Android可视化界面结构: 一个Android应用的可视化界面最底层是Activity,在他之上是一个Window对象,在window之上通常是布局容器,再上面才是用户直接交互的组件(按钮,文本框)交互组件(UI控件)-->布局容器(layout)--->Window对象--->Activity2.Activity生命周期 …

ASP.NET Core使用编译时依赖关系注入(DI)

前言依赖关系注入(DI)&#xff0c;是一种在类及其依赖项之间实现控制反转(IoC)的技术。在ASP.NET Core中&#xff0c;依赖关系注入是“一等公民”&#xff0c;被大量使用。通常&#xff0c;使用接口作为依赖关系实现抽象化&#xff0c;并且在服务容器中注册依赖关系&#xff0c…

oracle 约束 Oracle 10g学习系列(5)

这篇文章来自网络&#xff0c;写的挺好&#xff0c;转过来了。维护数据的完整性概述&#xff1a;数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则。在Oracle中&#xff0c;数据完整性可以使用约束、触发器、应用程序&#xff08;过程、函数&#xff09;三种方法来实现…

使其正序排序 打印一串数字_JavaScript计数排序算法

一、计数排序算法计数排序(Counting sort)是一种稳定的线性时间排序算法。该算法于1954年由 Harold H. Seward 提出。计数排序使用一个额外的数组&#xff0c;数组的下标对应待排序的数字。然后根据新数组的下标来获得正确的顺序。就像给每个位置按数字顺序做好标记&#xff0c…

shiro real的理解,密码匹配等

1 、定义实体及关系 即用户-角色之间是多对多关系&#xff0c;角色-权限之间是多对多关系&#xff1b;且用户和权限之间通过角色建立关系&#xff1b;在系统中验证时通过权限验证&#xff0c;角色只是权限集合&#xff0c;即所谓的显示角色&#xff1b;其实权限应该对应到资源&…