最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

unittestreport 數(shù)據(jù)驅(qū)動 (DDT) 的實現(xiàn)源碼解析

2020-09-30 11:38 作者:軟件測試檸檬班Pro  | 我要投稿

前言

在做自動化過程中,通過數(shù)據(jù)驅(qū)動主要是為了將用例數(shù)據(jù)和用例邏輯進(jìn)行分離,提高代碼的重用率以及方便用例后期的維護(hù)管理。

很多小伙伴在使用 unittest 做自動化測試的時候,都是用的 ddt 這個模塊來實現(xiàn)數(shù)據(jù)驅(qū)動的。也有部分小伙伴對 ddt 內(nèi)部實現(xiàn)的源碼比較感興趣,前段時間小編在開發(fā) unttestreport 的時候也寫了一版數(shù)據(jù)驅(qū)動,使用的入口和 ddt 差不多,今天就給大家分析一下 unittestreport 中數(shù)據(jù)驅(qū)動(ddt),源碼實現(xiàn)的過程!

在給大家分析源碼之前先給大家講解一下 unittestreport 中的 ddt 如何使用!unittestreport.dataDriver 模塊中實現(xiàn)了三個使用方法,支持使用列表(可迭代對象)、JSON 文件、YAML 文件來生成測試用例,這邊給大家介紹一下使用方法:

1、模塊導(dǎo)入

2、使用案例

第一步:使用 ddt 裝飾測試用例類

第二步:根據(jù)使用的數(shù)據(jù)選擇對應(yīng)的方法進(jìn)行驅(qū)動

第三步:運(yùn)行上面用例文件,就會發(fā)現(xiàn)執(zhí)行了三條測試用例

在上面的使用案例中我們使用了一個 ddt 的裝飾器去裝飾測試用例類,一個 list_data 的裝飾器去裝飾測試用例方法。

1、ddt

在上面的用例類前面我們用了一個@ddt 這行代碼的作用到底是什么呢?

我們來看一下 ddt 里面的源碼

從上面的源碼我們可以看出來,把測試類當(dāng)成參數(shù)傳入 data 之后,在內(nèi)部做了一系列操作之后將測試類返回了出來。這一系列操作其實就是根據(jù)測試用例數(shù)據(jù),創(chuàng)建測試用例方法添加到測試類中,代碼中重要步驟如下圖描述所示。

對于上面遍歷,判斷方法是否擁有 PARAMS 屬性,這個 PARAMA 屬性是怎么來的呢?PARAMA 屬性是@list_data(cases)的時候添加的,接下來我們來看一下 list_data 的源碼

2、list_data

上面案例中@list_data(cases)這行代碼的作用等同于 test_case = list_data(cases)(test_case),我們來看一下源碼。

通過源碼我們可以發(fā)現(xiàn)執(zhí)行@list_data(cases)的時候只做了一件事情,就是給測試用例方法添加了一個 PARAMS 屬性。

通過上面的源碼分析,我們來簡單的講一下,關(guān)于 ddt 實現(xiàn)的具體流程。

在 ddt 這個函數(shù)中我們調(diào)用了?_create_test_name?和?_update_func?這兩個內(nèi)部方法,那么這兩個內(nèi)部方法中分別做了什么事情呢?接下來分別來看一下

可以看到該方法會根據(jù)傳進(jìn)來的 index(用例數(shù)據(jù)的索引)和原用例名進(jìn)行拼接,生成一個新的用例方法名。

從上面的代碼可以看到,這個函數(shù)內(nèi)部重寫定義了一個函數(shù),將原來的函數(shù)保存為了這個函數(shù)對象的屬性,并設(shè)置了函數(shù)名,以及函數(shù)相關(guān)的文檔字符串,最后將函數(shù)返回了。函數(shù)內(nèi)部調(diào)研的還是原來的函數(shù)(測試用例方法)。

1、將所有的測試用例數(shù)據(jù)保存為測試方法的 PARAMS 屬性。

2、遍歷測試類的所有屬性和方法。

3、判斷遍歷出來的屬性或者方法是否擁有 PARAMS 屬性。

4、如果擁有 PARAMS 屬性,那么就遍歷 PARAMS 中的測試數(shù)據(jù)。

5、每遍歷出來一條數(shù)據(jù),就創(chuàng)建一個測試方法,并將測試方法添加為測試類的類屬性。

關(guān)于數(shù)據(jù)驅(qū)動實現(xiàn)的源碼就給大家介紹到這里了,另附 unittestreport 模塊詳細(xì)的使用文檔,里面有關(guān)于更多的 uniitestreport 擴(kuò)展使用功能哦。有興趣的小伙伴可以去看一下:unittestreport 詳細(xì)功能使用文檔(V1.1.1)

說明:本文為檸檬班木森老師原創(chuàng),轉(zhuǎn)載需注明出處!

unittestreport 數(shù)據(jù)驅(qū)動 (DDT) 的實現(xiàn)源碼解析的評論 (共 條)

分享到微博請遵守國家法律
黔西县| 谷城县| 福鼎市| 依安县| 齐河县| 绥阳县| 侯马市| 两当县| 漾濞| 乌兰县| 农安县| 大洼县| 六枝特区| 噶尔县| 蒙城县| 平南县| 台安县| 原平市| 仪征市| 河曲县| 和林格尔县| 金溪县| 察哈| 临城县| 泗阳县| 绥中县| 晋城| 河南省| 尉氏县| 霍山县| 锦州市| 清新县| 衡南县| 即墨市| 宝坻区| 桃园市| 永宁县| 英吉沙县| 弥渡县| 大竹县| 将乐县|