使用特定 IP 的 Django REST 客户端测试
Django REST client test with specific IP
Django REST docs从META
读取地址。
所以我必须为它创建 Whitelist
存储 ip-address/subnet 的模型。没什么大不了的,我的数据库中已经有了所有 302
个子网。
from rest_framework import permissions
class BlacklistPermission(permissions.BasePermission):
"""
Global permission check for blacklisted IPs.
"""
def has_permission(self, request, view):
ip_addr = request.META['REMOTE_ADDR']
blacklisted = Blacklist.objects.filter(ip_addr=ip_addr).exists()
return not blacklisted
问题:
我想从其他 ip 地址而不是 127.0.0.1
测试白名单
我怎样才能在 pytest
中做到这一点?
编写集成测试:使用 requests
或等效库调用您的 API。
如果您打算测试一次,只需将应用程序部署在另一台主机上,然后 运行 进行测试。
如果您想要自动化测试,请考虑使用 CI/CD 管道。将你的 API 放在一个容器中,将测试代码放在另一个容器中,然后在需要时触发这些测试。
感谢@rpkilby
https://github.com/encode/django-rest-framework/issues/5775#issuecomment-360734150
因为APICLient
继承自同一来源。设置 header 非常简单。
client = APIClient(REMOTE_ADDR='x.x.x.x')
Django REST docs从META
读取地址。
所以我必须为它创建 Whitelist
存储 ip-address/subnet 的模型。没什么大不了的,我的数据库中已经有了所有 302
个子网。
from rest_framework import permissions
class BlacklistPermission(permissions.BasePermission):
"""
Global permission check for blacklisted IPs.
"""
def has_permission(self, request, view):
ip_addr = request.META['REMOTE_ADDR']
blacklisted = Blacklist.objects.filter(ip_addr=ip_addr).exists()
return not blacklisted
问题:
我想从其他 ip 地址而不是 127.0.0.1
测试白名单
我怎样才能在 pytest
中做到这一点?
编写集成测试:使用 requests
或等效库调用您的 API。
如果您打算测试一次,只需将应用程序部署在另一台主机上,然后 运行 进行测试。
如果您想要自动化测试,请考虑使用 CI/CD 管道。将你的 API 放在一个容器中,将测试代码放在另一个容器中,然后在需要时触发这些测试。
感谢@rpkilby
https://github.com/encode/django-rest-framework/issues/5775#issuecomment-360734150
因为APICLient
继承自同一来源。设置 header 非常简单。
client = APIClient(REMOTE_ADDR='x.x.x.x')