python接口自动化测试之python基础语法

一、pycharm的使用和python基本语法

(一)、pycharm的使用和python环境

1、python以及pycharm的安装

python 的版本选择:3.x 版本,不要安装2.x 版本,有很多语法不一样

如何确定自己 python 版本: cmd: python

不是内部命令:python没有正确安装,原因大概率是因为没有配置环境变量(配置环境变量后重启电脑生效)

指定 python 的安装目录:一般来说是安装在 d:\python37

测试python是否安装成功

cmd: python

cmd: pip ,或者 pip3 , 有任何一个出现命令不存在,

额外注意:loadrunner 中也有pip,这个pip配置环境变量了之后,python中的pip也需要配置环境变量

prcharm 的版本选择:社区版够用

pycharm 只是一个工具,python 才是关键

2、pycharm 新建项目

新建项目

file ---> New Project

退出项目

file ---> Close Project

切换项目

file ---> Open

file ---> Open Recent

3、文件、目录、包的创建和管理

Project ---> 右键 ,可以新建文件、目录和包

4、pycharm 的基础使用

python 代码是保存到以 .py 结尾的文件当中

.py 文件又是放到各个文件夹(目录)下面的

5、如何运行代码:

右键,点击 run

命令行运行:点击底下的 Terminal

进入项目路径

python 拼接好的路径/python文件.py

6、安装第三方库

第三方库:是别人已经写好的 python 代码

第一种方法:

安装:pip install 库名

卸载:pip uninstall 库名

第二种方法:pycharm :不要勾选 user's site package

第三种方法:库放在国外的服务器上,需要用到国内安装源,python国内源

pip install 库名 -i 源地址

pip install openpyxl -ihttps://pypi.tuna.tsinghua.edu.cn/simple

python国内源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://pypi.hustunique.com/ 山东理工大学:http://pypi.sdutlinux.org/ 豆瓣:http://pypi.douban.com/simple/

(二)、python基本语法

1、基本语法

print 输出

表示在屏幕上打印出(显示出)

使用的任何的代码,双引号是半角,英文

print 默认输出是换行的,不同的数据之间用逗号隔开

python注释: 表示在 python 当中不会运行的文字(不会当成代码), 是说明下面的代码是什么?

# 表示单行注释 , Ctrl + /

""" """ 表示多行注释

''' ''' 表示多行注释

缩进:

现在这个阶段,所有的代码全部顶格写,不要进行缩进。

数值

和数学中的数值表示是一样的(注意点:数值不用加引号)

字符串

python 使用引号来表示字符串(一串文字)

变量

什么是变量:是用来存储数据

a = 100

b = 200

c = “ hello world”

变量名的命名规范:

只能包含数字、字母、下划线,

不能以数字开头,

不能有关键字( 注意点 )

python 中所有的关键字: keyword.kwlist

尽量做到见名知意

尽量不要用拼音

标识符:(凡是我们自己取的名字,都是标识符。)

规范:标识符由字母、数字、下划线组成,不能使用关键字

标识符包括:变量名、函数名、类名、模块名、项目名

在python中,所有标识符可以包括英文,数字以及下划线(_),但不能以数字开头。

python 中的标识符是区分大小写的,大写的 A 和小写的 a 不一样

标识符的命名风格:

下划线命名法:

规范:单词字母小写,单词之间使用下划线连接

如:max_number ,test_data

大驼峰命名法:

规范:每个单词的第一个字母大写

如:MaxNumber , TestData

小驼峰命名法:

规范:第一个单词以小写字母开始,第二个单词的首字母大写

如:maxNumber , testData

input 用户输入

从控制台里面获取一个数据,获取到的类型是字符串类型

二、python中常见数据类型

(一)、数值类型 & 运算符

1、数值类型数据

数值类型

整数(int):整数

浮点数(float):小数

布尔值(bool):只有两个值 True 和 False

2、python 常见运算符

算术运算符:

/

除法运算一定要注意:除数不能为0

除数如果为0,就会报错:ZeroDivisionError: division by zero

//

整除

%

余数:模运算


