来自 安全 2021-07-17 04:16 的文章

高防御cdn_神盾局特工第二季百度云_秒解封

高防御cdn_神盾局特工第二季百度云_秒解封

创造一个所有客户都能信任他们收件箱的未来,可以将Agari工程师推向可用技术的极限。事实上,处理Agari网络钓鱼防御的伸缩性需求已经导致我们的传感器团队测试Python编程语言的一些最高级的特性。为了在使用这些特性的同时保持质量,我们的团队创建了一些对"异步"Python程序进行单元测试的首批方法。这项工作在2019年PyCon大会上得到了国际认可,现在正在这里分享。这是我最近在pyconus2019上关于"测试异步代码的策略"的两部分的补充和附录的第一部分。去年11月,当我意识到我和我的团队在为我们的异步代码库编写测试时遇到了许多挑战,我就有了这个想法。我相信很可能还有其他人会从我们找到的解决这些问题的方案中获益,BAT大企业如何防御ddos攻击,所以我很快就写下了所发现的挑战和解决方案的概要,然后点击提交我的会议提案。几天后,我收到了一封来自PyCon项目委员会的电子邮件,通知我提议的标题中有一处打字错误。我修复了它,重新提交,然后等待。令我惊讶的是,我在二月中旬收到一封电子邮件,告诉我我的演讲被接受了!让我们从异步编程和asyncio开始,asyncio是编写异步并发应用程序的Python标准库API。2014年,Asyncio在3.4版本中成为标准库的一部分,但当前的API是从3.5开始的。asyncio中有两个主要概念。协同程序执行异步工作。它们通过确保以非阻塞方式执行I/O和其他非CPU密集型操作来允许协作并发。具体地说,它们是返回对象的函数,这些对象表示最终将完成的计算和/或I/O操作。async关键字用于定义协同例程函数,await关键字用于等待此类函数返回的对象的最终结果。下面是一个协同程序示例:在上面的示例中,my_coroutine在第1行使用async关键字定义,彻底防御cc攻击,返回第2行上另一个_coroutine的等待结果。事件循环计划异步工作。它们是运行不等待I/O或另一个协程来完成其计算的协程器,并且执行协程的I/O操作。顶级asyncio库提供了一些管理事件循环的方法。我们将在这篇文章中看到的两个例子包括:asyncio.get_event_循环()返回当前事件循环。如果当前操作系统线程中没有设置当前事件循环,则将创建并返回一个新的事件循环。asyncio.new_event_循环()创建并返回新的事件循环。Asyncio用例示例:放牧猫为了在不依赖于对复杂用例的理解的情况下呈现asyncio的概念,我使用了herding cats的隐喻,这意味着许多脱节的事情同时发生,最终可能会完成。我设计了一个简单的cat对象:尝试移动()(第14行)只有当猫高兴时,猫才会成功,即使这样,它也需要一些时间才能移动。当你抚摸猫时,你使猫高兴。因为异步睡眠()在第16行,这被定义为协程。考虑到这个对象,我创建了一个用于测试用例的简单协同程序:这个协同程序给了一只猫和一个移动它的方向。它在第2行调用pet(),使猫顺从,然后在第3行等待move()协程的结果。挑战:如何测试协同程序您不能仅仅将协同程序作为函数调用并期望测试结果,服务器ddos防御软件,因为调用它的结果是最终完成的对象。不能只等待结果,因为只能从协同程序内部调用await。你要做的是确保你从一个运行在事件循环中的协同程序来进行测试。下面是一个示例,不限域名高防cdn,说明如何使用标准库unittest框架在事件循环内调度和运行协同程序并测试响应:在第15行我们得到一个事件循环,我们在第16行使用它来运行我们在测试中的协同程序。我们可以在第18行的测试断言中使用结果。我还提供了一个使用pytest插件pytest asyncio的示例,该插件允许将测试定义为协程并隐式地在事件循环中运行,cdn高防哪家好,以及使用新方法的示例异步运行()从3.7开始提供。这三种解决方案都允许您相对容易地对单个协同程序进行单元测试。挑战:如何模拟合作计划Mocking和patching通常用于python单元测试。但是,你不能用stdlib来模拟协同程序unittest.mock框架。我提出了一个基本上是代理模拟的子类unittest.mock.MagicMock:第2行中的一个方法是\uu call_uu,它定义了对象与()一起使用或作为函数调用时的行为。在本例中,它是通过async def在协程上下文中定义的,因此它控制对象在被调用为协程时的行为。实际上,它返回一个coroutine对象,该对象返回超类的\uuCall_uu方法,这允许您将其作为MagicMock进行断言。以下是如何在测试用例中使用它:挑战:如何模拟异步上下文管理器异步的另一个有用特性是异步上下文管理器。这些允许上下文管理器在它们的setup(enter)和teardown(exit)阶段暂停执行(通过await)。这是通过定义\uu aenter\uux和\uu aexit\uu方法来完成的。Unittest.mock.MagicMock默认情况下,接受标准的python magic方法,但不接受async with中所需的较新的magic coroutines。与上面的AsyncMock类似,我们可以通过定义一些magic coroutines来实现模拟上下文管理器:通过定义uAEnter_2;和uuAEXIT_uUmagic协程,并简单地将它们传递给标准上下文管理器magic方法,我们就可以在任何async with语句中使用AsyncContextManager。要了解更多信息,请查看代码或视频,并继续关注更高级的用例。