Python接口自动化框架
程序员文章站
2022-06-04 16:21:31
...
文章目录
Python自动化框架
Request库实战
一.接口文档规范
包含:
- 接口名
- 接口描述
- 请求方式
- 返回格式
- 请求参数说明(名称,必填,类型,说明)
- 返回参数说明(名称,类型,说明)
- json返回示例
二.Mock接口服务开发实战
[
{
"description":"post_form请求和响应,模拟登录接口",
"request":
{
"headers":{"content-type":"application/x-www-form-unlencoded"},
"method":"post",
"uri":"/login",
"forms":{"username":"xiaoqiang","pws":"123123"}
}
"response":
{
"json":{"error_code":0,"reason":"successed","username":"xiaoqiang","checkstatus":"on"}
"status":200
}
},
{
...
}
]
三.Request库语法格式总结
Request是python中强大的请求库,基本所有的请求都是用它来完成
1.下载安装和导入Requests库
pip install requests
import requests
2.get请求
r=requests.get(url,params=None,headers=None,cookies=None,auth=None,timeout=o.oo1)
- url:请求地址,必填(其他都是选填)
- params:请求参数
- 可以是字典
- 可以是json字符串
{'q': 'python', 'cat': '1001'}
- 字典字符串都会被自动编码发送到url
- 可以是字节(必须是ascii编码以内)
- headers:请求头.一般有两种模式
- form格式
'Content-Type':'application/x-www-form-urlencoded'
- json格式
'Content-Type':'application/json' # 如果是该格式,需要在请求header里加上 + cookies + auth: 身份认证 + timeout:请求超时时间,单位second
- cookie: 有就放,没有就不放
3.post请求
r=requests.post(url,data=none,headers=none,cookies=none,auth=none,timeout=0.01)
- 带数据的post
- json是以字符串在python中存在,但str()和json.dumps()有区别
a = {'a': 1, 'b': 2} b = {"a": 1, "b": 2} stringA = str(a) stringB = str(b) jsA = json.dumps(a) jsB = json.dumps(b) print(stringA==stringB) #真,stringA={'a': 1, 'b': 2} print(stringA==JSA) # 假,jsA={"a": 1, "b": 2} ## string和js的区别在于引号,json.loads(<str>)参数对象的字符串,除了要满足字典类型的格式外,所有的字符串对象必须是双引号。
- data为字典类型
data = {'key1':'value1','key2':'value2'} 字典类型 r = requests.post(url,data=data) #data须是字典类型
- data为字符串类型
data = {'key1':'value1','key2':'value2'} data = json.dumps(data)#将json格式转化为str类型 r = requests.post(url,data=eval(data))
`
- 带headers的post
headers = {"User-Agent":"test request headers"}
r = requests.post(url,headers=headers)
- 带json的post
data = {
"sites": [
{ "name":"test" , "url":"www.test.com" },
{ "name":"google" , "url":"www.google.com" },
{ "name":"weibo" , "url":"www.weibo.com" }
]
}
r = requests.post(url,json=data)
- 普通文件上传
files = {
'file':open('test.txt','rb')
}
r = requests.post(url,files=files)
- 流式上传
with open( 'test.txt' ) as f:
r = requests.post(url,data = f)
若有其他put ,delete 接口,使用方法只要在import requests 的前提下把 get 或者post改成put即可,其余不
https://www.cnblogs.com/puresoul/p/7488700.html
4.requests返值
- r.status_code 返回状态码
- r.reason 返回具体解释
- r.headers 返回响应头
- r.text 返回响应对象(返回了json类型,在python中无法使用)
- 返回值是str类型
- 取返回值中的参数时
name = re.findall(r'"name":(.+?),"age"',str(r.text))#返回的的lessonid是list类型,还要进行转化
- r.content 返回响应对象(bytes,图片,文件,中文显示为字符)
- 返回bytes类型
- r.json()响应转换为python可识别的类型,供后续代码使用
- 返回值是字典类型
- 取返回值
lessonId=r.json()['lessonId']
四.接口层框架
1.基本组成
- 主程序入口
- 遍历用例 (发送请求,接收响应,判断结果)
- 保存结果(生成报告)
- 发送email
- 贯穿log日志
2.项目根目录
- main.py–(不涉及具体实现,而是主要的通用执行)
- src
- 1.run_testcase.py (完成可执行的遍历)
- 2.interface_test.py(请求的发送,响应的接收和结果的判断保存)
- 每次执行1就去遍历,每遍历1个就调用2,进行请求的响应和结果保存判断
- log
- testcase
- testdata
- report
- commons
- libs
4.流程图
3.关联参数
4.日志log
5.发送邮件
上一篇: java实现阿里云接口发送短信验证码