Tornado框架的异步代码单元支持同步获取URL在项目里实战的心得和方法

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Tornado框架的异步代码单元支持同步获取URL在项目里实战的心得和方法

异步代码单元支持

TestCase测试子类IOLoop-基于异步代码。
UnitTest框架是同步的,因此测试方法返回时必须完成测试。这意味着异步代码不能以与通常完全相同的方式使用,必须进行调整。要使用协同程序编写测试,请使用龙卷风。测试gen_测试而不是tornado.gen.coroutine
此类还提供(已弃用)stop()和wait()更多手动测试方法。测试方法本身必须调用self-Wait(),异步回调应调用self-Stop()表示完成。
默认情况下,为每个测试构建新的IOLoop,并且可以用作self-io_ Loop。如果要测试的代码需要一个全局IOLoop,那么子类应该重写get_new_IOLoop返回它。

class MyTestCase(AsyncTestCase):
    @tornado.testing.gen_test
    def test_http_fetch(self):
        client = AsyncHTTPClient()
        response = yield client.fetch("http://www.tornadoweb.org")
        # Test contents of response
        self.assertIn("FriendFeed", response.body)

# This test uses argument passing between self.stop and self.wait.
class MyTestCase2(AsyncTestCase):
    def test_http_fetch(self):
        client = AsyncHTTPClient()
        client.fetch("http://www.tornadoweb.org/", self.stop)
        response = self.wait()
        # Test contents of response
        self.assertIn("FriendFeed", response.body)

不应直接调用此IOLoop的start和stop方法,而应使用self。停止并自我等待。传递给self的参数。stop从self.wait返回。可能有多次等待/停止。

import hello

class TestHelloApp(AsyncHTTPTestCase):
    def get_app(self):
        return hello.make_app()

    def test_homepage(self):
        response = self.fetch('/')
        self.assertEqual(response.code, 200)
        self.assertEqual(response.body, 'Hello, world')

启动HTTP服务器的测试用例。
子类必须重写get_App(),返回龙卷风。web应用程序(或其他)HTTPServer回调)。测试通常使用自http_客户端从服务器获取URL。
例如,假设用户指南中的“hello,world”示例位于hello py。

self.http_client.fetch(self.get_url('/'), self.stop)
response = self.wait()

同步获取URL

给定路径将连接到本地服务器的主机和端口。任何其他关键字参数都将直接传递给AsyncHTTPClient Fetch(因此可以通过method=“POST”、body=“…”等使用)。
如果路径以http://orhttps://,它将被视为一个完整的URL并按原样提取。
如果raise_Error为真,则为龙卷风。如果响应代码不是200,将引发httpclient HTTPError。这与raise_Error参数AsyncHTTPClient Fetch不同,但默认值为False。这是真的。AsyncHTTPClient)因为测试通常需要处理非200个响应代码。

class MyTest(AsyncHTTPTestCase):
    @gen_test
    def test_something(self):
        response = yield self.http_client.fetch(self.get_url('/'))

在5.0版中进行了更改:添加了对绝对URL的支持。
在版本5.1中更改:RAISE added_Error参数。
在版本5.1之后删除:此方法当前将任何异常转换为状态代码为599的HTTPResponse。在龙卷风6.0中,除了龙卷风。httpclient HTTPError将通过,raise_Error=False将仅抑制非200响应代码导致的错误。

class MyTest(AsyncHTTPTestCase):
    @gen_test(timeout=10)
    def test_something_slow(self):
        response = yield self.http_client.fetch(self.get_url('/'))

控制日志输出

用于捕获和抑制预期日志输出的上下文管理器。
帮助减少错误条件测试的噪音,同时仍保留意外的日志条目。不是线程安全的。
属性logged_如果堆栈设置为true,则记录任何异常堆栈跟踪。

with ExpectLog('tornado.application', "Uncaught exception"):
    error_response = self.fetch("/some_page")

