在學pytest的過程中,我一直搞不懂為什麼變量引用用變量名或{變量名}引用,方法用
from string import Template
...
var_data = Template("access_token is $access_token")
# sub_string的内容可以讀取yaml檔案,然後轉換成string,即dumps
sub_string = {"access_token": "abcdefg12345"}
var_data.safe_substitute(sub_string)
...
複制
完成變量引用。
我們繼續來學習httprunner3.x版本
上一講我們先介紹了httprunner的必須知道的指令。
現在我們來通過案例,進一步了解httprunner
我們先打開fiddler,然後用postman分别跑擷取access_token和建立标簽的接口。分别選擇fiddler抓到的兩個接口的包,然後選擇導出
格式選擇HTTPArchive v1.2,這樣儲存下的就是.har檔案
然後把這兩個.har檔案複制到項目har檔案夾下,并在pycharm的終端(Terminal)中先到har檔案夾目錄,然後執行指令
har2case 檔案名.har -2y
複制
也就是把har檔案轉換成yaml檔案,如下圖
然後我們把get_acc.yml内容進行修改,改成我們做接口架構時要用的樣子
1、删掉多餘的内容如headers
2、用例資料全部采用引用
config:
name: testcase description
variables:
appid: wx4d8f7de320aca501
grant_type: client_credential
secret: d096e22047235cad799d917a517c6246
verify: False
base_url: https://api.weixin.qq.com
teststeps:
- name: /cgi-bin/token
request:
method: GET
params:
appid: $appid
grant_type: $grant_type
secret: $secret
url: /cgi-bin/token
extract:
access_token: content.access_token
validate:
- equals:
- status_code
- 200
- eq:
- body.expires_in
- 7200
複制
然後通過
hrun get_acc.yml
執行
可以看到用例仍然成功了。
一般來說,我們測試用例的結構為:
config: #配置
name #名稱
variables #全局變量
verify #https協定
base_url #環境變量
teststeps #步驟
name #步驟名稱
request #請求
headers #請求頭
method #請求方式
params #請求參數
url #請求路徑
cookie #cookie資訊
json #用于發送http請求正文
data #用于發送http請求正文
extract #提取:通過content或body,很少用正則
validate #斷言
複制
直接執行
hrun 檔案名.yml
不列印傳回值,加個-s即可
hrun -s 檔案名.yml
複制
上面我們實作了單個接口用例,但是我們工作中要做很多冒煙測試,那怎麼把用例關聯呢?
我們先對檔案進行分類
1、把.har檔案放到har檔案夾
2、建立api檔案夾,把我們寫好的變量用例放到裡面
3、把測試用例檔案放到testcases檔案夾
4、建立testsuites檔案夾,用于存放冒煙、接口關聯用例
代碼:
# api/get_access_token.yml
config:
name: 擷取access_token
variables:
appid: wx4d8f7de320aca501
grant_type: client_credential
secret: d096e22047235cad799d917a517c6246
verify: False
base_url: https://api.weixin.qq.com
teststeps:
- name: /cgi-bin/token
request:
method: GET
params:
appid: $appid
grant_type: $grant_type
secret: $secret
url: /cgi-bin/token
extract:
access_token: content.access_token
複制
# api/select_tags.yml
config:
name: 查詢标簽
variables:
access_token: ${access_token}
verify: false
base_url: https://api.weixin.qq.com
teststeps:
- name: /cgi-bin/tags/get
request:
method: GET
params:
access_token: ${access_token}
url: /cgi-bin/tags/get
複制
# testcases/get_access_token_case.yml
config:
name: get_access_token
teststeps:
- name: /cgi-bin/token
api: api/get_access_token.yml
複制
# testcases/select_tags_case.yml
config:
name: select tags
teststeps:
- name: /cgi-bin/token
api: api/get_access_token.yml
export:
- access_token
- name: /cgi-bin/tags/get
api: api/select_tags.yml
複制
# testsuites/tags_suits.yml
config:
name: 查詢标簽
teststeps:
- name: /cgi-bin/token
testcase: testcases/get_access_token_case.yml
- name: /cgi-bin/tags/get
testcase: testcases/select_tags_case.yml
複制
testsuits一般用于接口關聯的冒煙測試。
需要注意的是查詢标簽需要傳access_token,我們在api檔案夾下的select_tags.yml寫的全是變量。如下圖:
提取變量在測試用例的export關鍵字裡,這樣寫就能把傳回的access_token取出來了
這裡需要強調一下:
1、檔案夾的名不要寫錯了,在httprunner裡檔案夾名是有要求的
2、testsuites檔案夾下調用的用例裡不能有斷言validate。
不然就會各種報錯……