python入门以及接口自动化实践
一、Python入门必备基础语法
# 标识符:python中我们自己命名的都是标识符
# 项目名 包名 模块名
# 变量名 函数名 类名
# 1:字母 下划线 数字组成 命名的时候不能以数字开头
# 2:见名知意:不同的字母和数字之间用下划线隔开
# 3:项目名 包名 模块名 变量名 函数名 都是小写字母,不同的字母之间用下划线隔开
# 4:类名 首字母大写驼峰命名 StudentInfo HttpRequest
# 5:不能以关键字作为标识符 int str float class def...
# 行和缩进:利用缩进来控制代码的级别
# 注释:#表示单行注释 快捷键 ctrl+/ ''' '''成对的三个单引号括起来的内容就是多行注释
# 多行语句 连接符
print('hello\
python\
666')
#python的引号 单引号 双引号 多引号
#成对的单引号 成对的双引号 三引号括起来的内容都是字符串
a='666'
b="666"
c='''666'''
# type()可以帮助判断数据的类型
# 转义:把一些特殊字符变成普通字符
str_1='hello,\'python\''
print("这是第一行\n这是第二行")
print("这是第一行\\n这是第二行")
print(r"这是第一行\n这是第二行")
print(R"这是第一行\n这是第二行")
#python文件的输入输出
# input()从控制台获取一个数据,数据类型是字符串str
# print()
二、python变量以及常用数字类型
# 变量
# 一旦创建了一个变量,然后赋值,就会存储在python内存里
# 如果要引用一个变量,那么在引用之前,要确定是否已经定义并赋值
# 变量命名规范:字母 下划线 数字组成 命名的时候不能以数字开头,都是小写字母
# python常见的数据类型
# 数字 字符串 元组 列表 字典
# 数字:整数 浮点数
# python里面常用的数字的数据:int float 关键词
# type()可以帮助判断数据的类型
# 格式化输出
三、Python字符串的取值&运算
a='python'
# python常用数据类型之一 字符串
# 成对的双引号 或者成对的单引号括起来的内容就是字符串
# 字符串的取值访问
print(a)
print(a[3])
# 字符串:字符串里的元素是由一个个的字符组成
# 字符串都是有索引 从0开始数的
# 字符串的取值方式 字符串名[索引值]
print(a[4])
# 反序访问:从-1开始
print(a[5])
print(a[-1])
# 怎么处理字符串里的特殊字符 转义\ 加r/R
# \n \t \r
a='python\\tpython'
print(a)
# 字符串的运算:+ *
# + 拼接字符串
# * 重复字符串输出
# 判断字符串in not in 成员运算符 返回布尔值True False
a='hello'
print('t' in a)
#如果不同类型的数据拼接
a=666
b='hello'
print(str(a)+b)
四、Python字符串的切片运用
# 字符串的切片
# 根据字符串的索引去取值,缺点:只能取单个值
# 切片:可以根据你的要求去取值 子字符串
# 字符串的切片:字符串名[m:n:k]
# m索引开始的地方 n索引结束的地方 k步长
a='python'
res=a[0:6:1]
print(res)
#k=1 0 1 2 3 4 5取左不取右 n-1就结束了索引的取值
res=a[0:6:2]
print(res)#k=2 0 2 4
res=a[0:6]#如果不输入k,那么k就取默认值k=1 0 1 2 3 4 5
print(res)
res=a[:]#从头取到尾
print(res)
res=a[1:]#默认取完所有的值
print(res)
# 什么时候用切片
# 只想取个值 根据索引来取值
# 如果想获取字符串里的子字符串,就可以用切片
五、Python字符串的格式化输出
# 格式化输出%d整数 %f浮点数 %s字符串
age=18
name='python'
score=99.99
# print(name+",今年"+str(age)+'岁')
# print(name+",今年",age,'岁')
print("%s今年%d岁,数学考了%.2f"%(name,age,score))#按顺序取值
# %d必须放一个整数,%f可以放一个整数也可以放一个浮点数,%s可以放任意值
# 第二种格式化输出 format{}
print("{0}今年数学考了{1}".format(name,score))
# {}里面不指定数值,就会按顺序取值
#{}里面指定数值,就会根据你设置的去取值
#format里面的数据也是有索引的,从0开始标记数据
六、Python字符串的内建函数使用
str_1='hello'
str_2='python'
# 1、字符串的大小写切换 upper() lower()
res=str_2.lower()
print('转换后的结果:{}'.format(res))
# 2、字符串的查找 find()函数
# 单个字符 如果能够找到 就返回单个字符在字符串里的索引值
# 子字符串 如果能够找到 就返回子字符串的第一个元素在原来字符串里面的索引值
# 没找到 返回-1
res=str_1.find('h')
print('查找的结果:{}'.format(res))
# 3、字符串的替换 replace()函数 内建函数可以指定替换次数
res=str_1.replace('l','@',1)
print(res)
print(str_1)
# 4、字符串的切割split()
res=str_1.split('l')
print(res)#返回列表类型的数据,但是元素类型还是字符串
str_3='@@@hello@@@'
# 5、字符串头尾的处理 strip()
res=str_3.strip('@')
print(res)
七、Python之元组的学习和使用
# 数据类型 元组
#1. 元组的标志() 关键字tuple
#2. 元组只有一个数据的时候,请加逗号在数据后面,不然就不是元组类型的数据
#3. 元组里面的数据可以是任何类型 数字 字符串 元组 列表 字典
#4. 元组取值 是根据索引取值,也分为正序和反序(操作同字符串) 元组名[索引值]
#5. 元组切片
#6. 元组的值一旦确定 就无法再更改!删除新增修改都不允许
#7. 判断元素 in not in
tuple_1=()#空元组
tuple_2=(1,)
tuple_3=(1,0.02,'lemon',(1,2,3))
# type()
print(type(tuple_1))
print(type(tuple_2))
八、Python之列表的基础使用
# 数据类型:列表 在python里面是属于使用率最高的数据类型
# 1.标志 [] 关键字list
# 2.a=[]空列表
# 3.里面数据元素可以是任何类型
# 4.列表的取值 也是根据索引来取值 列表名[索引值] 正序反序
# 5.列表的切片 操作同字符串 列表名[m:n:k]
# 6.判断元素 in not in 成员运算符
a=[1,0.05,'python',(1,2,3),[4,5,6]]
print(type(a))
print(a[2])
print(a[0::2])
print(0.05 in a)
print(a[-1][-1])
九、python之列表常用函数
# 列表支持增加删除修改 切片 索引
a=[1,0.05,'python',(1,2,3),[4,5,6]]
# 1.新增操作
# 1)列表名.append() 加元素到列表的最后面 每次只能添加一个元素
# a.append('study')
# print(a)
# 2)列表名.insert() 加元素到列表的指定位置
# a.insert(0,'studying')
# print(a)
# 2.修改列表的元素值
# a[-1]='热爱学习的我'
# print(a)
# 3.删除元素
# 1)列表名.pop() 删除列表的最后面一个元素
# a.pop()
# print(a)
# 2)列表名.pop(index) 删除列表指定位置的元素
a.pop(2)
print(a)
# 4.其他列表
c=[7,6,5,4,3,2,1]
c.sort()#排序
c.reverse()#倒置
c.clear()#清空列表
print(c)
十、Python之字典学习和使用
# 字典
# 1、标志{} 关键字 dict
# 2、a={} 空字典
# 3、字典的数据存储格式是 key:value 键值对
# 4、字典里的value可以是任何类型的数据
# 5、取值方式:根据key取值 字典名[key]
# 6、新增一个元素 字典名[new_key]=value new_key不存在当前字典里
# 7、修改一个元素的值 字典名[old_key]=value old_key存在当前字典里
# 8、删除操作
# 9、清空操作 字典名.clear()
a={'name':'python','age':18,'money':99.99,'score':[100,100,80]}
print(type(a))
print(a)
print(a['name'])
a['sex']='girl'
print(a)
a['money']=1000
print(a)
a.pop('score')
print(a)
十一、python之字典常用函数
a={'name':'python','age':18,'money':99.99,'score':[100,100,80]}
# 增删改查
# 增加元素 如果key不存在 那么就是添加一个新值
# a['class']='python'
# print('修改之后的字典值:{0}'.format(a))
# 修改元素 如果key存在 那么就是修改key对应的值
# a['name']='java'
# print('修改之后的字典值:{0}'.format(a))
# 查询元素 字典名[key]
# print('字典里的姓名是:{0}'.format(a['name']))
# 删除元素 字典是无序的 只能根据key删除 字典名.pop(key)
# a.pop('age')
# print('删除操作之后的字典值:{0}'.format(a))
# 拓展方法:
# a.clear()#清空字典
# del a['money'] #del 字典名[key] 删除指定key的元素
# print(a)
# a.popitem()#随机删除一组数据
# print(a)
# 取值的一些方法
print(a.keys())
print(a.values())
print(a.items())
#a.update(c) c里面的key如果在a里存在,那么就会把c的value值更新到a里面去
#如果不存在,那么就把不存在的key-value添加到a里面去
c={'name':'java','age':'none','class':'javastudy'}
a.update(c)
print(a)
for i in a.keys():
print(i)
十二、Python之运算符
# 算术运算符 + - * / %
# +数字的相加以及字符串的拼接
# *数字的相乘以及字符串的多次拼接
# %取余运算 一般用来判断是否可以整除 或者判断是否是偶数还是奇数
# 赋值运算符 = += -= *= /=
# 比较运算符> >= < <= != == 返回的值类型是布尔值 True False
# 逻辑运算符 and or not 返回的值类型是布尔值 True False
# 成员运算符 in not in 返回的值类型是布尔值 True False
# 判断某个元素是否存在于数据里面
L=[1,2,3,4,'HELLO']
print('H' in L[-1])
c={'name':'java','age':'none','class':'javastudy'}
print('java' in c.values())
十三、python之if条件语句
# 1、if 条件表达式:
# 满足条件表达式(True)要执行的代码
# 2、if 条件表达式:
# A代码
# else:
# B代码
# 3、if...elif...else
# 条件语句:
# 1)、一组条件语句里面 只有一个if 可以有0个或1个else 可以有0个或多个elif
# 2)、if elif 后面必须加条件表达式 否则会报错
# 3)、else 后面不能加条件表达式 否则会报错
# 4)、可以根据不同情况去进行分支划分
# 非0的数字就代表True 0就代表False
# 空数据 空列表 空字符串 空字典 空元组 都是 False
# 非空字典 列表 字符串 元组都是True
十四、python之while循环&break&continue
# while循环
# 死循环
# 非0的数字就代表True 0就代表False
# 空数据 空列表 空字符串 空字典 空元组 都是 False
# 非空字典 列表 字符串 元组都是True
# break:结束循环
# continue:结束本次循环继续下一次循环
十五、python之嵌套for循环&range
s='lemon'
L=['java','python']
t=(1,2,3,0.4,'hi')
d={'name':'python','course':'java'}
for item in s:#for 遍历in后面的数据类型里面的每一个元素 依次挨个访问
print("******item*****:",item)
# for循环 循环的次数 是由in后面的数据类型的元素个数所决定
# range(m,n,k) m开头 n结尾 k步长
# 作用 生成一个整数序列
range(0,5,2)#0 2 4
range(0,10,3)#0 3 6 9
# range(m,n)#k的值默认为1 k=1
# 只传一个值n 开头m默认是0 k默认为1
# 利用range for 完成某个列表的倒序输出
s=[1,2,3,4,5,6,7]
for i in range(6,-1,-1):
print(s[i])
# 嵌套for循环
list_1=[[2,3,8,4,9,5,6],[5,6,10,17,11,2]]
# 请把列表以及列表里面的每一个元素挨个打印出来
for item in list_1:
for value in item:
print(value)
print(type(value))
# print(item)
#利用嵌套for循环打印一个直角三角形到控制台,三角形底边元素都是*
# *
# **
# ***
# ****
# *****
# for i in range(1,6):
# for j in range(i+1):
# if i==j:
# print('*'*j)
for i in range(1,6):
for j in range(i):
print('*',end='')#控制不换行输出
print(' ')#for循环结束后换行
#99乘法表
#1*1=1
#1*2=2 2*2=4
#1*3=3 2*3=6 3*3=9
for i in range(1,10):
for j in range(1,i+1):
print('{0}*{1}={2}'.format(j,i,j*i),end=' ')
print(' ')
十六、python之函数
1)、python之函数的定义
# 自定义函数
# 语法:关键字 def
def print_msg():
'''此函数的作用是完成信息的输出到控制台'''
print('hello python')
# 调用函数 函数名(传递对应的参数)
print_msg()
# 为什么要写函数
# 1:代码可以重用
# 2:保持一致性
# 3:可拓展性
# 函数的三个概念:面向对象 面向过程 函数式编程
# 面向对象--class 类与对象
# 面向过程--def 函数 有return
# 函数式编程--def 函数 没有return
2)、python之函数return关键字
# 面向过程 return
# return后面0个参数 返回的就是None
# return后面1个参数 返回的就是你指定的参数 参数是什么类型 返回的就是什么类型
# return后面有多个参数 返回的参数会放在一个元组里面
# return后面的代码不再执行
def add():#隐式添加return 但是return后面没有任何表达式 所以返回的就是None
print(5+6)
def add_2():
return 6+6
print('第一个函数*****')
add()
result_1=add()
print(result_1)
print('第二个函数*****')
result=add_2()
print('add_2函数运行的结果是:',result)
print(add_2())
# return的作用:当你调用这个函数的时候 会返回一个结果
# 这个结果值 你可以拿到之后 做进一步处理
# 如果没有return 那么返回的就是None
# 什么时候用return 如果想拿到某个函数的运行结果 那么就要就用return
# 利用for循环 range函数编写任意整数序列的求和函数
def add():
count=0
for i in range(1,101,1):
count+=i
return count,666#多加了一个参数
print('函数内部打印求和结果是:',count)
result=add()
print('最终的函数运行结果是:',result)
# 注意点:return相当于一个结束信号,当函数遇到return 后面的代码将不会再执行
3)、python之函数位置参数
# 函数的位置参数 添加参数 参数化
def print_msg(a,b):#位置参数 形参
print(a)
print(b)
print_msg('hello','python')#实参
# 如果是位置参数
# 1:调用函数时候,有几个位置参数 就要传递几个参数
# 2:按顺序赋值,常规用法
# 3:传递的参数 使用顺序不一定按照传递顺序
# 4:参数不一定都会使用
# 5:可以不按顺序赋值,通过形参名的指定去赋值
def add(m,n,k):
count=0
for i in range(1,101,1):
count+=i
return count
result=add(1,101,1)
print('运行结果是:',result)
#三步函数法
# 1:先用零散的代码写出功能要求
# 2:变成函数 def 函数名()
# 3:想办法提高复用性 参数化
4)、Python之函数默认参数
# 默认参数
def greet(name,content='你好呀'):
'''函数的用处是向不同的用户发问候'''
print(name+content)
greet('python','hello')
greet('同学们')
greet(content='python',name='hello')
# 默认参数
# 1:带有默认值的参数,必须放在没有默认值的位置参数后面
# 2:默认参数可以有多个 在遵守条件1的前提下
# 3:如果有默认值,这个参数可以不传值,不传值就取默认值,传值就以传的值为准
# 4:按顺序赋值,也可以通过形参名去指定
5)、Python之函数动态参数
# 不定长参数/动态参数 *变量名 *args argument
def add(*args):
print(args)
print('args的类型:',type(args))#元组
count=0
for item in args:
count+=item
return count
result=add(1,2,3,4,5,6,7)
print('动态参数的求和结果',result)
# 1:什么时候用这个动态参数-->当你不确定参数个数的时候,就可以用动态参数
# 2:位置参数和动态参数的结合使用 位置参数放在动态参数的前面
# 3:默认参数和动态参数的结合使用 默认参数放在动态参数的后面
6)、python之函数关键字参数
# 关键字参数 **kwargs key word arguments-->字典类型
# 参数类型key value
def study(**kwargs):
print(kwargs)
for item in kwargs.values():
print(item)
study(t_name='youxian',t_course='python')
# 结合位置参数 位置参数必须放在关键字参数前
# 结合默认参数 默认参数必须放在关键字参数前
十七、python类与对象
# 类
# 他们具有共同的特征===划分为一个类
# 标准:编写代码的人来定义
# 在python如何用代码表达出来
# python类与对象知识
# 关键字 class 类里面一般包含 属性以及方法
# self就是实例本身
# 属性 1、实例属性 2、类属性 3、私有属性
# 1、类方法 @classmethod
# 什么时候定义为类方法?1)、如果想直接通过类名.函数名调用 2)、当有初始化函数的时候,可以直接定义为类方法
# 3)、类方法不能访问实例属性 必须传入cls参数(类本身),并且用此来调用类属性:cls.类属性名
# 2、静态方法 @staticmethod
# 什么时候定义为静态方法?1)、如果想直接通过类名.函数名调用 2)、当有初始化函数的时候,可以直接定义为类方法
# 3)静态方法不能访问类属性和实例属性,参数不能传入self,与类相关但是不依赖类与实例的方法
# 3、实例方法 参数(self)是实例本身---常用
# 实例方法如果是调用类里面的属性 self.属性名
# 如果是实例方法自己带参数,参数传递的规则同普通函数
# 类方法 静态方法 实例方法
# 1、都可以被实例调用
# 2、只有静态方法和类方法,可以直接通过类名.函数名()调用
# 3、静态方法和类方法,不能调用实例属性
# 类属性与类方法是类固有的方法和属性,不会因为实例不同而改变,写他们的目的是减少多实例时所创造出来的内存空间,加快运行速度
class BoyFriend:
# 类属性
height=175
money=200000
name="***"
age=28
# def __init__(self,height,money,name,age):
# self.height=height
# self.money=money
# self.name=name
# self.age=age
#行为特征--->方法 跟普通函数80%相似度
def cooking(self):#类函数与普通函数的区别
print("打印self",self)#self就是实例本身
print(self.name+"会做饭")
@staticmethod#静态方法
def hiking():
print("喜欢户外运动")
@classmethod#类方法
def swimming(cls):
print(cls.name+"喜欢游泳")
def coding(self,sex,language='java'):
print(self.name+",{0},会写{1}代码".format(sex,language))
#怎么调用类里面的属性和函数呢---通过实例/对象
# 创建实例:类名()
# 调用方法 实例.方法
# 调用属性 实例.属性
# 直接以实例调用
bf=BoyFriend()
bf.coding('女','python')
bf.coding('女')
bf.cooking()
bf.hiking()#实例调用静态方法
print("打印实例",bf)
print(bf.height)
print(bf.money)
# 把实例作为参数传递进去
bf_1=BoyFriend
print(bf_1)
print(BoyFriend.age)#类调用属性
BoyFriend.swimming()#类方法
BoyFriend.hiking()#类调用静态方法
bf_1.cooking(BoyFriend())
十八、python之requests接口自动化
# http消息:请求消息和响应消息
# 请求消息组成:请求行、请求头、空行、请求体
# 响应消息组成:状态行、响应头、空行、响应正文
# HTTP典型响应状态码
# 200 客户端请求成功
# 302 重定向
# 400 客户端请求有语法错误,不能被服务器识别
# 403 服务器收到请求,但拒绝提供服务
# 404 请求的资源不存在
# 500 服务器发生不可预期的错误
import requests
url="http://www.baidu.com"
res_get=requests.get(url)
# res_post=requests.post(url)
print("get请求的结果",res_get)
# print(res_post)
print("get请求的状态码",res_get.status_code)
print("get请求的响应报文",res_get.text)#html text xml
# print("get请求的响应报文",res_get.json())#确保返回的数据格式是json
print("get请求的响应头",res_get.headers)
print("get请求的请求头",res_get.request.headers)
python入门以及接口自动化实践的更多相关文章
- 1、大型项目的接口自动化实践记录--robotframework环境搭建
因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...
- 纯python自研接口自动化脚本更新版本,让小白也能实现0到1万+的接口自动化用例
查看完整文章点击原文链接:纯python自研接口自动化脚本更新版本,让小白也能实现0到1万+的接口自动化用例 你是否还在用postman\jmeter做接口自动化吗?用python的开源框架[unit ...
- 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等
1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...
- 9-1、大型项目的接口自动化实践记录----数据库结果、JSON对比
上一篇写了如何从DB获取预期.实际结果,这一篇分别对不同情况说下怎么进行对比. PS:这部分在JSON对比中也适用. 1.结果只有一张表,只有一条数据 数据格式:因为返回的是dicts_list的格式 ...
- 8、大型项目的接口自动化实践记录----DB分别获取预期结果、实际结果
上一篇实现数据分离升级版--从DB获取数据,以及对应的请求实现,作为一个case,还缺少了预期结果与实际结果的获取及对比.因为前面的文章已经说过接口返回值的获取及对比,所以这篇不说这块了,这篇说一下D ...
- 3、大型项目的接口自动化实践记录----开放API练习
开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...
- 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介
1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...
- python脚本实现接口自动化轻松搞定上千条接口用例
接口自动化目前是测试圈主流的一个话题,我也在网上搜索了很多关于自动化的关键词,大多数博主分享的python做接口自动化都是以开源的框架,比如:pytest.unittest+ddt(数据驱动) 最常见 ...
- python+requests实现接口自动化
1. 前言 今年2月调去支持项目接口测试,测试过程中使用过postman.jmeter工具,基本能满足使用,但是部分情况下使用较为麻烦.比如:部分字段存在唯一性校验或字段间有业务性校验,每次请求均需手 ...
随机推荐
- Android之Wifi学习(1)
在Android中对Wifi操作,android本身提供了一些实用的包.在android.net.wifi包以下.简介一下: 大致能够分为四个基本的类ScanResult,wifiConfigurat ...
- 使用 GeoIP2 获取 IP 的地理位置
1. 准备工作 数据库 : 解析 IP 地理位置的的数据库来自 GeoLite2 开源数据库:https://dev.maxmind.com/geoip/geoip2/geolite2/ . C 语言 ...
- --defaults-file 不能用?
今天在测试mysql多实例时发现mysqld_safe --user --defaults-file 怎么都无法启动,后来发现是必须按顺序,先写--defaults-file才可以. mysqld_s ...
- 安装Docker,Asp.net core
升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署 Docker从入门到实践 一.安装Docker a).设置Docker仓库 1.按惯例,首先更新Ubuntu的包索引 ...
- 使用python实现测试工具(一)
本系列教程我们将使用python实现一些简单的测试工具,为了尽可能的简单,我们的工具以命令行工具为主. 本系列教程使用的python版本是3.6.3. 背景 这一节我们实现简单的命令行发送get请求的 ...
- Android 提高 gradle 的编译速度
随着项目在国内各个商店上线,开始介入了渠道的概念. 目前总共有 13 家商店,尝试使用 ./gradlew assembleRelease 命令打包,耗时将近 40 分钟. 因此搜索了一些可以提供编译 ...
- Unty中通过镜像优化HDRI全景图体积
全景图即HDRI贴图,可以代替6面cubemap,传统3D软件运用较为广泛.一般反射探针,天空盒等都会用到. 但是体积过大是个问题,特别是移动端会对包体大小进行控制,虽说可以通过球面贴图替换掉部分环境 ...
- Visual Studio 2015 msvsmon.exe crashed when c++ debugging with x64
Completely uninstalling Astrill fixed the issue but this solution is not what I want. Astrill suppor ...
- MATLAB基础函数命令
1. 常用命令 dir:列出当前目录下的所有文件 clc:清除命令窗 clear all:清除环境(从内存中清除所有变量) who:将内存中的当前变量以简单形式列出 close all: 关闭所有的 ...
- SQL查看死锁+清理死锁
----查看sql死锁 CREATE procedure sp_who_lock as begin declare @spid int declare ...