设为首页收藏本站language→→ 语言切换

鸿鹄论坛

 找回密码
 论坛注册

QQ登录

先注册再绑定QQ

查看: 313|回复: 1
收起左侧

[问题求助] Pytest接口自动化测试进阶

[复制链接]
发表于 2024-4-9 16:53:06 | 显示全部楼层 |阅读模式
1. 背景
随着Web应用的发展,越来越多的功能需要用户登录才能使用。而在接口测试中,往往需要模拟用户的登录状态来进行测试。一种常见的做法是通过Cookie来维持用户的登录状态。然而,由于Cookie的有效期限制以及网站的安全策略,如何在接口测试中有效地管理和维护登录状态成为了一项挑战。
2. Pytest框架简介
Pytest是一个功能强大、灵活且易于使用的Python测试框架,广泛应用于各种类型的测试,包括单元测试、集成测试和接口测试等。Pytest具有丰富的插件生态和简洁的语法,使得编写和维护测试代码变得更加高效和愉快。
3. Pytest接口自动化测试实现步骤3.1 准备工作
首先,我们需要安装好Pytest库,并准备好接口自动化测试所需的测试代码和测试数据。
3.2 获取登录状态的Cookie
在进行京东网站的接口自动化测试之前,首先需要手动进行一次登录操作,并通过浏览器开发者工具或其他方式获取到登录成功后的Cookie信息。
3.3 在测试代码中加入Cookie
在编写接口自动化测试的代码时,将获取到的Cookie信息加入到请求头中,以模拟用户登录状态。
4.详细案例分析
接下来,我们将详细介绍如何使用Python和Pytest实现Cookie绕过,并以爬取京东网站为例进行说明。
1. 获取登录态Cookie
首先,我们需要获取登录态的Cookie。我们可以使用Selenium模拟登录京东网站,并从浏览器中获取登录后的Cookie信息。
  1. from selenium import webdriver
  2. import random

  3. # 设置代理信息
  4. proxyHost = "www.16yun.cn"
  5. proxyPort = "5445"
  6. proxyUser = "16QMSOML"
  7. proxyPass = "280651"

  8. # 随机生成UA
  9. user_agents = [
  10.     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36",
  11.     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36",
  12.     "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
  13. ]

  14. # 随机选择一个UA
  15. user_agent = random.choice(user_agents)

  16. # 设置Chrome选项
  17. options = webdriver.ChromeOptions()

  18. # 设置UA
  19. options.add_argument(f'user-agent={user_agent}')

  20. # 设置代理
  21. options.add_argument(f'--proxy-server=http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}')

  22. # 启动浏览器
  23. driver = webdriver.Chrome(options=options)

  24. # 打开京东登录页面
  25. driver.get('https://passport.jd.com/new/login.aspx')

  26. # 输入账号密码并登录
  27. driver.find_element_by_id('loginname').send_keys('your_username')
  28. driver.find_element_by_id('nloginpwd').send_keys('your_password')
  29. driver.find_element_by_id('loginsubmit').click()

  30. # 获取登录后的Cookie
  31. cookies = driver.get_cookies()

  32. # 关闭浏览器
  33. driver.quit()

  34. # 将Cookie转换成字典形式
  35. cookie_dict = {cookie['name']: cookie['value'] for cookie in cookies}
复制代码
2. 使用Pytest进行测试
接下来,我们将使用Pytest编写测试用例,并在测试过程中使用已获取的登录态Cookie。
  1. import pytest
  2. import requests

  3. @pytest.fixture(scope='session')
  4. def login_cookie():
  5.     return cookie_dict

  6. def test_crawl_jd_data(login_cookie):
  7.     url = 'https://www.jd.com/'
  8.     headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'}
  9.     response = requests.get(url, headers=headers, cookies=login_cookie)
  10.     assert response.status_code == 200
  11.     assert '京东' in response.text
复制代码
在上述代码中,我们定义了一个login_cookie的fixture,用于获取登录态Cookie。然后,我们编写了一个测试用例test_crawl_jd_data,在该测试用例中,我们发送了一个带有登录态Cookie的请求,并断言返回状态码为200,并且响应中包含了“京东”关键字。
3. 运行测试
最后,我们可以使用Pytest运行测试。
  1. $ pytest test_jd_crawler.py
复制代码
5. 注意事项
在使用Cookie绕过登录的过程中,需要注意以下几点:
  • Cookie的安全性:登录状态的Cookie包含了用户的身份信息,需要妥善保管,避免泄露给其他人。
  • Cookie的有效期:京东网站的Cookie可能会有有效期限制,需要定期更新或重新获取。
  • 动态变化的Cookie:京东网站的Cookie可能会根据用户登录状态、操作行为等动态变化,需要在测试中进行相应的处理。





发表于 2024-4-17 09:13:44 | 显示全部楼层
学习了,感谢
沙发 2024-4-17 09:13:44 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2024-5-3 09:26 , Processed in 0.054375 second(s), 9 queries , Redis On.  

  Powered by Discuz!

  © 2001-2024 HH010.COM

快速回复 返回顶部 返回列表