zoukankan      html  css  js  c++  java
  • 使用@pytest.mark.parametrize进行参数传递测试

    摘自: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

  • 相关阅读:
    高盛、沃尔玛 题做出来还挂了的吐槽
    amazon师兄debrief
    到所有人家距离之和最短的中点 296. Best Meeting Point
    问问题没人回答的情况怎么办终于有解了
    找名人 277. Find the Celebrity
    数组生存游戏 289. Game of Life
    547. Number of Provinces 省份数量
    428. Serialize and Deserialize Nary Tree 序列化、反序列化n叉树
    alias别名简介和使用
    面试官:线程池执行过程中遇到异常会发生什么,怎样处理? Vincent
  • 原文地址:https://www.cnblogs.com/fyly/p/11223287.html
Copyright © 2011-2022 走看看