一个api模拟工具

PyMoq的Python项目详细描述


pymoq是模拟http服务的工具。

安装

pip install PyMoq

用法

默认情况下,Pymoq运行在8080 TCP端口上,可以对其进行更改:

mock = pymoq.Mock(port=8090)

存根可以通过设置路径和http方法创建(get是默认设置)。

mock.create_stub('/books', method='post')

可以将路径设置为regex。

mock.create_stub('/books/[0-9]+', method='put')

对于每个存根,可以使用头和http状态代码配置响应。 标题必须是以标题名为关键字的字典。

mock.create_stub('/books', method='post').response('...',
                                                   headers={'name': 'value'},
                                                   http_status=201)

示例测试

import unittest
import requests
from pymoq import pymoq

class ExampleUsageTestCase(unittest.TestCase):
    def test_direct_usage(self):
      content = '{"author": "John Doe", "title": "Lorem ipsum dolor sit amet", "id": 1}'
      headers = {
        'content-type': 'application/json; charset=utf-8',
        'location': 'http://localhost:8090/books/1'
      }

      mock = pymoq.Mock(port=8090)
      mock.create_stub('/books', method='post').response(content,
                                                        headers=headers,
                                                        http_status=201)

      with mock.run():
          response = requests.post('http://localhost:8090/books',
                            data={"author": "John Doe", "title": "Lorem ipsum dolor sit amet"})
          self.assertEqual(response.status_code, 201)
          self.assertEqual(response.headers['content-type'], 'application/json; charset=utf-8')
          self.assertEqual(response.headers['location'], 'http://localhost:8090/books/1')
          self.assertEqual(response.text, content)

使用json文件配置

mock可以用json文件配置。文件应该如下所示:

[{
    "request": {
        "url": "/books",
        "method": "post"
    },
    "response": {
        "content": {"author": "John Doe", "title": "Lorem ipsum dolor sit amet", "id": 1},
        "headers": {
            "content-type": "application/json; charset=utf-8",
            "location": "http://localhost:8080/books/1"
        },
        "httpStatus": 201
    }
}]

示例测试

import unittest
import requests
from pymoq import pymoq


class JsonConfigTestCase(unittest.TestCase):
    def test_load_config_from_file(self):
        mock = pymoq.Mock()
        mock.load('config.json')

        with mock.run():
            response = requests.post('http://localhost:8080/books',
                        data={"author": "John Doe", "title": "Lorem ipsum dolor sit amet"})
            self.assertEqual(response.status_code, 201)
            self.assertEqual(response.headers['content-type'], 'application/json; charset=utf-8')
            self.assertEqual(response.headers['location'], 'http://localhost:8080/books/1')

            content = response.json()
            self.assertEqual(content['author'], 'John Doe')
            self.assertEqual(content['title'], 'Lorem ipsum dolor sit amet')
            self.assertEqual(content['id'], 1)

请求验证

pymoq可用于验证请求。

示例测试

import unittest
import requests
from pymoq import pymoq


class RequestVerificationTestCase(unittest.TestCase):
    def test_request(self):
        mock = pymoq.Mock()
        stub = mock.create_stub('/books', method='post')

        with mock.run():
            requests.post('http://localhost:8080/books',
                          json={'firstName': 'John', 'lastName': 'Doe'}
                          headers={'content-type': 'application/json'})

        stub.assert_requested_once()
        stub.assert_requested_with_header('content-type', 'application/json')
        stub.assert_requested_body_contains('Doe')

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Java中超类的构造函数中获取扩展泛型类的泛型类型?   java如何获取实体A的不同记录,该实体A与另一个实体B有一对多的关联,并按B记录的最新时间戳的最大值排序   JavaJSF导航参数依赖关系   具有短密文的java SecretKey匿名IBE   鼠标事件“找不到符号”错误的java解决方案   调用mediaplayer后使用java。停止我不能再发出声音了。为我解释开发参考?   java如何在序列化Avro消息时传递空值   java Sip Servlet未发送邀请请求   java根据规则访问节点,并删除链表中所有未访问的节点   Java 6上的jmockit测试用例必须使用Java代理吗?   JSF转换器f:convertDateTime是如何工作的?   java如何清除Firebase云数据库中的数组?   基于日期的列表java自定义排序   测量Java对象的内存消耗(完全“在应用程序中”)   故障终止/崩溃时的javafx Java(FX)故障保护警报?   java访问名称编码未知的文件   java如何在BlackBerry中绘制实心正方形?   java从JTextArea中删除边框   java可以使用另一个bean的属性来引用spring容器XML配置   数据透视表中具有相同列索引的java计数列