pytest token,

  pytest token,

  某公司管理后台系统登录后返回token,然后在请求其他接口时需要在请求头中添加这个token。否则,会提示先登录。今天,我们将通过本文介绍python pytest接口自动化的令牌关联登录的实现。感兴趣的朋友可以看看。

  00-1010一、什么是token II。令牌场景处理这里有两种处理思路。1.想法1 2。想法2 3。总结当你在PC上登录公司的后台管理系统或者手机上的某个APP时,往往会发现登录成功后,返回的参数会包含token,其值是一个长字符串,后续的所有请求都需要以这个token作为参数,否则会提示你先登录。

  实际上,这是保持状态或会话的第三种方法,令牌。

  

目录

 

  令牌由服务器生成,是客户端用于请求的身份令牌。第一次登录成功时,服务器会生成一个包含用户信息的加密字符串令牌,返回给客户端并存储在本地。随后的客户端只需携带令牌进行请求,无需用户名和密码。

  令牌的原理简要概括如下:

  用户第一次成功登录后,服务器会生成一个令牌值,这个令牌值会保存在数据库中并返回给客户端。客户端获取令牌值后,保存在本地;后续客户端再次发送除登录之外的其他请求时,会将本地存储的令牌值作为参数发送给服务器;服务器收到客户端的请求后,会将发送的令牌值与数据库中存储的令牌值进行比较;如果两个令牌值相同,则当前用户登录;如果数据库中没有令牌值或者令牌值已经生效,用户需要重新登录。

  

一. 什么是token

 

  某公司管理后台系统登录后返回token,然后在请求其他接口时,需要在请求头添加这个token,否则提示先登录。

  申请该系统的登录界面如下:

  导入请求

  导入json

  headers={ Content-Type : application/JSON;charset=utf8}

  URL= http://127 . 0 . 0 . 0/log in

  _data={

  用户名 : 刘德华,

  密码 : 123456

  }

  res=requests.post(url=url,headers=headers,json=_data)。文本

  打印(分辨率)

  结果如下:

  {

  代码: 1000,

  msg“:”登录成功!

  token : sh 34 ljj 108s 32730d jsh 34 ljj 108s 32730d jsh 34 ljj 108s 32730d jsh 34 ljj 108s 32730d jsh 34 ljj 108s 32730d jsh 34 ljj 108s 32730d

  }

  在测试样本绑定项目的接口自动化时,您需要首先请求登录接口获取令牌,然后请求其他接口。每请求一次其他接口就请求一次登录接口是可行的,但是这样不仅会降低自动化的效率,而且每次请求登录都会浪费服务器资源。

  

二. token场景处理

 

  

这里介绍如下两种处理思路。

 

  在执行用例之前,首先请求登录接口,并将返回的令牌值存储在一个文件中(比如yaml文件)。如果在后续请求中需要该令牌值,将从该文件中获取。

  关于用python读写yaml文件,请参考我之前的文章Python读写yaml文件(使用PyYAML库)。

  1.运行接口自动化测试框架。初始化时,先请求登录接口,获取令牌值,写入指定的yaml文件。

  导入请求

  导入json

  导入yaml

  def get_token():

   请求登录接口,获取token

   :return:

   headers = {"Content-Type": "application/json;charset=utf8"}

   url = "http://127.0.0.1:5000/login"

   _data = {

   "username": "刘德华",

   "password": "123456"

   }

   res = requests.post(url=url, headers=headers, json=_data).text

   res = json.loads(res)

   token = res["token"]

   return token

  def write_yaml(token):

   写入yaml文件

   t_data = {

   "token": token

   with open("yaml文件路径", "w", encoding="utf-8") as f:

   yaml.dump(data=t_data, stream=f, allow_unicode=True)

  if __name__ == __main__:

   token = get_token() # 获取token

   write_yaml(token) # 将token值写入yaml文件

  2,执行测试用例时先读取yaml文件中token值,并将token加入headers中(也有些是将token放在请求参数中,视被测试项目具体情况而定),再发送请求。

  

import requests

 

  这里仅仅只是举例说明,而在实际的框架中,我们需要把这些诸如yaml文件的读写这样的函数单独封装在某个模块中,供其他模块调用,这样会代码会更加清晰简洁。

  

 

  

2. 思路二

 

  利用pytest中的Fixture函数,作用域设置为session,并返回token值,后续测试方法/函数调用该Fixture函数。

  pytest中Fixture的使用请参考我之前的文章pytest(6)-Fixture(固件)。

  1,首先,在conftest中定义一个作用域为session的Fixture函数,用于请求登录接口返回token。

  

import pytest

 

  2,接着,测试用例调用该Fixture。

  

def test_check_user(get_token_fixture):

 

  执行测试用例结果如下:

  说明思路二也是可行的,当然这里只执行了一条测试用例,如果执行很多的用例,效果会是怎样还没去验证,大家可以试试看。

  

 

  

三. 总结

 

  

  • 相对于Session/Cookies来说,请求量较大或者涉及第三方接口的系统,使用token更适合。

  • 有些项目token是放在请求头中发送的,而有一些项目则是放在请求参数里发送的,做接口自动化时要明确是哪种方式。

  • 接口自动化处理token时这两种思路可任选一种,如果使用pytest框架的话建议尝试思路二。

 

  到此这篇关于python+pytest接口自动化(13)-token关联登录的文章就介绍到这了,更多相关python接口自动化token关联登录内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: