介面測試的另一種方式 – 介面測試平臺
搭建的初衷
現狀
目前,基於我們組所需要測試的點,很大一部分都是跟介面相關的,不管是我們系統內部的介面還是第三方(外部系統)的介面。部分介面還涉及到對傳輸資料的加密解密處理,那麼,在日常的測試工作中,難免需要開發為我們提供加解密的工具或者我們自己編寫小工具進行測試。隨著介面數量的增多,我們為每一個專案開發的小工具也越來越多,每個小工具的使用方法也不太相同,隱性的增加了一些維護成本和使用成本。其實很多方法都是可以複用的,WEB介面測試的方法也都大致相同,那我們是否可以考慮整合一下,做一個統一的測試平臺呢?
常規介面測試工具
WEB介面測試的方法,通常都是模擬客戶端向伺服器傳送請求,伺服器處理後返回請求結果,然後在檢查返回的結果是否符合預期,檢查返回的資料格式、欄位以及異常請求時伺服器是否返回異常等等,尤其涉及第三方介面時,需要考慮介面的安全性,是否可以隨意獲取等等。
那常規的介面我們可以使用像Loadrunner、Jmeter、Postman、Fiddler這類效能測試工具或抓包工具來模擬請求,當然熟悉Python或其他開發語言的話,也可以使用類似httpclient、httplib之類的庫自行編寫指令碼模擬客戶的請求。
需要解決的痛點
基於我們所測試的介面特點、不涉及加密加簽的介面都可以使用已有的測試工具來模擬客戶端請求來測試、那麼涉及到加密加簽的介面我們就需要自行編寫小工具來進行測試了。
不能使用現成的工具是因為基於我們所測試的介面特點不能滿足我們的測試需求:
1. 資料的加密解密演算法不同
2. 資料的加簽驗籤演算法不同
3. 簽名的位置,一些要求放在Headers中傳輸,一些要求當做Body引數傳輸
4. 介面請求有時效限制
如果用現成的工具來測試,我們需要單獨生成這些資料後再拼成完整的請求資料,過程會異常麻煩。所以我們需要為不同的專案編寫測試小工具來測試,為了我們編寫的小工具更具備通用性,降低使用和維護成本,讓沒有編碼基礎的測試人員也能輕鬆完成這類介面的測試工作,方便迴歸測試,就有了搭建這麼一個介面測試平臺的想法。
平臺框架圖
平臺預覽
登入、註冊
個人資訊管理
設定
單介面測試
多介面測試配置
任務管理
測試報告
擴充套件功能
部署說明(Linux)
環境準備
測試平臺是基於Python 3.5開發的,所以需要Python 3以上版本,推薦安裝Python 3.5
使用了tornado web開發框架,瞭解tornado。
安裝需要的模組
- pip install tornado sqlalchemy apscheduler pymysql pycrypto
如果在安裝模組的過程中還缺少其他模組,請自行根據提示進行安裝。
另外還使用了前端框架
程式碼部署
將原始碼上傳到伺服器的任意位置、基於規範,建議上傳到存放web應用的統一目錄中。
Nginx配置
- upstream tornadoes {
- server 127.0.0.1:19090;
- server 127.0.0.1:19091;
- server 127.0.0.1:19092;
- server 127.0.0.1:19093;
- server 127.0.0.1:19094;
- server 127.0.0.1:19095;
- server 127.0.0.1:19096;
- server 127.0.0.1:19097;
- server 127.0.0.1:19098;
- server 127.0.0.1:19099;
- }
- server {
- listen 9999;
- server_name 172.20.20.86;
- access_log off;
- index index.html index.htm index.py;
- root /opt/APITest_platform;
- location / {
- proxy_pass http://tornadoes;
- include public_config/proxy.conf;
- }
- location /static/ {
- root /opt/APITest_platform/static;
- if ($query_string) {
- expires max;
- }
- }
- location ~ .*\.(gif|jpg|[email protected]!medium|bmp|swf|flv|ico|eot|ttf|svg|woff|woff2)$ {
- expires 30d;
- access_log off;
- }
- location ~ .*\.(js|css)?$ {
- expires 7d;
- access_log off;
- }
- }
啟停指令碼
- #!/bin/bash
- # tornado服務啟停指令碼
- function startservice(){
- for i in 19090 19091 19092 19093 19094 19095 19096 19097 19098 19099
- do
- if [ $i -eq 19090 ];then
- nohup python3 /opt/APITest_platform/app.py --port=$i --monitor=on --log_file_prefix=/opt/APITest_platform/log/apitest-$i.log > /dev/null 2> &1 &
- else
- nohup python3 /opt/APITest_platform/app.py --port=$i --log_file_prefix=/opt/APITest_platform/log/apitest-$i.log > /dev/null 2> &1 &
- fi
- echo"started port $i's service"
- done
- }
- function stopservice(){
- for i in 19090 19091 19092 19093 19094 19095 19096 19097 19098 19099
- do
- kill -9`ps aux | grep "port=$i" | grep -v "grep" | awk 'NR==1 {printf $2}'`
- echo"stoped port $i's service"
- done
- }
- if [ "$1" = "start" ];then
- startservice
- elif [ "$1" = "stop" ];then
- stopservice
- elif [ "$1" = "restart" ];then
- stopservice
- startservice
- else
- echo"Please input like this:\"$0 start [stop | restart]\""
- fi
啟動命令說明
- $python app.py --port=9999 --monitor=off
使用說明
註冊、登入
個人資訊管理
設定
專案管理
新增專案
禁用專案
刪除專案
成員管理
配置自定義引數
配置自定義方法
在配置自定義引數時,Function型別的引數,需要根據專案需求配置自定義方法,具體步驟如下:
1. 進入原始碼中的encryption目錄
2. 開啟customfunc.py檔案
3. 在customfunc.py檔案末尾新增新增的方法
4. 開啟config.py檔案
5. 找到自定義方法配置所在位置,新增一行配置
6. 重啟服務
Host配置
Host配置用於通過切換域名指向不同的ip地址來達到測試不同測試環境的目的。
新增HOST
刪除HOST
禁用 / 啟用HOST
介面配置
新增介面
刪除介面
介面完整性檢查配置
介面預設請求HEADERS配置
介面預設請求BODY配置
加解密配置
新增配置
刪除配置
新增加解密處理方法
1. 進入encryption目錄
2. 如果需要新增的加解密方法不在系統預設的AES、DES、DES3三大類中,可以在encryption目錄中新建一個加密類檔案
3. 開啟function.py檔案,