码迷,mamicode.com
首页 > 其他好文 > 详细

使用@pytest.mark.parametrize进行参数传递测试

时间:2019-07-21 23:59:31      阅读:596      评论:0      收藏:0      [点我收藏+]

标签:有一个   写代码   试验   展示   自己   def   就是   一个   测试数据   

摘自:https://blog.csdn.net/sunny_happy08/article/details/83658661

 

最近因工作需要用到@pytest.mark.parametrize()传多个参数,实现执行不同数据。

    我的需求
数据源是excel,excel的每一行都是一条测试用例,已实现读取测试用例和处理测试用例的逻辑。接下来就是将这些测试数据通过pytest.mark.parametrize()传入测试函数,循环执行这些测试数据,每次执行时都需要assert用例结果, 以便将测试结果展示到pytest的结果文件中(通过pytest --html=./report/report.html)
     实现可行性  
上篇文章已经很详细的指出了用@pytest.mark.parametrize()传多个参数实现执行不同数据的情况。通过上篇文章的例子,我们发现,pytest会自动执行循环,且对用户是透明的,用户不需要自己去写循环逻辑。直接将测试的list丢进去,就会循环执行,这是我们所期望的。也是符合我的需求的。
      遇到问题
 安照这个逻辑,我只需要将excel读出来的所有数据当做一个list传到测试函数里就可以了,等着pytest自行调度执行,最后assert每条执行结果是True还是False就成了。实际是:pytest的确是执行了每条测试案例,虽然每条案例也写了assert,但是pytest把所有案例执行完了当做一个整体返回assert结果。pytest的执行记录里显示的也是只有一个案例。这个结果与我的预期是不一样的。怎么办?
       解决方案
  想不出原因,只好硬着头皮去写试验代码,由结果猜测原因了。
  难道不支持多个参数?不太可能,因为明明是写着多个参数的。那就是多个参数写法的问题咯。翻了代码发现,当传多个参      数时,第二个参数是多个元组组成的list。一一列出来写的。我是将这个元组参数化了,用一个形参穿进去的。有了这个猜        测,就写代码验证下,果然是这么个样子。
  通过执行试验代码发现,一一列出来写,是把每个元组的元素作为形参传进去的;按形参传是吧一个list传进去的,所以,一一列出会每个元素都会有一个结果,按形参传入就整个list执行完了才出结果。ok,问题解决。
       实验代码
         

       
          

          执行结果
           

           PS:当有多个参数都是list,且list的长度不一致时,要这样一一列出来就略尴尬了,记录一下pytest.mark.parametrize()的局限性的。另外,当@pytest.mark.parametrize()只一个参数时,是把list的每个元素当做形参传入的,会assert每次执行结果。

传一个参数时,两种写法都可以,具体看以下实例

写法一:

@pytest.mark.parametrize(‘name‘, [‘sunny‘, ‘kevinse‘, ‘jacky‘])

def test_name(name):

    print name

写法二:

name_list = [‘sunny‘, ‘kevinse‘, ‘jacky‘]

@pytest.mark.parametrize(‘name‘, name_list)

def test_name(name):

    print name

使用@pytest.mark.parametrize进行参数传递测试

标签:有一个   写代码   试验   展示   自己   def   就是   一个   测试数据   

原文地址:https://www.cnblogs.com/fyly/p/11223287.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!