seldom之數據驅動


seldom之數據驅動

如果自動化某個功能,測試數據不一樣而操作步驟是一樣的,那么就可以使用參數化來節省測試代碼。

seldom是我在維護一個Web UI自動化測試框,這里跟大家分享seldom參數化的實現。

GitHub:https://github.com/SeldomQA/seldom

參數化測試用例


import seldom
from seldom import data


class BaiduTest(seldom.TestCase):

    @data([
        ("case1", "seldom"),
        ("case2", "selenium"),
        ("case3", "unittest"),
    ])
    def test_baidu(self, name, keyword):
        """
        參數化測試用例
        :param name: 用例名稱
        :param keyword: 搜索關鍵字
        """
        self.open("https://www.baidu.com")
        self.type(id_="kw", text=keyword)
        self.click(css="#su")
        self.assertTitle(keyword+"_百度搜索")


if __name__ == '__main__':
    seldom.main()

通過@data() 裝飾器來參數化測試用例,用法非常簡單。

將測試數據寫代碼里面並不是特別優雅的方式,尤其在數據比較多長時間。那么通過數據文件管理可能會更加優雅。

讀取csv文件

seldom支持csv文件的數據解析為 list。

讀取CSV文件中的數據。

import seldom
from seldom import data
from seldom import csv_to_list


class YouTest(seldom.TestCase):

    @data(csv_to_list(file="data.csv", line=2))
    def test_login(self, username, password):
        """a simple test case """
        self.open("https://login.xxx.com")
        self.type(id_="user", text=username)
        self.type(id_="pawd", text=password)
        # ...

csv_to_list() 方法CSV文件內容轉化為list。

  • file: 指定csv測試文件。
  • line: 指定從第幾行開始讀取,默認第一行。

CSV文件不支持多個Sheet,這就要求一個組數據必須創建一個單獨JSON文件,如果數據多了之后就需要創建許多單獨的JSON文件,這就不太方便了。

讀取excel文件

seldom支持excel文件的數據解析為list。

Excel文件可以創建多個Sheet標簽,通過不同的標簽管理數據。

import seldom
from seldom import data
from seldom import excel_to_list


class YouTest(seldom.TestCase):

    @data(excel_to_list(file="data.xlsx",  sheet="login", line=2))
    def test_login(self, username, password):
        """test login"""
        self.open("https://login.xxx.com")
        self.type(id_="user", text=username)
        self.type(id_="pawd", text=password)


    @data(csv_to_list(file="data.xlsx", sheet="search", line=2))
    def test_search(self, keyword):
        """test search """
        self.open("https://www.baidu.com")
        self.type(id_="kw", text=keyword)

excel_to_list() 方法excel文件數據轉化為list。

  • file : 指定excel文件的絕對路徑。
  • sheet: 指定excel的標簽頁,默認名稱為 Sheet1。
  • line : 指定從第幾行開始讀取,默認第一行。

#### 讀取JSON文件

seldom支持將JSON文件的數據解析為 list/dict。

json 文件:

{
  "search":[
    ["python"],
    ["seldom"],
    ["unittest"]
  ],
  "login":  [
    ["admin", "admin123"],
    ["guest", "guest123"]
  ]
}

一個JSON文件里面同樣可以表示不同格式的的文件。

import seldom
from seldom import data
from seldom import json_to_list


class YouTest(seldom.TestCase):

    @data(json_to_list(file="data.json", key="login"))
    def test_login(self, username, password):
        """test login """
        self.open("https://login.xxx.com")
        self.type(id_="user", text=username)
        self.type(id_="pawd", text=password)


    @data(csv_to_list(file="data.json", key="search"))
    def test_search(self, keyword):
        """test search """
        self.open("https://www.baidu.com")
        self.type(id_="kw", text=keyword)

json_to_list() 方法JSON文件數據轉化為list/dict。

  • file : 指定JSON文件的絕對路徑。
  • key: 指定字典的key,默認不指定解析整個JSON文件。

使用第三方ddt

seldom也支持第三方ddt庫。

GitHub:https://github.com/datadriventests/ddt

安裝:

> pip install ddt

創建測試文件test_data.json

{
    "test_data_1": {
        "word": "seldom"
    },
    "test_data_2": {
        "word": "unittest"
    },
    "test_data_3": {
       "word": "selenium"
    }
}

在 seldom 使用ddt

import seldom
from ddt import ddt, file_data


@ddt
class YouTest(seldom.TestCase):

    @file_data("test_data.json")
    def test_case(self, word):
        """a simple test case """
        self.open("https://www.baidu.com")
        self.type(id_="kw", text=word)
        self.click(css="#su")
        self.assertTitle(word + "_百度搜索")


if __name__ == '__main__':
    seldom.main()

更多的用法請查看ddt文檔:https://ddt.readthedocs.io/en/latest/example.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM