requests payload_python+Requests接口自动化测试之传递 URL 参数

Requests传递 URL 参数:

你也许经常想为 URL 的查询字符串(query string)传递某种数据。如果你是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。例如,http://www.bcbxhome.com/bcbxxy/search.php?key=val

Requests 允许你使用 params 关键字参数,以一个字符串字典来提供这些参数。举例来说,如果你想传递 key1=value1 和 key2=value2 到http://www.bcbxhome.com/bcbxxy/search.php,那么你可以使用如下代码:

  1. >>> payload = {'key1': 'value1', 'key2': 'value2'}
  2. >>> r = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)

复制代码

实战操作一下吧:

  1. >>>payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': '接口自动化'}
  2. >>>r = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)

复制代码

通过打印输出该 URL,你能看到 URL 已被正确编码:

  1. >>> print(r.url)
  2. http://www.bcbxhome.com/bcbxxy/search.php?mod=forum&searchid=8&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E5%8C%96

复制代码

注意字典里值为 None 的键都不会被添加到 URL 的查询字符串里。

  1. >>>payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': None}
  2. >>> r = requests.get('http://httpbin.org/get', params=payload)
  3. >>> print(r.url)
  4. http://www.bcbxhome.com/bcbxxy/search.php?mod=forum&searchid=8&orderby=lastpost&ascdesc=desc&searchsubmit=yes

复制代码
你还可以将一个列表作为值传入:

  1. >>> payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': ['接口','自动化']}
  2. >>> r = requests.get('http://httpbin.org/get', params=payload)
  3. >>> print(r.url)
  4. http://www.bcbxhome.com/bcbxxy/search.php?mod=forum&searchid=8&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%E6%8E%A5%E5%8F%A3&kw=%E8%87%AA%E5%8A%A8%E5%8C%96

复制代码

完整代码如下:

  1. import requests
  2. payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': '接口自动化'}
  3. result = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)
  4. print(result.url)
  5. payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': None}
  6. result = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)
  7. print(result.url)
  8. payload = {'mod': 'forum', 'searchid': '8', 'orderby': 'lastpost', 'ascdesc': 'desc', 'searchsubmit': 'yes', 'kw': ['接口','自动化']}
  9. result = requests.get(" http://www.bcbxhome.com/bcbxxy/search.php", params=payload)
  10. print(result.url)

复制代码

对应结果如下:

  1. http://www.bcbxhome.com/bcbxxy/search.php?mod=forum&searchid=8&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%E6%8E%A5%E5%8F%A3%E8%87%AA%E5%8A%A8%E5%8C%96
  2. http://www.bcbxhome.com/bcbxxy/s ... sc&searchsubmit=yes
  3. http://www.bcbxhome.com/bcbxxy/s ... A%E5%8A%A8%E5%8C%96

复制代码

有没有疑问为啥kw后面的汉字变成了%+英文+数字?

这个叫url编码,这里就不展开细讲了可以去这里尝试一下http://www.jsons.cn/urlencode/

v2-aade3506f15c0b4dee47487fad75fe81_b.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建一个基于Python + requests + pytest + ddt + unittest 的自动化测试框架,可以按照以下步骤进行: 1. 安装所需依赖:在你的项目环境中安装 requests、pytest、ddt 和 unittest。 ``` pip install requests pytest ddt unittest ``` 2. 创建项目结构:在你的项目目录下创建以下文件和文件夹结构: ``` ├── tests │ ├── __init__.py │ └── test_cases.py ├── data │ └── test_data.xlsx └── conftest.py ``` 3. 编写测试用例:在 `test_cases.py` 文件中编写你的测试用例,可以使用 `ddt` 来实现数据驱动,示例: ```python import unittest import ddt from data.test_data import TestData from utils.api_helper import APIClient @ddt.ddt class APITestCase(unittest.TestCase): @classmethod def setUpClass(cls): cls.client = APIClient() @ddt.data(*TestData.test_data) def test_api(self, data): response = self.client.send_request(data['url'], data['method'], data['payload']) self.assertEqual(response.status_code, data['expected_status']) self.assertEqual(response.json(), data['expected_response']) ``` 4. 创建测试数据:在 `test_data.xlsx` 文件中创建测试数据,可以使用 `openpyxl` 库来读取 Excel 数据,示例: ```python import openpyxl class TestData: workbook = openpyxl.load_workbook('data/test_data.xlsx') sheet = workbook['Sheet1'] test_data = [] for row in sheet.iter_rows(min_row=2, values_only=True): test_data.append({ 'url': row[0], 'method': row[1], 'payload': row[2], 'expected_status': row[3], 'expected_response': row[4] }) ``` 5. 创建 API 辅助类:在 `api_helper.py` 文件中创建一个 APIClient 类,用于发送 API 请求,示例: ```python import requests class APIClient: def send_request(self, url, method, payload): if method == 'GET': response = requests.get(url, params=payload) elif method == 'POST': response = requests.post(url, json=payload) elif method == 'PUT': response = requests.put(url, json=payload) elif method == 'DELETE': response = requests.delete(url) else: raise ValueError('Invalid HTTP method') return response ``` 6. 创建 pytest 配置:在 `conftest.py` 文件中配置 pytest,示例: ```python import pytest def pytest_addoption(parser): parser.addoption("--base-url", action="store", default="http://localhost:8000", help="Base URL for API tests") @pytest.fixture(scope="session") def base_url(request): return request.config.getoption("--base-url") ``` 7. 运行测试:在命令行中执行以下命令来运行测试用例: ``` pytest -s tests/ ``` `-s` 参数用于显示打印信息。 这样,你就搭建了一个基于 Python + requests + pytest + ddt + unittest 的自动化测试框架,可以进行接口测试。你可以根据实际需求进一步扩展和优化这个框架。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值