如何使用unittest校验PUT请求URL中参数ID的有效性?
如何用unittest校验PUT请求中的ID有效性
嘿,针对你想用unittest校验PUT请求里ID有效性的需求,我整理了一套实用的方案,既能从源头避免无效请求,又能通过测试用例保障逻辑正确~
一、先在请求发起前做ID合法性校验
咱们可以先写一个简单的校验函数,在发起PUT请求前先验证ID是否符合业务规则(比如是否是正整数、是否在合法范围里,或者是否存在于数据存储中)。这样就能避免无效ID被传到请求步骤里。
举个例子,假设你的业务要求ID是1000-9999之间的正整数,那校验函数可以这么写:
def validate_id(id): # 先判断类型是否为整数 if not isinstance(id, int): return False # 再判断是否在合法范围内 return 1000 <= id <= 9999
然后在发送PUT请求的函数里,先调用这个校验函数,不通过就直接抛出异常:
import requests def send_put_request(id): if not validate_id(id): raise ValueError(f"无效ID:{id},请确认格式或范围符合要求") url = f"http://localhost:8080/xxx/xx/xxx/xxx/xxxx/{id}" # 这里可以添加请求头、请求体等必要参数 response = requests.put(url) return response
二、用unittest编写测试用例覆盖场景
接下来就可以用unittest写测试用例,分别验证有效ID和无效ID的处理逻辑是否正确,确保校验函数和请求函数都能正常工作。
完整测试用例示例
import unittest from unittest import mock # 假设上面的函数在your_module.py里,替换成你的实际模块名 from your_module import validate_id, send_put_request class TestIDValidation(unittest.TestCase): def test_valid_ids_should_pass(self): # 测试所有符合规则的ID valid_ids = [1000, 5555, 9999] for id in valid_ids: # 先校验函数是否返回True self.assertTrue(validate_id(id)) # 模拟请求,避免真实调用服务(如果测试环境不允许的话) with mock.patch('requests.put') as mock_put: # 模拟服务返回成功状态码 mock_put.return_value.status_code = 200 response = send_put_request(id) # 验证请求状态码正确 self.assertEqual(response.status_code, 200) # 验证请求的URL拼接正确 mock_put.assert_called_with(f"http://localhost:8080/xxx/xx/xxx/xxx/xxxx/{id}") def test_invalid_ids_should_fail(self): # 覆盖各种无效ID的场景:字符串、超出范围、负数、空值等 invalid_cases = [ "9991", # 字符串类型,不是整数 999, # 小于最小有效值 10000, # 大于最大有效值 -123, # 负数 None, # 空值 ] for case in invalid_cases: # 先校验函数是否返回False self.assertFalse(validate_id(case)) # 验证无效ID会抛出异常,不会发起请求 with self.assertRaises(ValueError): send_put_request(case) # 确认requests.put根本没被调用,避免无效请求发出去 with mock.patch('requests.put') as mock_put: try: send_put_request(case) except ValueError: pass mock_put.assert_not_called() if __name__ == '__main__': unittest.main()
三、额外优化建议
- 如果ID的有效性需要依赖数据库(比如要检查ID是否在已存在的记录里),可以把数据库查询逻辑加到
validate_id里,测试时用mock模拟数据库连接,避免操作真实数据。 - 可以把ID的规则(比如范围、类型)提取成配置变量,后续修改规则时不用改代码逻辑。
- 如果你的服务端本身也会对无效ID返回错误(比如400 Bad Request),也可以加测试用例验证这一点——当然这属于接口测试范畴,同样可以用unittest结合真实请求(测试环境允许的话)或者mock来实现。
内容的提问来源于stack exchange,提问作者user9381327
相关产品推荐
相关产品推荐

