打算写一个模拟HTTP客户端的程序(通过urlopen
来发送和接收HTTP请求)。
需要写单元测试,初步打算使用unittest
测试框架写测试用例。但是受具体环境限制,不能真正发送HTTP请求。
现在,退而求其次,写一个测试用例,不用发送请求并验证服务器返回的数据,只需要检查HTTP请求的头部和数据部分是否正确就好。
怎么写这种测试用例?
初步的想法是mock一个HTTP Server
打算写一个模拟HTTP客户端的程序(通过urlopen
来发送和接收HTTP请求)。
需要写单元测试,初步打算使用unittest
测试框架写测试用例。但是受具体环境限制,不能真正发送HTTP请求。
现在,退而求其次,写一个测试用例,不用发送请求并验证服务器返回的数据,只需要检查HTTP请求的头部和数据部分是否正确就好。
怎么写这种测试用例?
初步的想法是mock一个HTTP Server
1 回答10.1k 阅读✓ 已解决
4 回答4k 阅读✓ 已解决
2 回答4k 阅读✓ 已解决
4 回答3.5k 阅读✓ 已解决
3 回答4.7k 阅读
3 回答1.8k 阅读✓ 已解决
1 回答4.3k 阅读✓ 已解决
OK,找到了
unittest.mock
。unittest.mock本来是用来在单元测试中hook第三方模块(类/函数)的(绕过原来的模块),但是HTTP请求也是通过某个函数发送的,也可以用它来模拟。
以下为示例:
main.py
待测程序test.py
测试用例缺陷:如果在func中调用了多次urlopen,则上述代码无法正常测试。
Update:可以通过设置mock对象的
side_effect
属性来用自己的函数替换系统函数(不过不太优雅)。