Python接口測試之moco

       在如今的軟件開發過程當中,特別是app的部分,須要的不少數據以及內容,都是來自server端的API,可是不能保證前端

在客戶端開發的時候,api在server端已經開發完成,專門等着前端來調用,理想的狀況是前端在開發的時候,已經有人寫java

好了接口,直接調用就能夠了,可是這僅僅是理想的狀況,不少時候,現實老是比理想多一層思考和磨難,若是在前端開發python

的時候,提供api的同窗沒有提供,那麼怎麼辦?等待仍是本身先開發,等待確定是愚蠢的作法,那麼本身開發怎麼來解決git

api提供數據的這個問題,那麼使用mock就能夠很好的解決,什麼是mock?mock簡單的理解就是開發在開發的過程當中,github

須要依賴一部分的接口,可是對方沒有提供或者環境等等狀況,總之是沒有,那麼開發使用mock server本身來mockjson

數據,方便本身正常的進行開發和對編寫的功能進行自測。api

     在https://github.com/dreamhead/moco地址中能夠下載到moco-runner-0.12.0-standalone.jar,下載下來app

就是一個jar,在該地址中,做者對這部分有詳細的說明和啓動mock server方法,這裏不在重複的再次說明。下來咱們ide

簡單的編寫一個登陸的,見編寫的login.json字符串,一個是登陸請求,一個是根據車牌查詢停車費的請求:post

[
  {
    "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"
    }
  }
]

在UI或者接口的自動化測試中,咱們知道在TDD的模式中,對數據進行分離,這樣也是爲了維護的方便,這樣的目的是爲了後期自動化測試用例的擴展性,和它的易維護性。

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$" }

 

在運行命令前,最好讓mock server與編寫的login.json文件是在同一個目錄下,見執行的命令:

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

在如上的命令中,java -jar  moco-runner-0.10.0-standalone.jar是啓動jar,沒什麼可說的,http表示進行的是http協議,

-p後面跟的是端口號,這裏端口號指的是12306,-c後面跟編寫的json文件,這裏是login.json,見執行如上的命令後出現的

信息(切記無任何的錯誤信息表示OK,若是有錯誤,慢慢的進行檢查錯誤),見截圖:

OK,下來咱們使用postman來驗證下,咱們mock的登陸接口是否是OK的,見postman中填寫的信息,見截圖:

header爲:

  • Content-Length →63
  • Content-Type →application/json

下面咱們經過python語言,來對如上的二個接口進行實戰的操做,切記parkinside的接口是在登陸以後才能夠操做的業務,未登陸操做該業務,返回502無效的

token,見實現的代碼:

#!/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)
相關文章
相關標籤/搜索