前言
一般來說,在進行實際應用的開發過程中,應用會擁有不同的運行環境,通常會有以下環境:
- 本地開發環境
- 測試環境
- 生產環境
在不同環境中,我們可能會使用不同的數據庫或郵件發送等配置,這時候則需要通過 .env
文件來針對不同的運行環境作不同的設置。
環境變量
在自動化測試中,有時需要借助環境變量實現某些特定的目的,常見的場景包括:
- 切換測試環境
- 切換測試配置
- 存儲敏感數據(從信息安全的角度出發)
Windows 系統中使用 set 命令設置環境變量和值,接下來設置以下變量
- base_url = http://127.0.0.1:8000 設置base_url值,可以一鍵切換運行的環境
- username = test 設置登陸賬號和密碼,切換賬號測試
- password = 123456 設置登陸賬號和密碼,切換賬號測試
打開cmd,使用 set key=value
格式設置環境變量(linux使用 export
命令)
C:\Users\dell>set base_url=http://127.0.0.1:8000
C:\Users\dell>set username=test
C:\Users\dell>set password=123456
查看環境變量值使用 set keyname
查看對應的值
C:\Users\dell>set base_url
base_url=http://127.0.0.1:8000
C:\Users\dell>set username
username=test
C:\Users\dell>set password
password=123456
在windows系統里面,命令行引用變量用 %var%
C:\Users\dell>echo 賬號:%username%
賬號:test
linux 系統中使用 export 命令設置環境變量和值, 引用變量$keyname
[root@VM_0_2_centos ~]# export base_url=http://127.0.0.1:8000
[root@VM_0_2_centos ~]# export username=test
[root@VM_0_2_centos ~]# echo $base_url
http://127.0.0.1:8000
[root@VM_0_2_centos ~]# echo $username
test
在cmd設置的環境變量只是臨時的環境變量,不會保存到電腦本地,關閉窗口后自動清除。
.env 文件設置環境變量
winodws無法直接創建 .env 的文件,會提示文件名不能為空,這里使用 pycharm 新建用過 .env 文件
(或者你新建用過 1.env 的文件,在cmd窗口重命名 rename 1.env .env
)
# .env
base_url=http://127.0.0.1:8000
username=test
password=123456
在 HttpRunner 3.x版本中內置了函數 ENV
函數讀取環境變量的值
yaml 腳本案例
引用環境變量使用ENV函數 ${ENV(keyname)
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
config:
name: login case
variables:
user: ${ENV(username)}
psw: ${ENV(password)}
base_url: ${ENV(base_url)}
teststeps:
-
name: step login
request:
url: /api/v1/login
method: POST
json:
username: $user
password: $psw
extract:
token: content.token
validate:
- eq: [status_code, 200]
- eq: [content.code, 0]
- eq: [content.msg, login success!]
- len_eq: [content.token, 40]
pytest 腳本
# NOTE: Generated By HttpRunner v3.1.4
# FROM: testcases\login_env.yml
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
class TestCaseLoginEnv(HttpRunner):
config = (
Config("login case")
.variables(**{"user": "${ENV(username)}", "psw": "${ENV(password)}"})
.base_url("${ENV(base_url)}")
)
teststeps = [
Step(
RunRequest("step login")
.post("/api/v1/login")
.with_json({"username": "$user", "password": "$psw"})
.extract()
.with_jmespath("body.token", "token")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.code", 0)
.assert_equal("body.msg", "login success!")
.assert_length_equal("body.token", 40)
),
]
if __name__ == "__main__":
TestCaseLoginEnv().test_start()
.env
文件必須放到項目根目錄(debugtalk.py同一層級)
httpruner2.x 版本可以使用 --dot-env-path
參數指定.env的路徑,但在 httprunner3.x 版本已經去掉了這個參數