我试图测试使用Tornado构建的WebSocket处理程序,我正在调用import tornado.websocket
class SocketHandler(tornado.websocket.WebSocketHandler):
def open(self):
print(' [T] Websocket connection open')
def on_message(self, message):
print(' [T] Websocket message received: %s' % message)
def on_close(self):
print(' [T] Websocket connection closed')
tornado.testing
使用内置模块AsyncHTTPTestCase
进行一些简单import tornado.testing
import tornado.web
import tornado.websocket
from main import SocketHandler
class TestWebSockets(tornado.testing.AsyncHTTPTestCase):
def get_app(self):
return tornado.web.Application([(r'/', SocketHandler)])
@tornado.testing.gen_test
async def test_async_client(self):
url = "ws://localhost:" + str(self.get_http_port()) + "/"
client = await tornado.websocket.websocket_connect(url)
client.write_message('message')
client.close()
示例的修改:
pytest --cov-report term-missing --cov=.
此测试通过。但是,当我运行main.py
时,它指出未到达jobs:
- name: dotpersecond
plan:
- task: dotpersecond
config:
image_resource:
type: docker-image
source:
repository: docker.mycomp.com:443/app-builder
tag: latest
username: {{dckr-user}}
password: {{dckr-pass}}
run:
path: sh
args:
- "-c"
- |
for i in `seq 1000`; do echo hi; sleep 2; done
的最后一行,即服务器未关闭。
任何人都知道发生了什么?我已经尝试在关闭后添加延迟但没有成功。
答案 0 :(得分:1)
如果我在public void increaseDegress() {
rotationAngle += 10;
if(rotationAngle>360) {
rotationAngle = 0;
}
}
public void draw(Graphics g) {
this.g = g;
Graphics2D g2 = (Graphics2D) g;
AffineTransform at = new AffineTransform();
Rectangle rect = this.getBounds();
at.rotate(Math.toRadians(rotationAngle), rect.getX() + rect.getWidth() / 2, rect.getY() + rect.getHeight() / 2);
g2.setColor(Color.BLUE);
g2.setTransform(at);
g2.draw(at.createTransformedShape(this));
}
之后添加await tornado.gen.sleep(1)
(允许处理其他异步任务的异步睡眠),则覆盖率最高可达100%。
答案 1 :(得分:1)
套接字已关闭,但您可以在不等待回调运行的情况下完成测试。是否需要对此进行任何操作取决于您在近距离回调中所做的事情以及是否有必要进行测试。
如果您的测试关心正在运行的回调,那么您需要稍微睡一会给它一个机会(如您所发现的),或者做一些事情以允许测试观察回调运行的事实。不幸的是,这很笨拙;请参阅Tornado's websocket_test.py
文件中close_future
的使用情况。