栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

接口自动化测试实战

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

接口自动化测试实战

接口自动化测试实战 一. 接口关键性名词透析

1.token-令牌

  • Token也是由服务器产生的,存在服务器的内存或硬盘中
  • 由一套产生规则,会涉及到加密算法
  • 【用Token 来实现登录】
  • 开发提供一个获取Token接口,根据用户名+密码,获取一个Token值-返回一个Token(字符串)
  • Token值服务器通过什么客户端的呢?
  • 通过响应头给客户端。 ------ 次要
  • 通过响应消息体传给客户端。 ---- 主要
  • 通过Cookie传递给客户端 — 很少

获取token值

# 02 获取token值
import requests
import hashlib
# 1.项目的服务器地址+端口号
# from configs.config import HOST 报错
from config import HOST

# md5加密
def get_md5(password):
    # 1.示例化md5加密对象
    md5 = hashlib.md5()
    md5.update(password.encode('utf-8'))
    return md5.hexdigest()
"""
登录接口的特性:
1- 作为普通的接口测试
2- 需要获取token给后续接口关联
"""
# 接口自动化项目实战
class Login:
    # 2.封装登录函数
    def login(self,inData,getToken=False):
        # 1. url
        url = f'{HOST}/account/sLogin'
        # 2. 请求体---- 字典格式编辑
        # 调用加密函数   字典修改值:字典名【键名】 = 新的值
        inData['password'] = get_md5(inData['password'])
        payload = inData # 可以不写
        resp = requests.post(url, data=payload)
        if getToken == True: #获取token值
            return resp.json()['data']['token'] #token值
        else:
            return resp.json() #接口的响应值
if __name__ == '__main__':
    res = Login().login({'username':'xxxx','password':'xxxx'},getToken=False)
    print(res)

2. Cookie

  • Cookie是分站点的,站点和站点之间的Cookie是相互独立的
  • 浏览器的Cookies是保存在浏览器的某个位置的
  • 服务器端可以通过:响应头中的set-Cookie参数,对客户端的Cookie进行管理
  • 浏览器的每次请求,都会把该站点的Cookie发送给服务器
  • 实现登录:Cookie + Session 配合使用的。

3. SessionId -翻译为会话

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

总结:
1.token:

  • 一般需要账号与密码通过特定的接口(登录/获取token接口)去服务器访问,才能返回一个token
    2.cookie—sessionID
  • 会话id,只要访问这个应用浏览器就会返回一个session–一般在响应头里 set-cookies:jsessionid=xxxxxx

Cookie&sessionId合作
一. 快速理解
用户登录成功服务器创建session,返回给客户端。客户端浏览器把session保存在它的cookie中。

二. 过程描述

  • 登录成功服务器立马创建session,并通过【响应头】中的set-Cookie属性把session返回给客户端
  • 浏览器把响应头中的set-cookie内容存起来,存在浏览器自己的cookie中
  • 以后浏览器每次发送请求时,都会把该站点的全部cookie通过请求头中,传递给服务器
二. 请求关联实战

token鉴权

# 03.token鉴权
# 店铺的模块
import requests
# from configs.config import HOST # 报错
from config import HOST
from login import Login  # 调用login类

class Shop: # 每一次或者每一个店铺的实例,都需要鉴权一次
    def __init__(self,inToken):
        self.header = {'Authorization':inToken}
    # 1.列出店铺
    def shop_list(self,inData):
        # 1.url配置 参数是在url ? 后面的
        url = f'{HOST}/shopping/myShop'
        # 2.参数
        payload = inData
        # 3.发请求,把鉴权传过去
        resp = requests.get(url,params=payload,headers=self.header)
        return resp.text

if __name__ == '__main__':
    # 1.先登录
    token = Login().login({'username':'xxxx','password':'xxx'},getToken=True)
    # 2.店铺列出接口调用
    res = Shop(token).shop_list({'page':1,'limit':20})
    print(res)
import requests
# 01 登录接口
def login():
    # 1.url
    url = 'http://xxxxx'
    # 2.body
    payload = {'username':'xxx','password':'xxx'}
    # 3.发送请求
    resp = requests.post(url, data=payload)
    return resp.json()

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

cookie【直接关联原始cookies】

import requests

# 02 cookie【直接关联原始cookies】
# 封装一个登录函数
def login():
    # 1.url
    url = 'http://xxxxx'
    # 2.body
    payload = {'username':'xx','password':'xxxx'}
    # 3.发送请求
    resp = requests.post(url, data=payload)

    return resp.cookies #cookies对象  直接关联原始cookies

# 2.列出课程
def lesson_list(inData,inCookie):
    # 1.url
    url = 'http://xxxx/'
    # 2.body
    payload = inData
    # 3.发送请求
    resp = requests.get(url, params=payload,cookies=inCookie)
    # 如果响应体出现编码,不是你需要的中文
    # 设置响应编码
    resp.encoding = 'unicode_escape'
    return resp.text  # 响应体


if __name__ == '__main__':
    # 1.登录
    res = login()
    print(res)
    # 2.列出课程
    print(lesson_list({"action":"list_course","pagenum":1,"pagesize":20},res))

如果项目需求,需要定制化cookies:sessionid+token -需要直接封装

import requests


# 封装一个登录函数
def login():
    # 1.url
    url = 'http://xxxxx'
    # 2.body
    payload = {'username':'xx','password':'xxxxx'}
    # 3.发送请求
    resp = requests.post(url, data=payload)
    return resp.cookies #cookies对象 【直接关联原始cookies】
    # 如果项目需求,需要定制化cookies:sessionid+token   -需要直接封装
    # cookies里面就是sessionID --直接取出sessionID
    return resp.cookies['sessionid']

# 2.列出课程
def lesson_list(inData,inCookie):
    # 1.url
    url = 'http://xxx'
    user_cookie = {'sessionid':inCookie,'token':'ss'} # 自己封装  放入定制化token,无则不放
    # 2.body
    payload = inData
    # 3.发送请求
    resp = requests.get(url, params=payload,cookies=user_cookie)
    print(resp.request.headers) # 打印头
    # 如果响应体出现编码,不是你需要的中文
    # 设置响应编码
    resp.encoding = 'unicode_escape'
    return resp.text  # 响应体


if __name__ == '__main__':
    # 1.登录
    res = login()
    print(res)
    # 2.列出课程
    print(lesson_list({"action":"list_course","pagenum":1,"pagesize":20},res))




小结:
字典–转化–json格式
json.dumps(字典)
json格式–转化–字典
json.loads(json格式)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/882251.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号