如何使用httpretty / sure执行python测试

时间:2015-03-10 21:37:52

标签: python testing httpretty

我是python测试的新手,所以不要犹豫提供任何明显的信息。

基本上我想用python做一些RESTful测试,发现httpretty和肯定的库看起来很不错。

我有一个包含以下内容的python文件:

#!/usr/bin/python
from sure import expect
import requests, httpretty

@httpretty.activate 
def RestTest():
    httpretty.register_uri(httpretty.GET, "http://localhost:8090/test.json",
                           body='{"status": "ok"}',
                           content_type="application/json")

    response = requests.get("http://localhost:8090/test.json")
    expect(response.json()).to.equal({"status": "ok"}

这与https://github.com/gabrielfalcao/HTTPretty

提供的示例代码基本相同

我的问题是;我如何简单地运行此测试以查看它是通过还是失败?我尝试使用./pythonFile执行它,但这不起作用。

2 个答案:

答案 0 :(得分:2)

如果您的测试是作为Python函数实现的,那么当然只是尝试执行该文件并不会运行测试:该文件中没有任何内容实际调用RestTest

您需要某种测试框架来调用您的测试并整理结果。

一个这样的解决方案是python-nose,它将查找名为test_*的方法并运行它们。因此,如果您要将RestTest重命名为test_rest,则可以运行:

$ nosetests myfile.py
.
----------------------------------------------------------------------
Ran 1 test in 0.012s

OK

nosetests命令有多种选项可用于控制运行哪些测试,如何处理和报告错误等。

Python 3在unittest模块中包含类似的功能,它也可用作Python 2的后端,称为unittest2。您可以修改代码以利用unittest,如下所示:

#!/usr/bin/python
from sure import expect
import requests, httpretty
import unittest

class RestTest(unittest.TestCase):
    @httpretty.activate 
    def test_rest(self):
        httpretty.register_uri(httpretty.GET, "http://localhost:8090/test.json",
                               body='{"status": "ok"}',
                               content_type="application/json")

        response = requests.get("http://localhost:8090/test.json")
        expect(response.json()).to.equal({"status": "ok"})

if __name__ == '__main__':
    unittest.main()

现在运行文件将提供类似于我们所看到的输出 nosetests

$ python myfile.py
.
----------------------------------------------------------------------
Ran 1 test in 0.012s

OK

答案 1 :(得分:-1)

您是否尝试过调用方法?

或者注释是否意味着您不必明确调用您的方法?

如果我打电话给你的方法,它似乎有效。如果我更改期望值的一侧的值,则会正确地抱怨不匹配的值。

相关问题