来自 应用 2021-07-17 03:15 的文章

香港高防ip_高防美国vps_快速解决

香港高防ip_高防美国vps_快速解决

创造一个所有客户都能信任他们收件箱的未来,可以将Agari工程师推向可用技术的极限。事实上,处理Agari网络钓鱼防御的伸缩性需求已经导致我们的传感器团队测试Python编程语言的一些最高级的特性。为了在使用这些特性的同时保持质量,我们的团队创建了一些对"异步"Python程序进行单元测试的首批方法。这项工作在2019年PyCon大会上得到了国际认可,现在正在这里分享。这是我最近在pyconus2019上关于"测试异步代码的策略"的演讲的第二部分。本系列的第一部分介绍了我们为什么需要这个解决方案,全网ddos防御,以及asyncio的介绍和它的基本测试。在第二部分中,我们将讨论一些更复杂的测试示例。虽然本系列第一部分中提供的示例适用于异步代码的大多数基本单元测试,但还有一些其他情况需要高级测试功能。其中包括:测试在主线程外部的事件循环中运行的协同程序测试调用事件循环的同步函数功能测试,可能包括测试非终止协程交替事件循环我创建了一个helper类,可以在大多数情况下提供帮助,我称之为LoopRunner:这个Thread子类的run()方法定义在第10行,它基本上确保通过yu init_uu传入的循环始终在运行。特别是,ddos防御设备,它将循环绑定到自己的线程,然后通过run_forever()运行循环"forever"。这个类的主要外部接口是run_coroutine(),定义在第18行。给定的协同程序以线程安全的方式在LoopRunner的循环中运行。这个接口的主要价值是我们有一个事件循环,它总是在运行,cC防御源码,我们可以在其中运行协同程序,而不会阻塞我们的测试的其余部分。第二个好处是它可以确保被测试的协同程序不在MainThread中运行。在将异步代码添加到现有代码库的情况下,这一点尤其重要。在循环运行器中运行可确保测试环境接近实际使用环境。下面是一个使用此helper类的简单示例:setUp()创建一个LoopRunner,自跑者,第16行有一个新的事件循环。在第17行自跑者的线程已启动,这将确保循环正在运行。在第23行的单元测试中,run_coroutine()方法通过在自跑者事件循环。这种用法与我们在上一篇文章中看到的测试非常相似,对于这样一个简单的情况,使用LoopRunner可能不是必需的。下面是一个更复杂的示例,它需要在单独的线程中运行协同程序。它松散地基于我们的一个代码库中的模式。我把这个新的考试班叫做赫德罗特:设置此类的对象需要传入一个事件循环,如第6行所示。除了循环之外,免费高速高防cdn,对象还在第8行创建一个锁,用于运行循环的线程和数据集自我命令,请注意,herdrooter对象维护其数据集,自我命令,linux服务器cc防御工具,以线程安全的方式。该类对象的外部接口是第19行的add\u command()方法。这个线程安全的方法通过使用asyncio.run_coroutine_线程安全()调用\u add_command()协同例程,并确保它在对象的事件循环中运行,自循环. 第13行定义的add_command()使用lock,self.\u rlock来确保线程安全。请注意,在一般用例中,可能在获取锁之前,在这个协程中可能会完成一些更异步的工作。此接口假定herdrooters在多线程环境中使用。事实上,asyncio.run_coroutine_线程安全必须从绑定到其目标事件循环的线程以外的线程调用()。因此,为了测试这个对象,我们需要在一个与测试运行位置隔离的线程中有一个事件循环。LoopRunner是执行此任务的完美工具:setUp()在第11行创建一个新的事件循环,然后在创建新的herdrooter时使用循环,self.herd_nu路由器12号线和13号线的LoopRunner。在第14行,runner线程启动,这也是循环运行的星星。在我们的测试中,我们可以简单地调用self.router.add_命令()在第21行,检查第22行的结果。更先进的策略上面的例子是pyconus演示中给出的最后一个例子,但是在本文中还有两个额外的例子。首先,有一个更复杂的示例用例。这个例子的代码可以在这里找到。考虑以下简单网络服务器:请求服务器由事件循环和端口定义。一旦循环启动,就可以通过调用第16行上的start_server()协同例程来启动服务器。它使用异步启动服务器()方法来创建等待连接到的协同进程自身端口在17号线。等待21号线的协同程序在上设置一个任务自循环,它等待连接到自身端口然后用handle_request()处理请求。这个协程在第9行定义,读取第10行的请求。然后,它在第12行写入一个Ack响应,然后在第13行和第14行关闭连接。对该网络服务器运行功能测试需要在正在运行的事件循环中启动它,使用LoopRunner的工作方式如下:setUp()方法与我们之前看到的类似,其中创建了一个新的事件循环,并在LoopRunner中运行,自跑者. 在我们的测试方法中,我们在第13行创建一个网络服务,并在运行的事件循环中启动它自跑者的线程在第14行。然后我们使用Pythons套接字API创建一个连接,并在第16行到第19行发送一个测试请求。在第21行,我们得到一个响应,然后将其与预期的响应进行比较。这将对RequestServer类进行功能全面的端到端测试!第二个例子是关于更高级的主题列表中的最后一个要点备用事件循环。例如,要在uvloop中使用LoopRunner进行测试:我们用的是6号线uvloop.new_event_循环()而不是创建循环的本机asyncio方法传递给了LoopRunner。有了这个小小的改变,我们就可以在一个替代的事件循环实现中测试我们的代码。要了解更多信息,请查看代码或观看视频。有兴趣和我们的工程团队合作吗?看看阿加里的空缺职位!