前言
現在是2021年,這兩年的測試環境發生了翻天覆地的變化,自動化測試,性能測試,測試開發,能效平台等各種技能名次層出不窮,新技術革新換代太快,內卷化十分嚴重,大環境不是很友好。時代的塵埃落在了你我頭上,對於個人而言,只有繼續學習方能尋求一個心安理得的出路。當然了,翻山越嶺總是在所難免,不積硅步無以至千里,高樓大廈也是一磚一瓦壘起來的,學習的路上我們也是要從最基礎的技術一點點學起,不可能一下子就投入到高深莫測的技能中去。
自動化測試,是目前測試行業一項比較普遍的測試技術了,之前的以UI自動化測試為主,現在的以接口自動化測試為主,無論技術更迭,自動化測試總有他的重量,用機器代替手工工作,是21世紀不斷進行的課題。
這個系列文章我將會分享一下怎么搭建一個簡易又不失核心的接口自動化測試框架。希望我的框架能給予你一定啟發的同時,你也能指出一些我的不足之處,互相學習,我們才能共同進步。
計划章節
1、基礎配置
2、封裝日志和緩存
3、讀取yml測試文件
4、處理request
5、處理response
6、接口上下文參數關聯
7、集成allure報告
8、Jenkins持續集成
9、發送郵件
由於每天都挺忙的,而且沒有經濟效益,純屬用愛發電,所以更新的速度不是很及時。
環境搭建
目錄文件添加
我們打開vscode新建一個項目,名字就姑且命名為:interface_test_example
, 創建好之后,我們就按照這個下面這個目錄結構去創建相應的文件內容。
.
├── common ——公共方法目錄
│ ├── cache.py ——緩存文件
│ ├── exceptions.py ——異常處理
│ ├── __init__.py
│ ├── json.py ——序列化和反序列化
│ ├── regular.py ——正則處理
│ ├── request.py ——請求處理
│ └── result.py ——響應處理
├── conftest.py ——pytest膠水文件
├── environment.properties ——allure配置文件
├── logs ——日志目錄
├── main.py ——主運行文件
├── pytest.ini ——pytest配置文件
├── readme.md
├── requirements.txt
├── tests ——測試用例目錄
│ └── testcase.yaml
└── utils ——第三方工具文件
├── __init__.py
├── logger.py ——日志
├── readme.md
└── time.py ——時間處理
當你把上面這些內容創建完成之后我們的項目內容就算整體創建完成了。
python虛擬環境創建
在創建之前我先聲明一下我所使用的python版本是3.8.6版本。學習本篇請不要使用3.8版本以下python,某些語法會不支持。
1、創建虛擬環境
python3 -m venv env
2、 安裝requirements.txt
的依賴包
pip install -r requirements.txt
requirements.txt的具體內容
allure-pytest==2.9.43
allure-python-commons==2.9.43
astroid==2.7.3
attrs==21.2.0
autopep8==1.5.7
certifi==2021.5.30
charset-normalizer==2.0.4
idna==3.2
iniconfig==1.1.1
isort==5.9.3
lazy-object-proxy==1.6.0
mccabe==0.6.1
packaging==21.0
platformdirs==2.3.0
pluggy==1.0.0
py==1.10.0
pycodestyle==2.7.0
pylint==2.10.2
pyparsing==2.4.7
pytest==6.2.5
pytest-assume==2.4.3
pytest-html==3.1.1
pytest-metadata==1.11.0
PyYAML==5.4.1
requests==2.26.0
six==1.16.0
toml==0.10.2
urllib3==1.26.6
wrapt==1.12.1
安裝完成之后我們的環境就搭建好了。
yaml管理測試用例
excel這種總歸是太麻煩了,所以我們需要一個更合適的。挑來選去yaml是最簡單方便的,數據能幾乎無縫切換。
先來看看我們的用例吧,都寫了些什么。打開tests/testcase.yaml
文件,輸入以下內容。
config: # 測試信息
baseurl: "https://www.zhixue.com"
timeout: 30.0
headers:
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36
cookies: aliyungf_tc=AQAAANNdlkvZ2QYAIb2Q221oiyiSOfhg; tlsysSessionId=cf0a8657-4a02-4a40-8530-ca54889da838; isJump=true; deviceId=27763EA6-04F9-4269-A2D5-59BA0FB1F154; 6e12c6a9-fda1-41b3-82ec-cc496762788d=webim-visitor-69CJM3RYGHMP79F7XV2M; loginUserName=18291900215
X-Requested-With: XMLHttpRequest
variable:
none : none
tests:
test_login:
description: "登錄"
method: post
route: /weakPwdLogin/?from=web_login
RequestData:
data:
loginName: 18291900215
password: dd636482aca022
code:
description: encrypt
Validate:
expectcode: 200
resultcheck: '"result":"success"'
regularcheck: '[\d]{16}'
Extract:
- data
test_login_verify:
description: "驗證登錄"
method: post
route: /loginSuccess/
RequestData:
data:
userId: "${data}"
Validate:
expectcode: 200
regularcheck:
resultcheck: '"result":"success"'
第一部分config
內容:主要是一些全局的配置信息,如請求地址、請求頭等。
第二部分variable
內容:主要是預先設置一些全局變量等等內容。比如可以加入郵箱地址等等。
第三部分tests
內容:這個是真正的測試用例部分,通過匹配requests
庫的輸入參數,以簡潔明了的寫法更好的支持測試。
好了我們的准備工作已經全部做完了,下一章就可以開始寫點腳本了。