
理念與同“UI自動化測驗框架”中的“測驗步驟的資料驅動”相同,介面中的測驗步驟的資料驅動就是將介面的引數(比如 method、url、param等)封裝到 yaml 檔案中管理,當測驗步驟發生改變,只需要修改 yaml 檔案中的配置即可,
資料驅動就是資料的改變從而驅動自動化測驗的執行,最終引起測驗結果的改變,簡單來說,就是引數化的應用,資料量小的測驗用例可以使用代碼的引數化來實作資料驅動,資料量大的情況下建議使用一種結構化的檔案(例如yaml,json等)來對資料進行存盤,然后在測驗用例中讀取這些資料,
原理與前面章節“UI自動化測驗框架”中的“測驗資料的資料驅動”大同小異,依然使用 @pytest.mark.parametrize 裝飾器來進行引數化,使用引數化來實作資料驅動,
通過引數化的方式,分別判斷id為2,3的部門的parentid為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
上面的代碼首先使用 @pytest.mark.parametrize 裝飾器,傳遞了兩組資料,測驗結果顯示有兩條測驗用例被執行,而不是一條測驗用例,也就是 pytest 會將兩組測驗資料自動生成兩個對應的測驗用例并執行,生成兩條測驗結果,
當測驗資料量大的情況下,可以考慮把資料存盤在結構化的檔案中,從檔案中讀取出代碼中所需要格式的資料,傳遞到測驗用例中執行,本次實戰以YAML進行演示,YAML以使用動態欄位進行結構化,它以資料為中心,比 excel、csv、Json、XML 等更適合做資料驅動,
將上面引數化的兩組資料存盤到 yaml 檔案中,創建一個data/department_list.yml檔案,代碼如下:
-2
-3
上面的代碼定義了一個 yaml 格式的資料檔案department_list.yml,檔案中定義了一個串列,串列中有兩個資料,最后生成的是這樣的資料格式:[1,2],將測驗用例中引數化的資料改造成從 department_list.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.safe_load()方法,讀取department_list.yml檔案中的資料,分別傳入到用例 test_department_list() 方法中完成輸入與結果的驗證,
實際作業中,對于環境的切換和配置,為了便于維護,通常不會使用硬編碼的形式完成,在“多環境下的介面測驗”章節中已經介紹了,如何將環境的切換作為一個可配置的選項,本章節會把這部分內容進行重構,使用資料驅動的方式完成多環境的配置,
根據“多環境下的介面測驗”章節,將此章節中的環境配置部分改為資料驅動的模式
代碼如下:
#把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.safe_dump(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.safe_load讀取 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 檔案來直接修改配置資訊,
更多技術文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/493212.html
標籤:其他
