seldom之数据驱动

seldom之数据驱动

如果自动化某个功能,测试数据不一样而操作步骤是一样的,那么就可以使用参数化来节省测试代码。

seldom是我在维护一个Web UI自动化测试框,这里跟大家分享seldom参数化的实现。

GitHub:GitHub - SeldomQA/seldom: Seldom automation testing framework based on unittest

参数化测试用例

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:GitHub - datadriventests/ddt: Data-Driven Tests for Python Unittest

安装:

> 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()

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

相关推荐

  1. pytest 数据驱动

    2024-01-24 20:14:01       47 阅读
  2. linux 设备驱动tty_driver数据结构介绍

    2024-01-24 20:14:01       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-24 20:14:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-24 20:14:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-24 20:14:01       82 阅读
  4. Python语言-面向对象

    2024-01-24 20:14:01       91 阅读

热门阅读

  1. docker 创建oceanbase数据库

    2024-01-24 20:14:01       62 阅读
  2. 网络通信(17)-C#TcpClient 和 TcpListener的详解

    2024-01-24 20:14:01       46 阅读
  3. docker常用的命令

    2024-01-24 20:14:01       46 阅读
  4. 计算机视觉有什么发展方向

    2024-01-24 20:14:01       52 阅读
  5. Spring和SpringBoot的区别

    2024-01-24 20:14:01       61 阅读
  6. 142. 环形链表 II(Python3)

    2024-01-24 20:14:01       60 阅读
  7. openssl3.2/test/certs - 025 - client intermediate ca: cca-cert

    2024-01-24 20:14:01       55 阅读
  8. 一次查找某些后缀的文件

    2024-01-24 20:14:01       48 阅读
  9. GDB调试crashdump

    2024-01-24 20:14:01       72 阅读
  10. 1.20号网络

    2024-01-24 20:14:01       50 阅读