```

# +print(5+6)# -print(7-8)# *print(2*3)# /# 只要是进行除法运算,得到的是一个 floatprint(4/3)print(4/2)# 除法运算一定要注意,除数不能为 0# 除数如果为0,就会报错:ZeroDivisionError: division by zero# 程序报错以后,就无法继续运行# print(2/0)# print('hello world')# // 得到的是一个整数。 整除print(4// 3)# % 取余数 : 模运算print(4%3)# ** 幂运算 4的3次方print(4**3)

```

赋值运算符

+=

-=

*=

/=

//=

%=

**=

```

name = 'yuze'age = 18#涨一岁age = age + 1print(age)#缩写 age += 1 ==> age = age + 1age += 2print(age)age /= 3print(age)

```

比较运算符: 比较运算得到的结果是一个 bool 值, True 或 False

<=

>=

!=

```

> 大于print(5 > 4)# True< 小于print(6 < 3)# False>= 大于等于print(6 >= 3)# True<= 小于等于print(6 <= 3)# False!= 不等于print(6 != 3)# TrueTODO: == 才是比较运算, 一个 = 是赋值运算print(6 == 6)

```

逻辑运算 : 可以使用()提高优先级

and

or

not

```

a =3>4print(a)b =4!=5print(b)# 运算 and# 每一个都为 Trueprint(aandb)# False# 运算 or# 只要有一个为 Trueprint(aorb)# True# 练习a =Trueb =5==4# Falsec =5!=3# Trueprint(aandborc)# Trueprint(aorbandc)# True# python 的运算有没有优先级,如何设置优先级# 使用 () 设置优先级print(((aandb)orc)andb)# not 取反print(not(b))# True

```

身份运算

is

is not

成员运算

in

not in

```

# inname ='yuz'print('u'inname)# Trueprint('uz'inname)# Trueprint('uai'inname)# False#TODO:in 一定是连着的, yz 是一个整体print('yz'inname)# Falseprint('Y'inname)# False

```

3、随机数模块: random (python 官方库)

随机生成 0-1 之间的浮点数:random.random()

随机生成 0-100 之间的浮点数:random.randint(1, 100)

```

importrandomf_num = random.random()print(f_num)num= random.randint(0,100)print(num)

```

(二)、字符串

本节问题:

问题一:python中如何表示字母,比如要将一个人的名字储存下来?

问题二:字符串如何定义?

问题三:字符串如果要换行怎么办?

问题四:数值类型的数据可以转换成字符串吗?

问题五:可以把两个字符串组成一个吗?

问题六;如何获取字符串中某个具体的字符?

1、字符串的定义:

单引号、双引号:定义单行字符串

三引号、三双引号: 多行字符串定义

空字符串: s=''

str():

注意点:字符串中有单引号时,外面用双引号注意区分

```

"""字符串的定义

如何表示字符串:

- 引号表示字符串

- 单引号 ''

- 双引号 ""

- 三引号 ''' '''

- 三双引号 """"""

"""name1 ="yuze"print(name1)name2 ='yuze'print(name2)name3 ='''yuze'''print(name3)name4 ="""yuze"""print(name4)print(name1 == name2 == name3 == name4)# Trueprint(name1 == name2)# Trueprint(name1 == name3)# Trueprint(name1 == name4)# True

```

2、字符串的切片和下标取值

1、下标索引取值

下标取值:可以正向取,也可以反向取

注意点:正向从 0 开始,反向从 -1 开始

```

name ='yuzwang'print(name[1])# uprint(name[0])# y# 获取第3个字符print(name[2])# z# 获取 gprint(name[6])print(name[-1])

```

2、切片: [:][::]

问题:下标取值只能获取单个元素,现有字符串 str1='hello python' ,如果要获取出来 python 应该怎么做?

切片的语法: 和下标取值一样使用中括号进行切片,有两种用法:

[a:b] :a代表起始位置下标, b 代表终止位置下标(左闭右开);

[a: b: c] : a代表起始位置下标, b 代表终止位置下标(左闭右开),c 代表步长。

```

"""字符串的切片 slice

  获取多个字符

  索引获取的公式:

      m_str[start:end:step]

  注意:end - start 的符号 必须和 step 的符号相同才可以获取到索引

  step 的值不能为0

"""name ='yuzwang'# 要 1 和 2print(name[1:2])# uprint(name[0:1])# y#TODO:这个才是对的#TODO:顾头不顾腚,取头不取尾,取左不取右print(name[0:2])# yuprint(name[3:6])# wan# 什么是 step , 取完第一个索引,把索引 + 多少# step = 2print(name[3:6:2])# wnprint(name[1:5:3])# ua# step 可以为负数print(name[5:1:-3])# nzprint(name[5:1:3])# 取不到值 Noneprint(name[1:4:-2])# 取不到值 None#TODO:end - start 的符号 必须和 step 的符号相同才可以获取到索引#TODO:step 的值不能为0,否则会报错:ValueError: slice step cannot be zeroprint(name[1:5:0])#TODO:IndexErrorprint(name[1000000])# IndexError: string index out of rangeprint(name[1:1000000])# uzwang 不会报错,会取到所有值name ="yuzewang"# 省略 end ,表示取到最后print(name[1:])# 省略 start ,表示从 0 开始print(name[:5])# 复制,copy  从头到尾,#TODO:面试题:复制字符串print(name[:])name_copy = name[:]print(name_copy)# 倒序  '123456' ==> '654321'# TODO:面试题:倒序一个字符串print(name[::-1])# gnawezuy

```

3、字符串拼接和转义

+ 号:'hello' + 'python'

字符串转义:

\n: 换行符

\t: 水平制表符

关闭转义:r'hello \n python'

```

name ='yuz'family_name ='wang'print(name + family_name)print(name +' '+ family_name)字符串和数字能不能相加print('yuz'+ 7)# 字符串和数字不能直接相加,会报错:TypeError: must be str, not intprint('yuz'+ str(7))# yuz7数据类型的转化print(int(name))# 报错:ValueError: invalid literal for int() with base 10: 'yuz'print(int('12'))# 12print(bool(34))# Truebool 转化,只要是非0,非空的就是True字符串换行'\'不会分开成两行name ="yuze ooasfjojo"\"wefwllfjlj"print(name)# yuze ooasfjojowefwllfjlj# 三引号换行,得到多行数据name ="""yuze flaljlkfjlajl

lsajllakj fjk

sjljjfljladf

aljfl

"""print(name)# 单引号中 \n 表示换行name ='kaixina lajj\nlfljajljssfjdlk\njljajs'print(name)

```

4、字符串常用方法

join : 字符串拼接

``

name ="qin er cai"# 字符串拼接print(name +'wang')# 使用 join 拼接print(name.join(['a','b','c']))# aqin er caibqin er caic# 时间 ['2020', '08', '03'] 用 / 连接起来print('/'.join(['2020','08','03']))# 2020/08/03print('2020'+'/'+'08'+'/'+'03')# 2020/08/03

``

find : 查找元素的位置

```

# find:在字符串当中查找某个字符或者字符串的位置# 会得到索引a ="wangyuze is coming"print(a.find('e'))# 7index= a.find('e')print(index)# 7# 如果找的有两个呢? i,会得到第一个print(a.find('i'))# 9# 如果是一个子串呢? ngprint(a.find('ng'))# 2# 如果找不到怎么办?会得到 -1 ,这是规定print(a.find('isnot'))# -1# 如果子串不在一起,也是找不到,返回 -1print(a.find('wn'))# -1# index 约等于 find# 区别:index 找不到元素的时候,会报错,find 找不到的时候返回-1print(a.index('ng'))# 2print(a.index('wn'))# ValueError: substring not found

```

count : 查找元素的个数

```

# count 统计某个字符出现的次数m_str ='foweofpweef'print(m_str.count('o'))# 2song ="我爱你,我喜欢你,我..."print(song.count('我'))# 3

```

replace : 替换字符

```

# replace 替换song="我爱你,我喜欢你,我..."print(song.replace('你','ta'))# 我爱ta,我喜欢ta,我...

```

split : 字符串分割

```

#split切分、切割 ==》 和join相反 time_string ='2020/08/03'print(time_string.split('/')) # ['2020','08','03']

```

format : 格式化输出

upper : 将字母大写

```

# upper 所有字母都大写name='yuze'print(name.upper())# YUZE

```

lower : 将字母小写

```

# lower 所有字母都小写name='JECK'print(name.lower())# jeck

```

strip : 去掉两边的特殊字符,如果什么都不传,就是去掉空格或者换行符

```

# strip 去掉两边的特殊字符,如果什么都不传,就是去掉空格或者换行符name =' yuze wang 'print(name.strip())# yuze wangprint(name) cp ="&雨泽&哈哈&"print(cp.strip('&'))# 雨泽&哈哈

```

len : 计算字符串长度

```

# len 计算字符串的长度name='yuzewang 'print(len(name))# 9

```

5、字符串格式化输出

format 格式化输出

format() 功能强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用 {} 作为特殊字符代替 %


format 字符串的格式化

```

​```# 现在需要打印下面的格式:-------------------借条借款人:yuz债权人:double king金额:500-------------------loan_name = 'yuz'rich_man = 'double king'money = 500# # 方法一:# print("---------------------")# print('借条')# print('借款人:' + loan_name)# print('债权人:' + rich_man)# print('金额:' + str(money))# print('---------------------')# # # 方法二:# {} 表示占坑符,占位符# 位置一定要匹配,不能乱填顺序# print("""# -------------------# 借条# 借款人:{}# 债权人:{}# 金额:{:.2f} 万# -------------------# """.format(loan_name, rich_man, money))# # # # 方法三:# # f-string : python3.6 以后才支持# print(f"""# -------------------# 借条# 借款人:{loan_name}# 债权人:{rich_man}# 金额:{money} 万# -------------------# """)

```

传统的格式化输出 %

(三)、列表和元组

1、列表

列表的定义

是一种数据类型,可以用来存储多个数据

列表用 [ ] 来标识

列表内部的元素可以是任意类型的

列表是使用最频繁的数据类型之一

列表的常见操作

下标取值(索引取值):获取某一个元素

切片操作:获取多个元素

有步长的切片过程:先根据起始位置和终止位置,将内容切出来,然后再根据步长分为若干部分,然后将每部分的第一个元素拿出来,得出结果。

修改元素的值:可以通过下标修改指定位置的元素。

```

# 5 个人,5个大佬 , 使用列表big_boss = ['Demons','Go','EE','上善若水','summer']print(big_boss)# 元素可以是任意的数据类型big_boss = ['Demons',11,True,33.33,'summer']print(big_boss)big_boss = ['Demons',11,True,33.33, ['a','b','c']]print(big_boss)big_boss = ['Demons',11,True,33.33, ['a','b',['yuz',True]]]print(big_boss)# 索引: 获取索引为 0 的元素print(big_boss[0])# Demonsprint(big_boss[-1])# ['a', 'b', ['yuz', True]]print(big_boss[-2])# 33.33print(big_boss[2])# True# 获取 aprint(big_boss[-1][0])# alast_one = big_boss[-1]print(last_one[0])# a# 获取 'yuz'print(big_boss[-1][-1][0])# yuz# 切片print(big_boss[:3])# ['Demons', 11, True]

```

列表嵌套

列表中如果有多层嵌套,取值时需要一层一层的取值

```

lst = [ 'a', 'b', [1,2,3]]print(lst[0]) # aprint(lst[-1][1]) # 2

```

列表的方法

增:append 、insert 、 extend

删:pop 、 remove

改:通过下标修改值

查:index 、 count

其他:reverse 、 sort

```

# TODO:坑dalaos = ['随风']new_dalao = dalaos.append('利己')print(dalaos) # ['随风','利己']#append() 返回 Noneprint(new_dalao) # None# 再添加多个,['一罐','本本','可爱','美雪'] 添加到最后dalaos.extend(['一罐','本本','可爱','美雪'])print(dalaos)# TODO: 坑2报错:AttributeError:'NoneType'objecthasnoattribute'append'new_dalao = dalaos.append('sfo').append('hello').append('sof')print(new_dalao)# 增加某个元素,修改的是原来的变量 lstlst = ['yuz','shanshan','rita']lst.append('裴纶')print(lst) # ['yuz','shanshan','rita','裴纶']#insert指定索引位置添加元素,不是获取索引,不用[]lst.insert(1,'仙人球')print(lst) # ['yuz','仙人球','shanshan','rita','裴纶']#extend添加多个,可以合并2个列表lst.extend(['tiger','f2'])print(lst) # ['yuz','仙人球','shanshan','rita','裴纶','tiger','f2']lst = [1,2,3]lst.append(3)print(f"第一次尝试{lst}") # 第一次尝试[1,2,3,3]# lst.extend(3)#print(f"第二次尝试{lst}") # 报错:TypeError:'int'objectisnot iterablelst.extend([3])print(f"第三次尝试{lst}") # 第三次尝试[1,2,3,3,3]a= [1,2,3]b= [4,5,6]#b是作为一个整体,一个元素,添加到a当中#a.append(b)#print(a) # [1,2,3, [4,5,6]]#b是拆开里面元素,作为多个元素,添加到a当中a.extend(b)print(a) # [1,2,3,4,5,6]

