接口测试-mock实例

mock实例

mock的用法

1.找到你要替换的对象,这个对象可以是一个类,或者是一个函数,或者是一个类实例。
2.然后实例化Mock类得到一个mock对象,并且设置这个mock对象的行为,比如被调用的时候返回什么值,被访问成员的时候返回什么值等。
3.使用这个mock对象替换掉我们想替换的对象,也就是步骤1中确定的对象。
4.之后就可以开始写测试代码,这个时候我们可以保证我们替换掉的对象在测试用例执行的过程中行为和我们预设的一样。
举个状态码的实例

1.无mock当接口所有数据准备完毕(判断状态码实例)

import requests
def requestr():
    r = requests.get("http://www.baidu.com") # 爬取百度网站的信息
    return r.status_code # 拿到status_code的状态码
print(requestr()) # 200

2.有mock模拟接口返回值(判断状态码实例)

import requests
def requestr():
    r = requests.get("http://www.baidu.com") # 爬取百度网站的信息
    return r.status_code # 拿到status_code的状态码
print(requestr()) # 200
import unittest
from unittest import mock
class TestClient(unittest.TestCase):  # 创建一个unittest类
    def test_success_request_01(self):  # 创建一条case
        self.assertEqual(requestr(), 200)  # 真实的接口断言;接口开发完,做断言,返回200表示正确
    # 接口未开发完,使用mock对象替换掉'r.status_code'的值
    def test_success_request_02(self):  # 创建一条预期与实际一致的正确case
        requestr = mock.Mock(return_value=200) # mock设为200
        self.assertEqual(requestr(), 200) # 预期与实际一致,通过
    def test_fail_request_01(self):  # 创建一条预期与实际一不致的case
        requestr = mock.Mock(return_value=404) # mock设为404
        self.assertEqual(requestr(), 200) # 实际结果是200,失败
    def test_fail_request_02(self):  # 创建一条预期与实际一致的错误case
        requestr = mock.Mock(return_value=404) # mock设为404 
        self.assertEqual(requestr(),404) # 实际结果404 通过
if __name__ == '__main__':
    unittest.main()


当接口开发完成后,我们就可以把mock数据移除掉,直接执行我们的断言了,所以有了mock数据,我们可以尽早的完成用例,介入测试
再来举个json的实例

3.无mock当接口所有数据准备完毕(判断json值实例)

import requests
def cnodejs():
    response = requests.get('https://cnodejs.org/api/v1/topics') 
    return response.json()['success']  # 取键['success']的值
print(cnodejs())  # True

4.有mock模拟接口返回值(判断json值实例)

import requests
import unittest
from unittest.mock import Mock
def cnodejs():
    response = requests.get('https://cnodejs.org/api/v1/topics') # 当这个接口没有开发完,可以先写mock用例模拟数据
    return response.json()['success']  # 取键['success']的值
print(cnodejs()) 
# mock数据模拟 做断言
class MyTest(unittest.TestCase):
    # 写用例
    def test_case_01(self):
        self.assertEqual(cnodejs(), True, '通过') # 这是真实的接口断言
    def test_case_02(self):
        cnodejs = Mock(return_value=True)  # 模拟接口断言 Mock对象加() ,调用return_value返回值 模拟True 断言结果为True 结果为成功了
        self.assertEqual(cnodejs(), True, '通过了...')
    def test_case_03(self):
        cnodejs = Mock(return_value=False)  # 模拟False 断言结果为True 结果为失败了
        self.assertEqual(cnodejs(), True, '失败了...')
    def test_case_04(self):
        cnodejs = Mock(return_value={'success': True})  # 也可以Mock直接模拟success这个键值对是否等于断言结果的键值对 等于 用例通过
        self.assertEqual(cnodejs(), {'success': True}, '通过了...')
if __name__ == '__main__':
    unittest.main()


posted @ 2019-12-05 11:30  张珊33  阅读(1945)  评论(0编辑  收藏  举报