python3+requests接口自动化session操作方法

在进行接口自动化测试时,有好多接口都基于登陆接口的响应值来关联进行操作的,在次之前试了很多方法,都没有成功,其实很简单用session来做。

1、在登陆接口创建一个全局session

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

# -*- coding: utf-8 -*-

import requests

'''在登陆模块创建一个全局session,在其他接口操作时带入登陆时的session,保持session的一致性'''

s = requests.Session()#定义一个全局session

class testlogin():

 login_url = "http://api-xxxxxx/api/Account/Login"

 username = "xxxxx"

 password = xxxxx

 def test_login(self):

  data ={

   "UserName" : self.username,

   "Password" : self.password

  }

  r = s.post(self.login_url,data)

  print(r.cookies)

  return s

2、在其他接口调用登陆的session,用这个session.post()去访问其他接口

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

from test_case.loggin import testlogin

import unittest

'''这里导入之前的登陆模块,调用登陆模块的session,然后去执行其他接口'''

s = testlogin().test_login()

class testtransfer(unittest.TestCase):

 def setUp(self):

  self.transfer_url = "http://xxxxxxx/Transfer/DoTransferToGame"

 def test_transfer(self):

  url = self.transfer_url

  data ={"Amount":xx,

    "GamePlatform":"xxxx"

    }

  r = s.post(url,data)

  print(r.text)

if __name__ == "__main__":

 unittest.main()

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

