上一篇html
接口測試筆記一java
爲何開發測試框架?python
測試工具的侷限性web
維護成本的增長spring
這裏使用python,也能夠選用本身熟悉的語言json
1.安裝requestsapi
pip install requests
2.基本請求restful
get請求,getTest.pyapp
import requests url_index='http://127.0.0.1:8081/api/files/detail?id=1' response_index = requests.get(url_index) print('Response 內容:'+response_index.text)
post請求框架
須要經過 Body 傳遞參數
postTest.py
import requests url_search = 'http://127.0.0.1:8081/api/files/searchByIds' # 拼湊 body 的參數 payload = { 'ids':(None, "1,2") } # 調用 requests 類的 post 方法,也就是 HTTP 的 POST 請求方式, # 訪問了 url_search,其中經過將 payload 賦值給 data 完成 body 傳參 response_search = requests.post(url_search, data=payload) print('Response 內容:' + response_search.text)
3.抽象
提取公共部分,common.py
import requests # 定義一個 common 的類,它的父類是 object class Common(object): # common 的構造函數 def __init__(self,url_root): # 被測系統的跟路由 self.url_root = url_root # get 請求,uri 是訪問路由,params 是 get 請求的參數,若是沒有默認爲空 def get(self, uri, params=''): # 拼湊訪問地址 url = self.url_root + uri + params # 經過 get 請求訪問對應地址 res = requests.get(url) # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 return res # post 方法,uri 是訪問路由,params 是 post 請求須要傳遞的參數,若是沒有參數這裏爲空 def post(self, uri, params=''): # 拼湊訪問地址 url = self.url_root + uri if len(params) > 0: # 若是有參數,那麼經過 post 方式訪問對應的 url,並將參數賦值給 requests.post 默認參數 data # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 res = requests.post(url, data=params) else: # 若是無參數,訪問方式以下 # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 res = requests.post(url) return res
修改getTest.py
from common import Common url_root="http://127.0.0.1:8081/api/" uri='files/detail?id=1' # 實例化Common comm = Common(url_root) response_index = comm.get(uri) print('Response 內容:'+response_index.text)
修改postTest.py
from common import Common url_root="http://127.0.0.1:8081/api/" uri='files/searchByIds' payload = { 'ids':(None, "1,2") } # 實例化Common comm = Common(url_root) response_search = comm.post(uri,payload) print('Response 內容:' + response_search.text)
測試框架就是在測試腳本中不斷抽象和封裝得來的
(1)不斷寫測試腳本
(2)觀察已寫好的測試腳本,找出重複部分,進行封裝
(3)重複(1)、(2)
4.支持Restful
用java寫restful接口
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
package com.example.demo.controller; import com.example.demo.model.Users; import com.example.demo.repository.UsersRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @Slf4j @RestController @RequestMapping("/user") public class UsersController { @Autowired UsersRepository usersRepository; @GetMapping("/list") public List<Users> list() { List<Users> users = usersRepository.findAll(); return users; } /** * 新增 */ @PostMapping public Users add(@RequestBody Users user) { usersRepository.save(user); return user; } /** * 修改 */ @PutMapping public Users edit(@RequestBody Users user) { usersRepository.save(user); return user; } /** * 刪除 */ @DeleteMapping("/{id}") public boolean remove(@PathVariable Integer id) { usersRepository.deleteById(id); return true; } }
重寫common.py
import requests # 定義一個 common 的類,它的父類是 object class Common(object): # common 的構造函數 def __init__(self,url_root): # 被測系統的跟路由 self.url_root = url_root # 封裝get 請求,uri 是訪問路由,params 是 get 請求的參數,若是沒有默認爲空 def get(self, uri, params=''): # 拼湊訪問地址 url = self.url_root + uri + params # 經過 get 請求訪問對應地址 res = requests.get(url) # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 return res # 封裝post 方法,uri 是訪問路由,params 是 post 請求須要傳遞的參數,若是沒有參數這裏爲空 def post(self, uri, headers='',params=''): # 拼湊訪問地址 url = self.url_root + uri if len(params) > 0: # 若是有參數,那麼經過 post 方式訪問對應的 url,並將參數賦值給 requests.post 默認參數 data # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 res = requests.post(url, headers=headers,data=params) else: # 若是無參數,訪問方式以下 # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 res = requests.post(url, headers=headers) return res def put(self,uri, headers='',params=None): ''' 封裝put 方法,uri 是訪問路由,params 是 put 請求須要傳遞的參數,若是沒有參數這裏爲空 :param uri: 訪問路由 :param params: 傳遞參數,string 類型,默認爲 None :return: 這次訪問的 response ''' url = self.url_root+uri if params is not None: # 若是有參數,那麼經過 put 方式訪問對應的 url,並將參數賦值給 requests.put 默認參數 data # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 res = requests.put(url, headers=headers, data=params) else: # 若是無參數,訪問方式以下 # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 res = requests.put(url) return res def delete(self,uri,params=None): ''' 封裝delete 方法,uri 是訪問路由,params 是 delete 請求須要傳遞的參數,若是沒有參數這裏爲空 :param uri: 訪問路由 :param params: 傳遞參數,string 類型,默認爲 None :return: 這次訪問的 response ''' url = self.url_root + uri if params is not None: # 若是有參數,那麼經過 delete 方式訪問對應的 url,並將參數賦值給 requests.delete 默認參數 data # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 res = requests.delete(url, data=params) else: # 若是無參數,訪問方式以下 # 返回 request 的 Response 結果,類型爲 requests 的 Response 類型 res = requests.delete(url) return res
getTest.py
from common import Common url_root="http://127.0.0.1:8080" uri='/user/list' # 實例化Common comm = Common(url_root) response_index = comm.get(uri) print('Response 內容:'+response_index.text)
postTest.py
from common import Common import json url_root="http://127.0.0.1:8080" uri='/user' payload = "{\"name\": \"EFG\",\"age\": 30}" headers = { 'Content-Type': 'application/json' } # 實例化Common comm = Common(url_root) response_search = comm.post(uri,headers,payload) print('Response 內容:' + response_search.text)
putTest.py
from common import Common url_root="http://127.0.0.1:8080" uri='/user' payload = "{\"id\": 3,\"age\": 22,\"name\": \"xyz\"}" headers = { 'Content-Type': 'application/json' } # 實例化Common comm = Common(url_root) response_search = comm.put(uri,headers,payload) print('Response 內容:' + response_search.text)
delTest.py
from common import Common url_root="http://127.0.0.1:8080" uri='/user/2' # 實例化Common comm = Common(url_root) response_search = comm.delete(uri) print('Response 內容:' + response_search.text)
補充:
加快框架的生成
能夠利用Postman 生成接口測試腳本
改寫經過工具導出的腳本