接口测试--mock

在现在的软件开发过程中,特别是app的部分,需要的很多数据以及内容,都是来自server端的API,但是不能保证在客户端开发的时候,api在server端已经开发完成,专门等着前端来调用,理想的情况就是前端在开发的时候,已经有人写好了接口,直接调用就ok,但是整个是理想的状态,如果在前端开发的时候,提供api的同学没有提供,那么,这个时候就需要我们mock数据了

什么是mock:

mock就是开发在开发的过程中需要依赖一部分的接口,但是对方没有提供或者环境等等情况,总之是没有,那么开发使用mock server自己类mock数据,方便自己正常的进行开发和对编写的功能进行自测

mock数据的具体步骤:

(1)https://github.com/dreamhead/moco地址中可以下载moco-runner-0.11.0-standalone.jar

(2)编写login.json

(3)运行这个包

 java -jar  moco-runner-0.10.0-standalone.jar http -p 12306 -c login.json

(注意:mock server和编写的login.json文件是在同一个目录下,-p:是指定端口 -c 是指定文件)

(4)我们使用postman 来验证下 我们mock的登录接口是不是ok

(5)我们再使用python编写一个接口测试用例,来验证换这个登录的接口和获取它的token,来实现的代码

下来我们编写一个登录和一个业务的(就是输入一个车牌号,查询该车牌号的显示时长,和它的停车费用)的json文件

[
  {
    "request":
    {
      "method":"post",
      "uri":"/login",
      "json":
      {
        "username":"admin",
        "password":"admin",
        "roleID":22
      }
    },
    "response":
    {
      "file":"login_response.json"
    }
  },
  {
    "request":
    {
      "method":"post",
      "uri":"/parkinside",
      "json":
      {
        "token":"asdgfhh32456asfgrsfss",
        "vpl":"AJ3585"
      }
    },
    "response":
    {
      "file":"parkinside.json"
    }
  }
]

]
View Code

 登录页面的响应数据:login_response.json

 {
        "username":"wuya",
        "userID":22,
        "token":"asdgfhh32456asfgrsfss"
}

业务面的响应数据:parkinside.json

{
  "vplInfo":
  {
    "userID":22,
    "username":"wuya",
    "vpl":"京AJ3585"
  },
  "Parking time long":"20小时18分钟",
  "Parking fee":"20$"
}

运行包:

 java -jar  moco-runner-1.3.0-standalone.jar http -p 12306 -c login.json

(注意:mock server和编写的login.json文件是在同一个目录下,-p:是指定端口 -c 是指定文件)

下来我们使用postman来验证下,我们mock的登录接口和业务接口是不是OK的

 我们使用python编写一个接口测试用例,来验证换这个登录的接口和获取它的token,见实现的代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-

# !/usr/bin/env python
# -*- coding:utf-8 -*-

import unittest
import requests


class MockTest(unittest.TestCase):
    def setUp(self):
        self.url = 'http://localhost:12306'

    def tearDown(self):
        pass

    def test_login(self, url='/login'):
        '''验证登录的接口'''
        data = {
            "username": "admin",
            "password": "admin",
            "roleID": 22
        }
        r = requests.post(self.url + url, json=data)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.json()['username'], 'wuya')

    def getToken(self, url='/login'):
        '''登录成功后获取token'''
        data = {
            "username": "admin",
            "password": "admin",
            "roleID": 22
        }
        r = requests.post(self.url + url, json=data)
        return r.json()['token']


    def test_parkingside(self, url='/parkinside'):
        '''验证查询停车时长接口'''
        data = {
            "token": self.getToken(),
            "vpl": "AJ3585"
        }
        r = requests.post(self.url + url, json=data)
        self.assertEqual(r.status_code, 200)
        self.assertEqual(r.json()['Parking time long'], u'20小时18分钟')
        self.assertEqual(r.json()['Parking fee'], u'20$')

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

 

posted @ 2022-07-01 20:07  净植  阅读(611)  评论(0)    收藏  举报