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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/343155.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式—行为型模式之备忘录模式

设计模式—行为型模式之备忘录模式 备忘录(Memento)模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模…

jdk17新特性——文本块(即多行的字符串)增强

目录 一、文本块(即多行的字符串)概述二、文本块(即多行的字符串)示例2.1、jdk17之前 多行字符串处理方式2.2、jdk17及以后版本 多行字符串处理方式2.3、注意事项 三、文本块(即多行的字符串)转义字符示例3.1、jdk17及以后版本 多行字符串的转义字符处理方式示例一3.2、jdk17及…

又一款在线文档写作神器-Writerside

背景 最近自己整理一款在线文档,不小心,又发现github上有一款很比较符合我想法的文档,仔细跟踪以下,这款工具是 Writerside,竟然是jetbrains 出品,可以单独下载,也可以使用idea的插件使用&…

K8s知识点总结_part2

为什么我们会需要 Pod? 容器的本质是一种特殊的进程,如果映射到系统中,容器镜像就是这个系统里的“.exe”安装包。 那么 Kubernetes 呢?Kubernetes 就是操作系统 在一个真正的操作系统里,进程并不是“孤苦伶仃”地独…

软考之软件工程

一、瀑布模型 严格区分阶段,每个阶段因果关系紧密相连,只适合需求明确的项目 缺点:软件需求完整性、正确性难确定;严格串行化,很长时间才能看到结果;瀑布模型要求每个阶段一次性完全解决该阶段工作&#xf…

LeetCode_11_中等_盛最多水的容器

文章目录 1. 题目2. 思路及代码实现(Python)2.1 双指针 1. 题目 给定一个长度为 n n n 的整数数组 h e i g h t height height 。有 n n n 条垂线,第 i i i 条线的两个端点是 ( i , 0 ) (i, 0) (i,0) 和 ( i , h e i g h t [ i ] ) (i…

Python入门(一)

anaconda安装 官网:https://www.anaconda.com下载 jupyter lab 简介: 包含了Jupyter Notebook所有功能。 JupyterLab作为一种基于web的集成开发环境,你可以使用它编写notebook,操作终端,编辑markdown文本&#xf…

openGauss学习笔记-205 openGauss 数据库运维-常见故障定位案例-业务运行时整数转换错

文章目录 openGauss学习笔记-205 openGauss 数据库运维-常见故障定位案例-业务运行时整数转换错205.1 业务运行时整数转换错205.1.1 问题现象205.1.2 原因分析205.1.3 处理办法 openGauss学习笔记-205 openGauss 数据库运维-常见故障定位案例-业务运行时整数转换错 205.1 业务…

CSS之边框样式

让我为大家介绍一下边框样式吧!如果大家想更进一步了解边框的使用,可以阅读这一篇文章:CSS边框border 属性描述none没有边框,即忽略所有边框的宽度(默认值)solid边框为单实线dashed边框为虚线dotted边框为点线double边框为双实线 代码演示&…

Vulnhub靶机:FunBox 4

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:FunBox 4(10.0.2.29) 目标:获取靶机root权限和flag 靶机下载地址:https://download.vulnhub.com/funbo…

Java 面向对象案例 03(黑马)

代码: public class phoneTest {public static void main(String[] args) {phone [] arr new phone[3];phone p1 new phone("华为",6999,"白色");phone p2 new phone("vivo",4999,"蓝色");phone p3 new phone("苹…

喷墨打印机市场分析:预计2029年将达到548亿美元

喷墨打印机是将彩色液体油墨经喷嘴变成细小微粒喷到印纸上,有的喷墨打印机有三个或四个打印喷头,以便打印黄、品红青黑四色;有的是共用一个喷头,分四色喷印。 喷墨打印机是在针式打印机之后发展起来的,采用非打击的工作方式。比较突出的优点有…

STM32标准库开发——串口发送/单字节接收

USART基本结构 串口发送信息 启动串口一的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);初始化对应串口一的时钟,引脚,将TX引脚设置为复用推挽输出。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_In…

第7章 7.6.5 常量指针 Page406~407

const可以限制指针指向的数据,也可以限制指针的指向 const限制指针指向的数据,不可以修改指向的数据,可以改变指向 推荐写法 常见写法:

discuz论坛附件上传限制大小2MB

我遇到了这个问题,去修改了配置PHP.ini文件没有解决. 我把他变成2000M依旧没有用,然后我选择了用户组,附件部分。如图所示: 然后这个时候我还是没有好,我同事的却不限制大小了,我去清理缓存&#xff…

k8s 容器 java 应用内存限制不生效

一 k8s java 应用内存限制不生效 回顾:Linux杂谈之java命令 namespace负责资源隔离 cgroups负责资源限制 容器JVM最佳实践 Metaspace 是 非 Heap 内存 管理空间,那么 Heap 就是操作空间 JVM内存模型简介 隔离: 两个进程完全隔离感知&#xff1…

进程线程知识

一 初识linux线程 1 线程由来 我们之前说创建一个进程,要创建进程控制块pcb,进程地址空间,页表,而且我之前的博客中都有意无意的说明这个pcb是描述进程的,是os用来管理进程的,而有了线程后,就要…

linux中用户及用户组信息

1,linux通过用户名和口令来验证用户的身份。 2,几个用户可以组成一个用户组。 3,useradd工具添加用户,groupadd命令添加用户组。 4,history 命令查看用户在Shell中执行命令的历史记录。 5,userdel命令删…

机械硬件知识学习

目录 1.电机减速机、扭矩2.伺服电机、步进电机、直线电机3.电机马达的曲线运动是如何转化为轴的直线运动 大佬科普运动控制系统链接:https://www.cnblogs.com/cariohu/p/15508175.html 自己对机械知识的了解是盲区,学习下接触到的一些硬件知识&#xff0…

Ubuntu Desktop Server - xport: command not found

Ubuntu Desktop Server - xport: command not found 1. xport: command not found2. export 错误写成了 xportReferences 1. xport: command not found 2. export 错误写成了 xport strongforeverstrong:~$ gedit ~/.bashrcReferences [1] Yongqiang Cheng, https://yongqian…