```

```

"""列表的删除-remove-delete-pop"""#remove: 在列表当中删除指定的值big_boss = ['糖','木易','均价']big_boss.remove('木易')print(big_boss) # ['糖','均价']#delete异类:尽量不要用# del big_boss[0]#print(big_boss) # ['均价']#pop0代表索引为0big_boss.pop(0)print(big_boss) # ['均价']# 获取索引为0的值print(big_boss[0])big_boss.append('木易')print(big_boss) # ['均价','木易']

```

```

"""列表的修改

lst[0] = 1

"""lst = [1,2,3]lst[1] ='a'print(lst)# [1, 'a', 3]lst[1],lst[2] ='c','d'print(lst)# [1, 'c', 'd']lst[1:] =5,6print(lst)# [1, 5, 6]

```

```

"""列表的方法

- index

- count

- sort

- reverse

- clear

"""lst = [4,5,6,5]# # 统计# print(lst.count(5)) # 2## # index 查找得到第一次出现的索引值# print(lst.index(5)) # 1## # sort 排序# print(lst.sort()) # None## lst.sort()# print(lst) # [4, 5, 5, 6]### # reverse 反向,倒序 ,  相当于 [::-1]# lst.reverse()# print(lst) # [6, 5, 5, 4]# 反向排序lst.sort(reverse=True)print(lst)# [6, 5, 5, 4]# clera 清除一个列表lst.clear()print(lst)# []

```

2、元组

元组的定义:

元组定义在小括号中,元组内部的数据:它支持数字,字符串甚至可以包含元组(即嵌套)

元组的常见操作

下标取值:元组内部的数据是有序的,可以通过下标获取对应的元素

注意点

t = () 空元组

t = (1,) 只有一个数据的时候要注意加逗号

元组的值不可以修改,是属于不可变数据

元组的方法

count : 查找元素的个数

index :查找元素下标

```

tuple_yuz = ('yuz','一罐',['闲人','七七','小骄傲'])# 修改的是元组的元素,元组的元素是列表# tuple_yuz[2] = ['新列表']# print(tuple_yuz) # 不能修改元组的元素# 为什么这里可以改??# 元组的不可变是相对的,不是说里面所有的内容都完全不能变# 只要看索引的前面是不是一个可变的类型tuple_yuz[2][0] = ['新列表']print(tuple_yuz)tuple_yuz = ('yuz','一罐',{'tuple':'yuze'})# 索引前面是元组,代表我们要修改的是元组的元素,不可以# tuple_yuz[2] = 'hello world'# tuple_yuz[2] 是字典,可变类型,可以直接修改tuple_yuz[2]['name'] = 'hello world'print(tuple_yuz)# 索引前yuz是列表,可以改变yuz = ['yuz','一罐',('四叶草','晓峰')]yuz[2] = 'hello'print(yuz)# yuz[2]是元组,不可变yuz[2][1] = 'youxi'

```

```

tuple_demo = ()print(tuple_demo)#TODO:坑 ,一个元素的元组表示,不是一个元组,而是去掉括号后的原始数据类型# tuple_demo_2 = (1)# print(tuple_demo_2)# 如果想表示一个元素的元组,记得务必在元素后面加一个逗号# tuple_demo_3 = (1,)# print(len(tuple_demo_3))tuple_demo_4 = (1,3,4,5,5,)print(len(tuple_demo_4))tuple_demo_5 = 1print(tuple_demo_5)# 元组解包family_name,name = ('wang','yuze')# family_name,name = ('wang','yuze','hello') # 值要一一对应,否则会报错print(family_name)print(name)a,b = 3,4print(a)print(b)family_name,name,*other = ('wang','yuze','hello','world')print(family_name)print(name)print(*other)

```

你可能感兴趣的:(python接口自动化测试之python基础语法)