2、接口测试 - 接口强化训练

一、接口名词透析

1. token - 令牌

  • token : 由服务器产生,存在服务器的内存或硬盘中
  • 有一套产生规则,会涉及到加密算法
  • 根据 账户和密码 生成,用于验证 用户登录信息
  • 主要通过 响应消息体传输给 客户端

2. cookies

  • cookies : 存储在 浏览器的某个位置
  • 可以被禁用、删除,安全性不高
  • cookie 是分站点的,站点与站点之间的cookie是相互独立的
  • cookie 与 sessionid 配合实现登录

3. sessionId

  • session 是一个对象,由服务器产生, 保存在服务器的内存中
  • 有自己的管理机制,包括 产生、销毁、超时等
  • sessionIdsession 对象的一个属性,是全局唯一的,永远都不会重复的

cookies工作流程(主要里面就是jsessionID)

  1. 客户端发送一个请求到服务器
  2. 服务器返回响应数据—响应头—setCOOkies—-给我们客户端
  3. 这个时候这个cookies不一定是有效!—-需要登录的网站—临时cookies
  4. 需要登录—-服务器判断这个账号密码正确之后,之前的cookies变成可以使用的!

二、 接口强化训练

1. requests 库请求参数类型

请求参 数请求头中数据默认类 型描述
dataContent Type:application/x www-form urlencoded请求体是表单格式 如:a=1&b=2
jsonContent Type:application/json请求体是json格式 如: {“name”:”tom”}
params暂时不考虑参数是放到url上 如:http://192.168.32.100:8080/路径?a=1&b=2
filesContent Type:multipart/form data文件上传接口中使 用

2. 请求与响应的对比

请求相关信息 resp.request.xxxx响应相关信息 resp.xxxx
resp.request.url 请求的url\
resp.request.headers 请求 头信息resp.headers 响应头 信息
resp.request.body 请求体信 息resp.text 请求体信息

3. requests 库响应消息体四种格式

四种返回格式说明用处
r.text : 文本响应内容返回字符串类型获取网页 html 时用
r.content : 字节响应内容返回字节类型下载图片或文件时用
r.json() : json 解码响应内容返回字典格式明确服务器返回 json 数据才能用
r.raw : 原始响应内容返回原始格式

三、 实战

1. token 实战

1
2
3
# configs/config.py

HOST = 'http://121.41.14.39:8082'#便于维护--测试环境变更--测试环境-预生产环境-生产环境
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# login.py

import requests
import pprint
#需求:输入一个字符串的密码,输出的一个md5加密结果
import hashlib
from configs.config import HOST

# md5 加密
def get_md5(password):
#1-实例化加密对象
md5 = hashlib.md5()
#2- 进行加密操作
md5.update(password.encode('utf-8'))
#3- 返回加密后的值
return md5.hexdigest()


class Login:
def login(self, inData, gettoken=False):
#1-url
url = f'{HOST}/account/sLogin'
#2- 参数
#字典的修改值操作 字典[键] = 新的值
inData['password'] =get_md5(inData['password'])
payload = inData
#3-请求方法
resp =requests.post(url,params=payload)
if getToken == False:
return resp.json()#响应数据
else:
return resp.json()['data']['token']#token
if __name__ == '__main__':
res = login({'username':'xxxxxx','password':'xxxxxx'})
# pprint.pprint(res)
print(res)

前端访问路径:http://120.55.190.222:7080/mgr/login/login.html

1.登录接口

usernameauto必填
passwordsdfsdfsdf必填
  • 响应头

    • Content-Type 必填 该字段值为 application/json,表示返回 JSON 格式的文本信息。
    • Set-Cookie 必填 该字段保存本次登录的 sessionid
      • 比如:
        • sessionid=89emkau5vhyg8vcwfwvq2pvr7ul2t5sc
  • 响应体

    • 如果请求成功,返回 json 格式的消息体,如下所示,retcode 值为 0 表示登录认证成功

      1
      2
      3
      {
      "retcode": 0
      }
-   如果输入的用户名或者密码错误,则返回结果为cookie实战描述

    
1
2
3
4
{
"retcode": 1,
"reason": "用户或者密码错误"
}
1
2
3
4
5
6
7
8
cookie的关联:
1- 提取cookie
2- 后续接口使用cookie
思路:
1- 原生态cookie直接使用
resp.cookies ----后面接口
requests.post('后续接口url',cookies = 获取到的原生态的cookie)
2- 需要额外增加一些参数到cookie---定制化cookie

2.cookie原生态直接关联后续接口实战

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
HOST = 'http://120.55.190.222:7080'

import requests

def login():
#1- url
url = f'{HOST}/api/mgr/loginReq'
#2- 请求体
payload ={'username':'auto','password':'sdfsdfsdf'}
#3- 请求
resp =requests.post(url,data=payload)
#获取cookie
#方案一:响应里就有这个cookie
# print(resp.cookies)
return resp.cookies#返回原生态的cookie

#需要关联的接口
def add_lesson(userCookie):
# 1- url
url = f'{HOST}/api/mgr/sq_mgr/'
# 3- 请求
resp = requests.post(url, cookies=userCookie)
print(resp.request.headers) # 查看请求头的cookies

if __name__ == '__main__':
userCookie= login()
add_lesson(userCookie)

3.自己封装cookie关联后续接口实战

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
HOST = 'http://120.55.190.222:7080'

import requests

def login():
#1- url
url = f'{HOST}/api/mgr/loginReq'
#2- 请求体
payload ={'username':'auto','password':'sdfsdfsdf'}
#3- 请求
resp =requests.post(url,data=payload)
#获取cookie
#方案二:需要额外增加一些参数到cookie---定制化cookie--提取sessionID
print(resp.cookies['sessionid'])
return resp.cookies['sessionid']#返回原生态的cookie里的sessionID

#需要关联的接口
def add_lesson(userCookie):
# 1- url
url = f'{HOST}/api/mgr/sq_mgr/'
# 3- 请求
resp = requests.post(url, cookies=userCookie)
print(resp.request.headers)#查看请求头的cookies

if __name__ == '__main__':
#自己封装cookie
userCookie ={'sessionid':userSessionId,'token':'123456'}
add_lesson(userCookie)

4. https协议代码

不做 https 校验 : verify =False

处理 pycharm https警告 : requests.packages.urllib3.disable_warnings()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#https协议
HOST = 'https://120.55.190.222'

import requests

#处理https警告
requests.packages.urllib3.disable_warnings()

def login():
#1- url
url = f'{HOST}/api/mgr/loginReq'
#2- 请求体
payload ={'username':'auto','password':'sdfsdfsdf'}
#3- 请求
resp =requests.post(url,data=payload,verify =False)#不使用SSL
return resp.text

if __name__ == '__main__':
res = login()
print(res)