在测试期间模拟 dnspython dns 查询
mock a dnspython dns query during testing
我有以下代码使用 dnspython 查找域的名称服务器,然后遍历该列表获取每个服务器的 IPv4 和 IPv6 地址。
我可以模拟 resolver_list
的结果。
但是,我不确定如何或是否可能模拟 A 和 AAAA 记录的查询结果,因为它们都是同一测试的一部分,而且我已经模拟了 dns.resolver.query
已经.
resolver_list = dns.resolver.query(domain, rdtype='NS', tcp=True)
for ns in resolver_list:
gtld_ns_server_list.append(ns.to_text().rstrip('.').lower())
a_records.append(dns.resolver.query(ns.rstrip('.'), "A"))
aaaa_records.append(dns.resolver.query(ns.rstrip('.'), "AAAA"))
到目前为止,我的模拟看起来像这样:
ns = [
('ns1.external-server.com', 'NS'),
('ns2.external-server.com', 'NS'),
]
responses = [[FakeRR(txt, rdtype=type) for txt, type in ns]]
def fake_dns_query(*args, **kwargs):
return responses.pop()
mocker.patch(
'site_management.validators.dns.resolver.query',
fake_dns_query
)
感谢任何帮助。
我想我得到了我需要的东西。我最终向 responses
变量添加了额外的列表,然后针对针对 A 和 AAAA 记录的额外查询弹出这些列表。
可能还有另一种方法,但至少我现在得到了我所期望的。
我有以下代码使用 dnspython 查找域的名称服务器,然后遍历该列表获取每个服务器的 IPv4 和 IPv6 地址。
我可以模拟 resolver_list
的结果。
但是,我不确定如何或是否可能模拟 A 和 AAAA 记录的查询结果,因为它们都是同一测试的一部分,而且我已经模拟了 dns.resolver.query
已经.
resolver_list = dns.resolver.query(domain, rdtype='NS', tcp=True)
for ns in resolver_list:
gtld_ns_server_list.append(ns.to_text().rstrip('.').lower())
a_records.append(dns.resolver.query(ns.rstrip('.'), "A"))
aaaa_records.append(dns.resolver.query(ns.rstrip('.'), "AAAA"))
到目前为止,我的模拟看起来像这样:
ns = [
('ns1.external-server.com', 'NS'),
('ns2.external-server.com', 'NS'),
]
responses = [[FakeRR(txt, rdtype=type) for txt, type in ns]]
def fake_dns_query(*args, **kwargs):
return responses.pop()
mocker.patch(
'site_management.validators.dns.resolver.query',
fake_dns_query
)
感谢任何帮助。
我想我得到了我需要的东西。我最终向 responses
变量添加了额外的列表,然后针对针对 A 和 AAAA 记录的额外查询弹出这些列表。
可能还有另一种方法,但至少我现在得到了我所期望的。