介面測試工具開發文檔
- 2019 年 10 月 11 日
- 筆記
作者:黨亞軍
1 開發規劃
1.1 開發人員
角 色 |
主要職責 |
負責模組 |
人員 |
備註 |
---|---|---|---|---|
|
|
n xxx模組 |
xxx |
|
1.2 開發計劃
<附開發計劃表>
1.3 開發環境和工具
開發工具
工具 |
作用 |
---|---|
Notepad++ |
編輯器 |
Perl |
解釋器 |
2 總體設計
設計思路:因為測試app和server。首先必須將app和server的通訊斷開,構造一個連接層,然後再根據這個連接層進行case設計,以及設計case對app的回饋。
2.1 概念術語描述
2.1.1 術語1
<術語1的描述>
2.1.2 術語2
<術語2的描述>
2.1.3 採用演算法說明
無
2.1.4 模組依賴:
⒈ JSON,提供json解析功能
⒉ Parallel::ForkManager,提供多進程的fork等功能。
⒊ HTTP::Proxy,提供代理功能。
⒋ Log::Fast,提供日誌功能
2.2 基本設計描述
採用多進程的CS模型。大概模組以及功能分為4個:
⑴ 、數據同步模組,主要同步線上下線的數據。線上模組對於該模組的數據是只讀的。
⑵ 、配置解析模組。主要是JSON解析,將整體Case的配置文件解析生成所有case列表。
⑶ 、HttpProxy代理模組,主要功能是代理http請求,並記錄下http請求的內容。為以後做Http請求分析對比做的一個東西。
a) 、在CaseManager啟動的時候啟動Proxy。
b) 、其他功能待定/****/
⑷ 、Executor模組。主要功能連接Manager並且執行Manager分配給它的內容。並且將執行結果發送給Manager。
a) 、啟動後連接server固定的埠,連接陳功之後等待server下發任務。
b) 、解析server下發的任務命令,JSON的形式,並按照命令的內容執行。
⑸ 、CaseManager模組,主要功能管理case、分配任務給Executor。接收Executor發回的執行結果。
a) 、啟動的時候載入解析配置,失敗退出。
b) 、啟動SOCKETserver並且初始化綁定埠。必須支援stub,以及mesgtype,以便後續進行擴展
c) 、fork出一些進程,然後進行任務分派。
d) 、接收Executor發回的一些資訊做一下處理/**需要商議**/
e) 、等待case下發完成並且有Executor執行完成之後進行清理動作
⑹ 、生成最終的報告。(可以選擇的模組)
⑺ 、其他必須的組件。
2.2.1 系統總體邏輯結構/流程圖(圖1)

圖1
2.2.2 配置文件引導/說明
{
"Proxy": {
這裡是代理相關的配置
},
"Global": {
"LocaleType": "utf8",#本地語言,可以為空,默認ascii
"Protocal": "HTTP",#協議的類型,http或者https目前只支援Http
"IsRsyncData": 0,#是否需要從線上同步數據
"DataServerIp": "127.0.0.1",#從線上同步數據的IP
"DataServerPort" : "127.0.0.1",#從線上同步數據的Port
"RequestType":[ "POST", "GET" ],#需要測試的Request類型
"PostReqSkipSection": ["aa","bb"],#POST請求類型需要忽略的section,開啟之後所在的sections裡面所有的POST類型的請求case都將不會執行。
"GetReqSkipSection": ["aa","bb"],#GET請求類型需要忽略的section,開啟之後所在的sections裡面所有的GET類型的請求case都將不會執行。
"PostReqSkipFunction": ["aa","bb"],#POST請求類型需要忽略的case名稱,開啟之後所有的名字和列表中名字相同的POST類型的請求case都將不會執行。
"GetReqSkipFunction": ["aa","bb"], GET請求類型需要忽略的case名稱,開啟之後所有的名字和列表中名字相同的GET類型的請求case都將不會執行。
"Version":[
#需要測試的所有的server的版本列表
{
"VersionNumber": "xx.xx.xx.xx",#版本號
"AddressIP": "127.0.0.1",#對應的server的IP
"AddressPort": "9999",#對應的server的Port
"VersionSkipFunction":[],#本版本不測試的case名稱
"VersionSkipSection": []##本版本不測試的Section名稱
},{#同上
"VersionNumber": "xx.xx.xx.xc",
"AddressIP": "127.0.0.1",
"AddressPort": "9999",
"VersionSkipFunction":[],
"VersionSkipSection": []
}
]
},
"Sections": {#這個Sections的名字就叫Sections
"Normal":{#名字為function_name的case。
"function_name":{
"url":"/api/plugInfo",#Version中的IP+PORT+url即是當前請求的URL
"ReqHeaderArgs": [],#需要添加的header的內容
"ReqContentArgs": [],#需要添加httpcontent內容,位於HTTP-content中。
"ReqArgs":[ ##需要添加content內容,位於HTTP-content中。
{"aaaa": "bbb"},
{"aaaa": "bbb"}
#例如www.baidu.com/login?user=aa&passwrod=bb這個請求構造的過程中ReqArgs = [{「user」: 「aa」},{「password」:」bb」}]而ReqHeaderArgs和ReqContentArgs可以置空。
],
"Asserts": [
{"/code" : 0, type : equal },
{"/cc": 1, type : diff, "force" : 1 }
{"/cc": 1, "type": "between", "force" :1,"from": 0, "to": 1}
#斷言列表,對於server反悔的JSON值。斷言的類型有兩種,between ,equal和nequal分別表示在from和to之間,相等和不等。如果force值為1,那麼說明這個斷言是強制滿足的。以路徑表示返回值的內容。例如:
要判斷marketingImage的url是否是null,加一個斷言即可{"/plug/marketingImage/url": NULL}
]
}
},
"Exception":{#這個Sections的名字叫Exception
"exception_name":{#同上
"url":"/api/plugInfo",
"ReqHeaderArgs": [],
"ReqContentArgs": [],
"ReqArgs":[
{"aaaa": "bbb"},
{"aaaa": "bbb"}
]
}
},
"Bound":{#這個Sections的名字叫Bound
"exception_name":{#同上
"url":"/api/plugInfo",
"ReqHeaderArgs": [],
"ReqContentArgs": [],
"ReqArgs":[
{"aaaa": "bbb"},
{"aaaa" :"bbb"}
]
}
}
}
}
2.3 主要介面流程描述
無
2.4 模組列表
模組名稱(英文) |
功能 |
備註 |
---|---|---|
模組1Module1 |
|
|
模組2Module2 |
|
|
模組3Module3 |
|
|
3 數據結構
數據表列表
表名 |
作用 |
---|---|
|
|
<附SQL資料庫結構定義文檔>
若未用資料庫,可不寫
4 模組設計
4.1 Module1設計
<更具具體情況細化模組設計>