iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python+pytest接口自动化之token关联登录怎么实现
  • 678
分享到

python+pytest接口自动化之token关联登录怎么实现

2023-06-29 21:06:06 678人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

今天小编给大家分享一下python+pytest接口自动化之token关联登录怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解

今天小编给大家分享一下python+pytest接口自动化之token关联登录怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    在PC端登录公司的后台管理系统或在手机上登录某个APP时,经常会发现登录成功后,返回参数中会包含token,它的值为一段较长的字符串,而后续去请求的请求头中都需要带上这个token作为参数,否则就提示需要先登录。

    这其实就是状态或会话保持的第三种方式token

    一. 什么是token

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

    token原理简单概括如下:

    • 用户首次登录成功后,服务端会生成一个token值,服务端会将它保存保存在数据库中,同时也会将它返回给客户端;

    • 客户端拿到token值后,保存在本地;

    • 后续客户端再次发送除登录外的其他请求时,会把保存在本地的token值作为参数一起发送给服务端;

    • 服务端收到客户端的请求后,会拿发送过来的token值与保存在数据库中的token值进行比较;

    • 如果两个token值相同, 则说明当前用户处于登录状态;

    • 如果数据库中没有这个token值或者token值已经生效,则需用户重新登录。

    二. token场景处理

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

    请求该系统的登录接口如下:

    import requestsimport JSONheaders = {"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).textprint(res)

    结果如下:

    {
      "code": 1000, 
      "msg": "登录成功!", 
      "token": "sh44ljjl08s32730djsh44ljjl08s32730djsh44ljjl08s32730djsh44ljjl08s32730djsh44ljjl08s32730djsh44ljjl08s32730dj"
    }

    在对扎样的项目做接口自动化测试时,需要先请求登录接口拿到token,再去请求别的接口。每次请求其他接口时先请求一次登录接口,这样做虽然可行,但这样不仅会降低自动化的执行效率,而且每次都请求登录也会对服务器资源造成浪费。

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

    1. 思路一

    在执行用例之前,先请求登录接口,并将返回的token值存储在文件中(如yaml文件),后续请求需要用到token值则从该文件。

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

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

    import requestsimport jsonimport yamldef 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 tokendef 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 requestsimport yamlimport pytestimport jsondef read_yaml():    '''    读yaml文件    :return:    with open('yaml文件路径', 'r', encoding='utf-8') as f:        result = yaml.load(f.read(), Loader=yaml.FullLoader)    token = result["token"]    return tokendef test_check_user():    查询个人信息(需要先登录系统)    # 先从yaml文件中读取token    token = read_yaml()    # 再将token添加到请求头中    headers = {        "Content-Type": "application/json;charset=utf8",        "token": token    }    url = "http://127.0.0.1:5000/users/3"    res = requests.get(url=url, headers=headers).text    # 返回结果为json格式,转换为字典    res = json.loads(res)    # 断言code是否为1000    assert res["code"] == 1000if __name__ == '__main__':    pytest.main()

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

    2. 思路二

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

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

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

    import pytestimport requestsimport json@pytest.fixture(scope="session")def get_token_fixture():    '''    作用域为session的fixture函数,返回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

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

    def test_check_user(get_token_fixture):    '''    查询个人信息(需要先登录系统)    :return:    '''    # 通过Fixture函数g获取et_token_fixture值,即token,再将token添加到请求头中    headers = {        "Content-Type": "application/json;charset=utf8",        "token": get_token_fixture    }    url = "http://127.0.0.1:5000/users/3"    res = requests.get(url=url, headers=headers).text    res = json.loads(res)    print(res)    print(headers)    assert res["code"] == 1000if __name__ == '__main__':    pytest.main()

    执行测试用例结果如下:

    python+pytest接口自动化之token关联登录怎么实现

    以上就是“python+pytest接口自动化之token关联登录怎么实现”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网Python频道。

    --结束END--

    本文标题: python+pytest接口自动化之token关联登录怎么实现

    本文链接: https://www.lsjlt.com/news/326431.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • python+pytest接口自动化之token关联登录怎么实现
      今天小编给大家分享一下python+pytest接口自动化之token关联登录怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
      99+
      2023-06-29
    • python+pytest接口自动化之token关联登录的实现
      目录一. 什么是token二. token场景处理这里介绍如下两种处理思路。1. 思路一2. 思路二三. 总结在PC端登录公司的后台管理系统或在手机上登录某个APP时,经常会发现登录...
      99+
      2022-11-10
    • python+pytest接口自动化参数关联怎么实现
      这篇文章主要介绍了python+pytest接口自动化参数关联怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇python+pytest接口自动化参数关联怎么实现文章都会有所收获,下面我们一起来看看吧。一...
      99+
      2023-07-02
    • python+pytest接口自动化之session会话保持的实现
      目录前言一、session(会话)二、会话保持三、python进行session会话保持总结前言 在接口测试的过程中,经常会遇到有些接口需要在登录的状态下才能请求,否则会提示请登录,...
      99+
      2022-11-13
    • Python+Requests+PyTest+Excel+Allure接口自动化测试怎么实现
      本篇内容主要讲解“Python+Requests+PyTest+Excel+Allure接口自动化测试怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python+Requests+PyT...
      99+
      2023-07-05
    • 怎么使用python编写登录接口自动化
      要使用Python编写登录接口自动化,需要先了解接口的请求方式(例如GET、POST)、接口地址、接口参数等等。下面是一个示例代码,...
      99+
      2023-09-05
      python
    • Python接口自动化之文件上传/下载接口怎么实现
      今天小编给大家分享一下Python接口自动化之文件上传/下载接口怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。〇、前...
      99+
      2023-06-29
    • 怎么用Python实现数据驱动的接口自动化测试
      这篇文章主要讲解了“怎么用Python实现数据驱动的接口自动化测试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python实现数据驱动的接口自动化测试”吧!在接口测试的过程中,很多时...
      99+
      2023-06-17
    • python apscheduler cron定时任务触发接口自动化巡检怎么实现
      这篇“python apscheduler cron定时任务触发接口自动化巡检怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作