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

简介: 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日志并进行多维度分析。
相关文章
|
1月前
|
Web App开发 编解码 运维
LNMP详解(十二)——Nginx URL重写实战
LNMP详解(十二)——Nginx URL重写实战
29 2
|
1月前
|
前端开发 JavaScript
前端知识(十)———JavaScript 使用URL跳转传递数组对象数据类型的方法
前端知识(十)———JavaScript 使用URL跳转传递数组对象数据类型的方法
60 0
|
3天前
|
Java
【实战演练】JAVA网络编程高手养成记:URL与URLConnection的实战技巧,一学就会!
【6月更文挑战第22天】在Java网络编程中,理解和运用URL与URLConnection是关键。URL代表统一资源定位符,用于标识网络资源;URLConnection则用于建立与URL指定资源的连接。通过构造URL对象并调用openConnection()可创建URLConnection。示例展示了如何发送GET请求读取响应,以及如何设置POST请求以发送数据。GET将参数置于URL,POST将参数置于请求体。练习这些基本操作有助于提升网络编程技能。
|
2天前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
13 5
|
5天前
|
前端开发 Java 开发者
在Spring框架中,`PathMatcher`是用于进行URL路径匹配的接口
在Spring框架中,`PathMatcher`是用于进行URL路径匹配的接口
25 6
|
1月前
|
缓存 Java Apache
Spring一行代码搞定图片url地址转换为Base64,超简单!!!!
这段内容讲述了如何将URL指向的图片转换为Base64字符串。首先通过`org.apache.commons.io.IOUtils`或Java标准库读取URL的字节流,然后用Java 8的`Base64`类编码。示例代码提供了两种实现方式:一种依赖Apache Commons IO,另一种仅使用Java内置类。在第二种方式中,自定义了`toByteArray()`方法处理输入流并转换为字节数组,最后关闭输入流释放资源。
|
1月前
|
JavaScript 前端开发
javascript获取url信息的常见方法
javascript获取url信息的常见方法
27 2
|
1月前
|
存储 JavaScript 前端开发
js原生方法,获取url上面所有参数,并返回一个对象
JavaScript函数`getUrlParameters`用于从URL中提取所有参数并返回一个键值对对象。它接收URL,分割查询字符串,解码参数对,并存储在对象中。重复参数键会被存储为数组。
|
1月前
|
C++
【C++】在使用代码组装URL时,一定要注意的坑......
【C++】在使用代码组装URL时,一定要注意的坑......
23 0
|
1月前
|
数据采集 存储 人工智能
【AI大模型应用开发】【LangChain系列】实战案例2:通过URL加载网页内容 - LangChain对爬虫功能的封装
【AI大模型应用开发】【LangChain系列】实战案例2:通过URL加载网页内容 - LangChain对爬虫功能的封装
154 0