Logger—要监视的记录器对象(或记录器名称)。传递一个空字符串以监视根记录器。
Regex--要匹配的正则表达式。将禁用指定记录器上与此正则表达式匹配的任何日志条目。
必需--如果为true,则在with语句中不会匹配任何日志条目。
级别—来自日志的模块,指示预期的日志级别。如果提供此参数,则仅此级别的日志消息将被视为匹配项。此外,提供的记录器将在必要时调整其级别(在ExpectLog中启用预期消息)。

# Runs all tests
python -m tornado.test.runtests
# Runs one test
python -m tornado.test.runtests tornado.test.web_test
import tornado.escape
import_object('tornado.escape') is tornado.escape
True
import_object('tornado.escape.utf8') is tornado.escape.utf8
True
import_object('tornado') is tornado
True
import_object('tornado.missing_module')
Traceback (most recent call last):
    ...
ImportError: No module named missing_module

从异常对象中提供errno。
在某些情况下,errno属性未设置,因此我们从参数中提取errno。然而,如果有人在没有任何参数的情况下实例化异常,他们将得到一个元组错误。因此,此函数抽象了所有行为,并为提供了获取errno的安全方法。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
18天前
|
JavaScript
vue封装一个查询URL参数方法
通过以上步骤,我们在Vue.js项目中封装了一个查询URL参数的方法 `getQueryParam`,并在Vue组件中成功应用。这种封装方式不仅提高了代码的复用性,还使得代码更加清晰和易于维护。
10 1
|
19天前
|
JavaScript
vue封装一个查询URL参数方法
通过以上步骤,我们在Vue.js项目中封装了一个查询URL参数的方法 `getQueryParam`,并在Vue组件中成功应用。这种封装方式不仅提高了代码的复用性,还使得代码更加清晰和易于维护。
12 1
|
5月前
|
Java
【实战演练】JAVA网络编程高手养成记:URL与URLConnection的实战技巧,一学就会!
【6月更文挑战第22天】在Java网络编程中,理解和运用URL与URLConnection是关键。URL代表统一资源定位符,用于标识网络资源;URLConnection则用于建立与URL指定资源的连接。通过构造URL对象并调用openConnection()可创建URLConnection。示例展示了如何发送GET请求读取响应,以及如何设置POST请求以发送数据。GET将参数置于URL,POST将参数置于请求体。练习这些基本操作有助于提升网络编程技能。
75 3
|
17天前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
|
2月前
|
安全 Java API
Java根据URL获取文件内容的实现方法
此示例展示了如何安全、有效地根据URL获取文件内容。它不仅展现了处理网络资源的基本技巧,还体现了良好的异常处理实践。在实际开发中,根据项目需求,你可能还需要添加额外的功能,如设置连接超时、处理HTTP响应码等。
293 4
|
2月前
|
数据采集 存储 前端开发
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
Java爬虫开发:Jsoup库在图片URL提取中的实战应用
|
3月前
|
Java
【实战演练】JAVA网络编程高手养成记:URL与URLConnection的实战技巧,一学就会!
【实战演练】JAVA网络编程高手养成记:URL与URLConnection的实战技巧,一学就会!
40 3
|
3月前
|
存储 NoSQL 算法
实战算法篇:设计短域名系统,将长URL转化成短的URL.
小米介绍了一种实用的短域名系统设计,用于将冗长的URL转化为简短链接。短链接不仅节省空间,便于分享,还能支持数据分析。系统通过唯一编号结合62进制转换生成短标识,并利用如Redis这样的数据库存储长链接与短标识的映射关系。最后,通过302重定向实现用户访问时的长链接恢复。这一方案适用于多种场景,有效提升用户体验与数据追踪能力。
92 9
|
3月前
|
开发框架 前端开发 .NET
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
Asp.net Webapi 的 Post 方法不能把参数加到 URL 中?试试这样写
|
3月前
|
开发工具 git
IDEA中怎么使用git下载项目到本地,通过URL克隆项目(giteegithub)
IDEA中怎么使用git下载项目到本地,通过URL克隆项目(giteegithub)
256 0

热门文章

最新文章