繁体   English   中英

你会如何在Python中模拟一个Web应用程序(用于测试Django项目)

[英]How would you mock a web app in Python (for testing a Django project)

我在Django中的应用程序从另一个应用程序的HTML中删除和导入数据。 我测试了每个解析函数,并希望测试将通过其他应用程序的爬虫。 在此之后,我想进行一些集成测试。 为了使测试尽可能容易运行,我想通过创建一个小的Web应用程序来模拟导入的Web应用程序,该应用程序提供一些硬编码的HTML并具有我将要经历的所有路径。

编辑 :此外,我的模拟必须有一些小动态行为 - 例如,测试失败和成功登录。 所以我不能只提供静态文件。

你会如何创建这样的模拟应用程序? BaseHTTPServer子类化吗? CGI? 使用一些框架(斜纹,使用Quixote)? 或者使用Django是合理的吗? 这是我正在考虑使用的解决方案,但Django对于这样的问题似乎太复杂了; OTOH,另一个框架对于这样的小需求将是一个过于依赖的依赖,并且BaseHTTPServerBaseHTTPServer

第二次编辑 :我对嘲笑课程,请求等不感兴趣。这不是我想要使用的方法,并且使用这种方法的建议不是我的答案(尽管我很感激善良的人们建议我, 直到现在 )。 如果是太难思考我的问题,只是忘了我谈到的测试-你会如何粗暴地模拟一般使用Python的web应用程序?

我认为你在嘲笑错误的程度。 您的单元测试不应该完全依赖于外部Web服务器,即使您专门为测试运行它也是如此。 您应该将urllib2.Request对象(或者您正在使用的任何实际HTTP调用)替换为仅返回预先封装数据的对象,包括无效登录的相关响应。

我将使用wget -r (递归下载)下载参考页面,然后使用Apache,Nginx或您用作网络服务器的任何内容将下载的页面作为静态页面提供。

除非您需要查看Web应用程序的动态更改...

听起来你需要使用python mock 这允许您例如patch现有命令(可能正在调用外部URL)并将自己的测试数据添加到其中。

对于测试,我觉得你永远不应该打外部服务。 您应该在自己的夹具中提供您期望从该服务获得的数据,并测试您的响应处理程序正在执行其工作。

我试图关注@Gagandeep Singh解决方案。 这似乎是最好的,在其他情况下可能是一个很好的解决方案,但它对我不起作用。

问题是我在另一个Django应用程序的测试目录中有一个Django应用程序。 当我使用manage.py test myapp运行我的应用程序的manage.py test myapp ,使用的settings.py是整个项目中的一个,而不是我的模拟应用程序的文件。 通过管理API启动Django并使用multiprocessing ,所以我打赌我的部分问题来自于如此复杂的交互。 也许我可以解决它,但我刚刚决定采用另一种策略。

我决定覆盖BaseHTTPServer并得到一些可接受的结果。 这不是一件容易的事,但我成功开始了我的模拟应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM