本篇文章则介绍如何使用Python进行数据驱动。这里以pytest测试框架为例,重点讲解pytest参数化相关知识。(关于pytest的环境配置以及基础使用不在本文的讨论范围)
pytest中使用标签@pytest.mark.parametrize 实现参数化功能,在执行用例的时候该标签迭代中的每组数据都会作为一个用例执行。
一组参数化数据
定义参数化数据,代码如下:
- class TestDemo1:
- @pytest.mark.parametrize('actual_string, expect_string', [(1, 1), ('BB', 'BB'),('AA', 'BB')])
- def test_1(self, actual_string, expect_string):
- assert (expect_string == actual_string)
运行结果如下,三组数据在三条测试用例中运行,其中数据('AA', 'BB')运行失败!
多组参数化数据
在一个测试类中,可以定义多组参数化数据(参数化数据个数不同,test_1二个,test_2三个),代码如下:
- class TestDemo1:
- @pytest.mark.parametrize('actual_string, expect_string', [(1, 1), ('BB', 'BB'),('AA', 'BB')])
- def test_1(self, actual_string, expect_string):
- assert (expect_string == actual_string)
- @pytest.mark.parametrize('result, a,b', [(1, 1,0),(2, 1,0) ])
- def test_2(self, result, a,b):
- assert (result == a+b)
运行结果如下,二组数据分别在test_1和test_2中运行!
从excel中读取数据作为参数
我们可以自定义一些方法,对外部文件进行读取,然后把读取的数据作为参数在pytest
中引用。把测试数据保存在excel中,如下图
写一个读取excel类文件的方法,使用模块pandas ,使用命令pip install pandas 安装模块,源码如下:
- import pandas as pd
- # 读取Excel文件 -- Pandas
- def read_data_from_pandas(excel_file, sheet_name):
- if not os.path.exists(excel_file):
- raise ValueError("File not exists")
- s = pd.ExcelFile(excel_file)
- df = s.parse(sheet_name)#解析sheet页的数据
- return df.values.tolist()#数据返回为list
从excel中读取数据,并赋值给变量进行参数化,代码如下:
- @pytest.mark.parametrize('actual_string, expect_string', read_data_from_pandas('E:/TestData.xls', 'data1'))
- def test_3(self, actual_string, expect_string):
- assert (expect_string == actual_string)
运行结果如下,三组数据在三条测试用例中运行!
注意:excel中的首行,默认不会作为测试数据处理。
近日,由百易传媒(DOIT)发起评选的2020年度百易奖获奖名单正式揭晓。凭借突出的技...
以后大家在喊我“小编”的时候 记得前面加个头衔 我现在是“预言帝小编” 还记得...
Windows云服务器无法访问外网怎么办? Linux云服务器无法访问外网怎么办? 网站...
一、Lambda架构需求 Lambda架构背后的需求是由于MR架构的延迟问题。MR虽然实现了...
今天的内容依然是来自《R for datascience》,目前已经看到了15.4了,每次遇到比...
如今,云原生是大趋势毋庸置疑, 但交付环境差异下的云原生应理管理痛点怎么破?...
如今,企业将数据全部存储在Excel文件和传统数据库中的日子已经一去不复返了。随...
本文已经过原作者 Taimoor Sattar 授权翻译。 Javascript 是浏览器可以理解的语...
据海外投资人Jamie Zoch推特消息, 域名 Mixer.com已正式转移到了Facebook服务器...
IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最...