1080×213 18.7 KB
理念與同“UI自動化測試框架”中的“測試步驟的數據驅動”相同ros測試ip重復自動換,接口中的測試步驟的數據驅動就是將接口的參數(比如 、url、param等)封裝到 yaml 文件中管理。當測試步驟發生改變,只需要修改 yaml 文件中的配置即可。
數據驅動就是數據的改變從而驅動自動化測試的執行,最終引起測試結果的改變。簡單來說,就是參數化的應用。數據量小的測試用例可以使用代碼的參數化來實現數據驅動,數據量大的情況下建議使用一種結構化的文件(例如yaml,json等)來對數據進行存儲,然后在測試用例中讀取這些數據。
原理與前面章節“UI自動化測試框架”中的“測試數據的數據驅動”大同小異。依然使用 @.mark. 裝飾器來進行參數化,使用參數化來實現數據驅動。
通過參數化的方式,分別判斷id為2,3的部門的為1:
import pytest
class TestDepartment:
department = Department()
@pytest.mark.parametrize("id", [2, 3])
def test_department_list(self, id):
r = self.department.list(id)

assert self.department.jsonpath(expr="$..parentid")[0] == 1
上面的代碼首先使用 @.mark. 裝飾器,傳遞了兩組數據,測試結果顯示有兩條測試用例被執行,而不是一條測試用例。也就是 會將兩組測試數據自動生成兩個對應的測試用例并執行,生成兩條測試結果。
當測試數據量大的情況下,可以考慮把數據存儲在結構化的文件中。從文件中讀取出代碼中所需要格式的數據,傳遞到測試用例中執行。本次實戰以YAML進行演示。YAML以使用動態字段進行結構化,它以數據為中心,比 excel、csv、Json、XML 等更適合做數據驅動。
將上面參數化的兩組數據存儲到 yaml 文件中,創建一個data/.yml文件,代碼如下:
-2
-3
上面的代碼定義了一個 yaml 格式的數據文件.yml,文件中定義了一個列表ros測試ip重復自動換,列表中有兩個數據,最后生成的是這樣的數據格式:[1,2]。將測試用例中參數化的數據改造成從 .yml 文件中讀取,代碼如下:
class TestDepartment:
department = Department()
@pytest.mark.parametrize("id", \
yaml.safe_load(open("../data/department_list.yml")))

def test_department_list(self, id):
r = self.department.list(id)
assert self.department.jsonpath(expr="$..parentid")[0] == 1
上面的代碼,只需要使用yaml.()方法,讀取.yml文件中的數據,分別傳入到用例 () 方法中完成輸入與結果的驗證。
實際工作中,對于環境的切換和配置,為了便于維護,通常不會使用硬編碼的形式完成。在“多環境下的接口測試”章節中已經介紹了,如何將環境的切換作為一個可配置的選項。本章節會把這部分內容進行重構,使用數據驅動的方式完成多環境的配置。
根據“多環境下的接口測試”章節,將此章節中的環境配置部分改為數據驅動的模式
代碼如下:
#把host修改為ip,并附加host header
env={
"docker.testing-studio.com": {
"dev": "127.0.0.1",
"test": "1.1.1.2"

},
"default": "dev"
}
data["url"]=str(data["url"]).replace(
"docker.testing-studio.com",
env["docker.testing-studio.com"][env["default"]]
)
data["headers"]["Host"]="docker.testing-studio.com"
依然以yaml為示例,將所有的環境配置信息放到 env.yml 文件中。如果怕出錯,可以先使用yaml.(env)將dict格式的代碼轉換為yaml。
如下所示,打印出來的,就是成功轉換yaml格式的配置信息:
def test_send(self):
env={

"docker.testing-studio.com": {
"dev": "127.0.0.1",
"test": "1.1.1.2"
},
"default": "dev"
}
yaml2 = yaml.safe_dump(env)
print("")
print(yaml2)
將打印出來的內容粘貼到 env.yml 文件中: env.yml
docker.testing-studio.com:
dev: "127.0.0.1"

test: "1.1.1.2"
level: 4
default:
"dev"
將環境準備中的代碼稍作修改,把env變量從一個典型dict改為,使用yaml.讀取 env.yml:
# 把host修改為ip,并附加host header
env = yaml.safe_load(open("./env.yml"))
data["url"] = str(data["url"]).\
replace("docker.testing-studio.com",
env["docker.testing-studio.com"][env["default"]])
data["headers"]["Host"] = "docker.testing-studio.com"
如此一來,就可以實現使用數據驅動的方式,通過修改 env.yml 文件來直接修改配置信息。
更多技術文章
喜歡軟件測試的小伙伴們,如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!