<think>我们正在讨论如何使用PythonRequests库搭建接口自动化测试框架。根据用户的问题,他想要一个教程。我将参考提供的引用内容,特别是引用[2][3][4][5],它们都涉及使用Pythonrequests搭建接口自动化测试框架。目标:提供一个清晰、结构化的教程,帮助用户搭建一个基本的接口自动化测试框架。框架结构通常包括以下部分:1.项目结构规划2.基础模块(如请求封装、配置管理、日志记录)3.测试用例管理4.测试执行与报告根据引用[1]中给出的示例结构:-api_tests/-base.py#基础类,如请求的封装-conftest.py#pytest的配置文件,可以放一些fixture-testcases/#测试用例目录-test_login.py-test_order.py-utils/#工具类目录-config.py#配置管理-logger.py#日志记录-request.py#请求的封装(如果放在utils下)但是,引用[4][5]中提到了用例的配置方式(使用字典配置用例),我们可以考虑两种方式:一种是将用例写在Python文件中(如test_login.py),另一种是用外部文件(如JSON)管理用例。这里我们先以Python文件为例。步骤:1.环境准备-安装Python(建议3.6以上)-安装requests库:`pipinstallrequests`-安装pytest(测试框架):`pipinstallpytest`-安装pytest-html(生成HTML报告):`pipinstallpytest-html`-安装其他可能需要的库(如日志处理,配置文件处理等)2.项目结构```project/│conftest.py#pytest的配置文件,可以定义钩子和fixture│pytest.ini#pytest的配置文件(可选)│├───common/#公共模块││__init__.py││base_request.py#封装的请求类││config.py#配置管理(读取配置文件)││logger.py#日志模块│├───testcases/#测试用例││__init__.py││test_login.py#登录接口测试用例││...#其他测试用例│├───data/#存放测试数据(如json文件,excel等)(可选)│├───reports/#存放测试报告│└───utils/#工具类(可选)```3.封装请求类(base_request.py)目的:封装requests,使得发送请求更加方便,可以统一添加请求头、处理响应等。示例代码:```pythonimportrequestsfromcommon.loggerimportloggerclassBaseRequest:def__init__(self):#可以在这里读取配置,设置基础URL等self.base_url="http://api.example.com"#从配置文件中读取defsend_request(self,method,url,**kwargs):#拼接完整的URLurl=self.base_url+urllogger.info(f"请求方法:{method},请求URL:{url},请求参数:{kwargs}")try:response=requests.request(method,url,**kwargs)logger.info(f"响应状态码:{response.status_code},响应内容:{response.text}")returnresponseexceptExceptionase:logger.error(f"请求发生异常:{e}")raise```4.配置管理(config.py)通常使用配置文件(如config.ini,config.yaml,或者环境变量)来管理不同环境的配置。示例(使用config.ini):```ini[test]base_url=http://api.example.com```然后使用config.py读取:```pythonimportconfigparserimportosclassConfig:def__init__(self,config_file="config.ini"):self.config=configparser.ConfigParser()self.config.read(os.path.join(os.path.dirname(__file__),&#39;..&#39;,config_file))defget(self,section,option):returnself.config.get(section,option)```5.日志模块(logger.py)配置日志,方便记录测试过程中的信息。```pythonimportloggingimportosfromdatetimeimportdatetime#创建日志目录log_dir=os.path.join(os.path.dirname(os.path.dirname(__file__)),&#39;logs&#39;)ifnotos.path.exists(log_dir):os.mkdir(log_dir)#日志文件路径log_file=os.path.join(log_dir,f"test_{datetime.now().strftime(&#39;%Y%m%d_%H%M%S&#39;)}.log")#创建loggerlogger=logging.getLogger(&#39;api_test&#39;)logger.setLevel(logging.DEBUG)#创建文件处理器fh=logging.FileHandler(log_file,encoding=&#39;utf-8&#39;)fh.setLevel(logging.DEBUG)#创建控制台处理器ch=logging.StreamHandler()ch.setLevel(logging.INFO)#创建格式器formatter=logging.Formatter(&#39;%(asctime)s-%(name)s-%(levelname)s-%(message)s&#39;)fh.setFormatter(formatter)ch.setFormatter(formatter)#将处理器添加到loggerlogger.addHandler(fh)logger.addHandler(ch)```6.编写测试用例(test_login.py)使用pytest编写测试用例,利用封装的BaseRequest发送请求,并进行断言。```pythonimportpytestfromcommon.base_requestimportBaseRequestclassTestLogin:request=BaseRequest()deftest_login_success(self):"""测试登录成功"""url="/login"data={"username":"test_user","password":"123456"}response=self.request.send_request("post",url,json=data)assertresponse.status_code==200assertresponse.json().get("message")=="登录成功"deftest_login_failed(self):"""测试登录失败"""url="/login"data={"username":"test_user","password":"wrong"}response=self.request.send_request("post",url,json=data)assertresponse.status_code==401assertresponse.json().get("message")=="用户名或密码错误"```7.运行测试并生成报告可以使用pytest命令运行测试,并生成HTML报告。```pytesttestcases/-v--html=reports/report.html```8.扩展考虑-参数化:使用pytest的`@pytest.mark.parametrize`进行参数化测试。-数据驱动:将测试数据放在外部文件(如JSON、Excel)中,然后读取数据执行测试。-夹具(fixture):在conftest.py中定义夹具,例如初始化操作、清理操作等。-断言封装:可以封装一些常用的断言方法,使断言更简洁。-配置文件管理多环境:例如测试环境、预生产环境、生产环境。以上是一个基本的框架搭建教程。用户可以根据实际需求进行扩展。根据用户的问题,我们生成了相关问题:§§相关问题§§1.如何实现接口自动化测试框架中的数据驱动?2.在接口自动化测试中如何处理接口依赖(例如登录后的token)?3.如何将接口自动化测试框架集成到持续集成(CI)流程中?4.如何生成更详细的测试报告(包括请求和响应的详细信息)?5.在接口测试中如何进行异常处理?</think>### Python Requests接口自动化测试框架搭建教程 下面是一个基于Python+Requests接口自动化测试框架搭建步骤,结合最佳实践和引用内容: #### 一、环境准备 1. 安装Python(建议3.6+) 2. 安装核心库: ```bash pip install requests pytest pytest-html allure-pytest ``` 3. 可选工具: - Allure报告工具 - Jenkins(持续集成) - Git(版本控制) #### 二、项目结构设计 ```plaintext api_framework/ ├── common/ # 公共模块 │ ├── base_request.py # 请求封装 │ ├── logger.py # 日志模块 │ └── config.py # 配置管理 ├── testcases/ # 测试用例 │ ├── test_login.py # 登录模块用例 │ └── test_order.py # 订单模块用例 ├── data/ # 测试数据 │ └── test_data.json ├── reports/ # 测试报告 ├── conftest.py # pytest全局配置 └── pytest.ini # pytest配置文件 ``` #### 三、核心模块实现 1. **请求封装(base_request.py)**: ```python import requests from common.logger import logger class BaseRequest: def __init__(self): self.session = requests.Session() def send_request(self, method, url, **kwargs): logger.info(f"请求: {method} {url} | 参数: {kwargs}") try: response = self.session.request(method, url, **kwargs) logger.info(f"响应状态: {response.status_code} | 响应内容: {response.text[:200]}") return response except Exception as e: logger.error(f"请求异常: {str(e)}") raise ``` 2. **配置管理(config.py)**: ```python import os class Config: BASE_URL = "https://api.example.com" # 基础URL TIMEOUT = 10 # 默认超时时间 LOG_LEVEL = "DEBUG" # 日志级别 ``` 3. **日志模块(logger.py)**: ```python import logging import os def setup_logger(): logger = logging.getLogger(&#39;api_test&#39;) logger.setLevel(logging.DEBUG) # 文件日志 file_handler = logging.FileHandler(&#39;logs/api_test.log&#39;) file_handler.setFormatter(logging.Formatter(&#39;%(asctime)s - %(levelname)s - %(message)s&#39;)) # 控制台日志 console_handler = logging.StreamHandler() console_handler.setFormatter(logging.Formatter(&#39;%(levelname)s - %(message)s&#39;)) logger.addHandler(file_handler) logger.addHandler(console_handler) return logger logger = setup_logger() ``` #### 四、测试用例编写(test_login.py) ```python import pytest from common.base_request import BaseRequest from common.config import Config class TestLogin: request = BaseRequest() @pytest.mark.parametrize("username, password, expected", [ ("valid_user", "correct_pwd", 200), ("invalid_user", "wrong_pwd", 401) ]) def test_login(self, username, password, expected): url = f"{Config.BASE_URL}/login" data = {"username": username, "password": password} response = self.request.send_request("POST", url, json=data) assert response.status_code == expected if expected == 200: assert "token" in response.json() ``` #### 五、运行与报告生成 1. 执行测试: ```bash pytest testcases/ --alluredir=./reports/allure-results ``` 2. 生成HTML报告: ```bash allure serve ./reports/allure-results ``` #### 六、框架扩展建议 1. **数据驱动**:使用JSON/YAML管理测试数据 2. **接口依赖处理**:通过fixture共享token ```python @pytest.fixture(scope="module") def auth_token(): # 获取登录token return get_token() ``` 3. **持续集成**:Jenkins集成测试任务 4. **异常监控**:企业微信/钉钉通知 5. **性能扩展**:集成Locust进行压力测试 > **框架优势**: > 1. 支持非技术人员通过修改配置文件参与自动化测试[^2] > 2. 可用于上线前回归测试和线上环境定时巡检[^2] > 3. 统一封装降低维护成本,提高代码复用率[^1][^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值