千鋒教育招聘北京中文seo
【軟件測試行業(yè)現(xiàn)狀】2023年了你還敢學(xué)軟件測試?未來已寄..測試人該何去何從?【自動(dòng)化測試、測試開發(fā)、性能測試】
開篇
MeterSphere的數(shù)據(jù)源通過html頁面上傳后,需要將請求方式進(jìn)行拆分。
get接口的參數(shù),常以params的方式進(jìn)行傳參,也就是在url后帶上參數(shù)。
post接口一般是以json字符串的形式傳參,也有params方式進(jìn)行傳參的。而在MeterSphere里面,post可以使用它所自帶的jsonSchema的界面功能來定義參數(shù),也就是key-value的方式。也可以手寫json。這里我們以jsonSchema的方式進(jìn)行解析。
基于這兩種類型的接口(put、delete接口也遵循get接口)來做分支。get接口走get接口參數(shù)的生成方法。post同理。
沿著這個(gè)思路,就開始著手準(zhǔn)備自動(dòng)化腳本逆向用例生成的第一個(gè)函數(shù)。
思路梳理
首先確定我們所想要的用例模板以及我們要解析的數(shù)據(jù)結(jié)構(gòu)。我將兩個(gè)數(shù)據(jù)結(jié)構(gòu)的示例都列在了下面。
明確了目標(biāo),最先要做的,就是獲取數(shù)據(jù)流
獲取到數(shù)據(jù)流后,判斷接口請求的類型
根據(jù)請求類型,將數(shù)據(jù)流分成不同的分支,然后發(fā)給所對應(yīng)的生成參數(shù)的方法。
最后將這些參數(shù)拼接成我們想要的用例模板
下例為MeterSphere的json格式示例
{"projectName": "","protocol": "HTTP","projectId": ","version": "v1.20.6-lts-1e3d1547","data": [{"id": "","projectId": "","name": "測試","method": "POST","modulePath": "/path1/path2/...","environmentId": null,"schedule": null,"status": "Underway","moduleId": "","userId": "admin","createTime": 1655860767171,"updateTime": 1655860767171,"protocol": "HTTP","path": "/api/v1/pub/stop","num": 100666,"tags": null,"originalState": null,"createUser": "Administrator","caseTotal": "0","caseStatus": "-","casePassingRate": "-","deleteTime": null,"deleteUserId": null,"order": 3155000,"refId": "08f6bde7-c906-459d-8a9b-95632bbeb5ee","versionId": "989beb9c-ebc8-45d3-8a80-967b06f2d192","latest": true,"description": null,"request": "{name:ss,canshu:111}","response": "respone","remark": null}],"cases": [],"mocks": [],
}
下例為最后解析成的用例樣式
- api_name: callback_roomscase_name: $ddt{case_name}content_type: application/jsonparameterize:- - case_name- 字段1- 字段2- 字段3- - 常規(guī)用例- oU- 70- 79request:base_url: url...headers: nulljson:root:字段1: $ddt{字段1}字段2: $ddt{字段2}字段3: $ddt{字段3}method: POSTurl: /xxx/xxxvalidata:- contains: 200
得到MeterSphere數(shù)據(jù)并做解析
# 得到MeterSphere數(shù)據(jù)并做解析
def get_ms_data(filename):"""get_data: 數(shù)據(jù)源apis: 接口清單get_params: get請求參數(shù)api_name: 接口名稱method: 請求方式get_apis: get接口:return:拼接好的數(shù)據(jù)集"""# 所有接口的字典數(shù)據(jù)集合apis = {}# 獲取ms文件流with open(filename, "r", encoding="utf-8") as f:request_params = json.load(f)# 解析參數(shù).判斷接口是什么請求for i in request_params["data"]:get_data = ipath = get_data["path"]api_name = str(path).split("/")if len(api_name) > 1:api_name = api_name[-2] + "_" + api_name[-1]else:api_name = api_name[-1]method = get_data["method"]get_apis = {path: {"api_name": api_name,"method": method,"content_type": "application/json"}}if method.lower() in ["get", "put", "delete"]:# 如果是get請求.調(diào)用解析get參數(shù)try:# 調(diào)用生成params參數(shù)get_params = get_arguments(json.loads(get_data["request"])["arguments"])get_apis[path].update(get_params)apis.update(get_apis)except Exception as e:print_log(Exception(e))else:try:# 兼容post接口中的請求參數(shù)是parasm類型if "arguments" in get_data["request"] and "jsonSchema" not in json.loads(get_data["request"])["body"]:# 調(diào)用生成params參數(shù)get_params = get_arguments(json.loads(get_data["request"])["arguments"])get_apis[path].update(get_params)get_apis[path]["content_type"] = "application/text"apis.update(get_apis)else:# 兼容post是jsonSchema對象的參數(shù)類型if "jsonSchema" in json.loads(get_data["request"])["body"]:try:global NODENODE = Truepost_params = deal_with_data(data=json.loads(get_data["request"])["body"]["jsonSchema"],required_list=json.loads(get_data["request"])["body"]["jsonSchema"]["required"])get_apis[path].update(post_params)apis.update(get_apis)except KeyError:post_params = deal_with_data(data=json.loads(get_data["request"])["body"]["jsonSchema"])get_apis[path].update(post_params)apis.update(get_apis)else:print("測試")# 后續(xù)迭代...except Exception as e:print_log(Exception(e))raise Exception(e)return apis
這個(gè)函數(shù)我把它構(gòu)想成一個(gè)經(jīng)理,接到需求后,根據(jù)每個(gè)人的職責(zé)不同,分給所對應(yīng)的人。然后接收這些手下的工作反饋,把這些反饋組裝成報(bào)告。
在編寫過程中,只是一股腦的想把這件事做完。忽略了定義函數(shù)時(shí)需要遵循的單一職責(zé)原則(SRP原則,在python工匠中提到,每個(gè)函數(shù)應(yīng)該遵循單一職責(zé)。這樣方便后期維護(hù))。上面這個(gè)函數(shù),即做了類型判斷的工作,也做了數(shù)據(jù)拼接、分配給指定函數(shù)的工作。這樣如果要修改某一個(gè)職責(zé)的話。這個(gè)函數(shù)就需要做好整體維護(hù)的準(zhǔn)備?;诖舜蠹以诰帉懞瘮?shù)的時(shí)候,也盡可能保證函數(shù)的單一職責(zé)。
下面是配套學(xué)習(xí)資料,對于做【軟件測試】的朋友來說應(yīng)該是最全面最完整的備戰(zhàn)倉庫,這個(gè)倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!
軟件測試面試小程序
被百萬人刷爆的軟件測試題庫!!!誰用誰知道!!!全網(wǎng)最全面試刷題小程序,手機(jī)就可以刷題,地鐵上公交上,卷起來!
涵蓋以下這些面試題板塊:
1、軟件測試基礎(chǔ)理論 ,2、web,app,接口功能測試 ,3、網(wǎng)絡(luò) ,4、數(shù)據(jù)庫?,5、linux
6、web,app,接口自動(dòng)化 ,7、性能測試?,8、編程基礎(chǔ),9、hr面試題 ,10、開放性測試題,11、安全測試,12、計(jì)算機(jī)基礎(chǔ)
?
文檔獲取方式:
這份文檔,對于想從事【軟件測試】的朋友來說應(yīng)該是最全面最完整的備戰(zhàn)倉庫,這個(gè)倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!