• python接口测试之mock(三)


    前面介绍了moco的详细的使用,它主要是基于moco-runner-0.11.0-standalone.jar,通过编写json的文件来实现,mock翻译过来就是模拟的意思,也就是说,它是将测试对象所依存的对象替换为虚构对象的库,该虚构对象的调用允许事后查看。Python中有几个库是可以模拟请求和响应的.

    1. mock

    在python的2.x版本中,mock是属于第三方的库,需要单独的按钮,在python3.3的版本以后,不需要单独的安装,从unitest里直接导入就可以了

    接下来我们来看mock库的经常使用的方法以及它的详细的帮助信息,见以下的代码:

    class Count:
        def add(self):
            pass
    
    
    
    from unittest import mock
    import unittest
    
    class test_add(unittest.TestCase):
        def test_add(self):
            count = Count()
            #找到要替换的对象,这个对象可以是一个类,或者是一个函数,或者是一个类实例
            #实例化Mock类得到一个mock对象,并且设置这个mock对象的行为,比如被调用的时候返回什么值,被访问成员的时候返回什么值等
            count.add = mock.Mock(return_value=12)
            result = count.add(8,4)
            self.assertEqual(result,12)
    
    if __name__ == '__main__':
        unittest.main()

    2. responses库

    安装: pip install responses

    接下来看看responses的使用方法:

    import responses
    import requests, unittest
    
    class responsesTest(unittest.TestCase):
        def setUp(self):
            pass
    
        def tearDown(self):
            pass
    
        @responses.activate
        def test_simple1(self):
            responses.add(responses.GET, 'http://twitter.com/api/1/foobar',
                      json={'error': 'not found'}, status=404)
            url = 'http://twitter.com/api/1/foobar'
            r = requests.get(url)
            # print(r.json())
            self.assertEqual(r.json()['error'], 'not found')
    
    if __name__ == '__main__':
        unittest.main()
    import json,responses, requests, unittest
    
    class responseTest(unittest.TestCase):
        def setUp(self):
            pass
    
        def tearDown(self):
            pass
    
        @responses.activate
        def test_case1(self):
            def request_callback(request):
                payload = json.loads(request.body)
                resp_body = {'value': sum(payload['numbers'])}
                headers = {'request-id': '728d329e-0e86-11e4-a748-0c84dc037c13'}
                return (200, headers, json.dumps(resp_body))
    
            responses.add_callback(
                responses.POST, 'http://calc.com/sum',
                callback=request_callback,
                content_type='application/json',
            )
    
            resp = requests.post(
                'http://calc.com/sum',
                json.dumps({'numbers': [1, 2, 3]}),
                headers={'content-type': 'application/json'},
            )
    
            self.assertEqual(resp.json()['value'], 6)
            self.assertEqual(resp.status_code,200)
            self.assertEqual(resp.headers['request-id'], '728d329e-0e86-11e4-a748-0c84dc037c13')
    
    
    if __name__ == '__main__':
        unittest.main()
  • 相关阅读:
    Mybatis基本用法--下
    Mybatis基本用法--中
    Mybatis基本用法--上
    Java规范推荐
    jquery、js获取页面高度宽度等
    linux ssh -l 命令运用
    div的onblur事件
    js获取url中的参数方法
    div内部元素居中
    oracle排序
  • 原文地址:https://www.cnblogs.com/xiaowangzi1110/p/8179745.html
Copyright © 2020-2023  润新知