zoukankan      html  css  js  c++  java
  • pytest--运行指定的测试和参数化

     mark

    pytest提供了标记机制,允许你使用marker对测试函数做标记,一个测试函数可以有多个marker,一个marker也可以用来标记多个测试函数

    比如我们需要进行冒烟测试,不可能把所有的用例都跑一遍,我们可以挑选一些重要的用例进行冒烟测试,为了把选定的测试加入冒烟测试,可以对他们添加@pytest.mark.smoke装饰器。我们有两个文件,里面分别放了两个测试用例

    test_demo.py

    import pytest
    
    
    @pytest.mark.get
    def test_demo3():
        print('我是tets demo 3')
    
    
    @pytest.mark.smoke
    @pytest.mark.get
    def test_demo4():
        print('我是tets demo 4')

    test_mark.py

    import pytest
    
    
    @pytest.mark.get
    def test_demo1():
        print('我是tets demo 1')
    
    
    @pytest.mark.smoke
    @pytest.mark.get
    def test_demo2():
        print('我是tets demo 2')

    我们可以看到,冒烟测试两个文件里面各有一个,来使用-m参数执行一下,这样我们标记的smoke的用例就被执行了,其他的没有被执行

    -m后面也可以使用表达式,可以在标记之间添加and,or,not关键字

    跳过测试

    要跳过某个测试,只需要简单的在测试函数上方添加@pytest.mark.skip()装饰器即可
    比如下面的两个测试用例,我们只想执行test_demo2,则我们可以给test_demo1加上装饰器
    import pytest
    
    @pytest.mark.skip()
    def test_demo1():
        print('我是tets demo 1')
    
    
    def test_demo2():
        print('我是tets demo 2')

    skipif

    我们可以给要跳过的测试添加理由和条件,这时应当使用skipif来替代skip

    import pytest
    
    @pytest.mark.skipif(3<5, reason='版本不匹配')
    def test_demo1():
        print('我是tets demo 1')
    
    
    def test_demo2():
        print('我是tets demo 2')

    前面的是个条件,可以是python的表达式,表达式的值为True时跳过,为false时执行。后面的是原因,在来执行一次

    但我们仍然看不到跳过的原因,这时可以使用-rs

    运行测试子集

     运行测试有很多方式,不但可以选择运行某个测试目录、文件、类中的测试,还可以选择运行某一个测试用例

    运行单个目录

    运行单个目录下的所有测试,以目录作为pytest的参数即可

    比如我testpytest目录下有两个测试文件,分别是test_demo.py和test_mark.py

    运行单个测试文件

    运行单个文件里的全部测试,以路径名加文件名作为pytest参数即可

    比如我们只想运行testpytest目录下的test_demo.py文件

    运行单个测试函数

    运行单个测试函数,只需要在文件名后添加::符号和函数名

    比如我们只想运行testpytest目录下的test_demo.py文件里的test_demo3这个函数

    运行单个测试类

    与运行单个函数类似,只需要在文件名后面加上::符号和类名

    import pytest
    
    
    class Test1():
        def test_demo3(self):
            print('我是tets demo 3')
    
        def test_demo4(self):
            print('我是tets demo 4')
    
    
    class Test2():
        def test_demo1(self):
            print('我是tets demo 1')
    
        def test_demo2(self):
            print('我是tets demo 2')

    比如我们只想运行Test2的类

    运行单个测试类中的测试方法

    如果不希望运行测试类中的所有测试,只想指定运行其中一个,则在类名后面再加上::符号和方法名

     用测试名划分测试集合

     -k选项允许用一个表达式指定需要运行的测试,该表达式可以匹配测试名(或者子串)。表达式中可以包含and,or,not

    def test_demo1():
        print('我是tets demo 1')
    
    
    def test_demo2():
        print('我是tets demo 2')
    
    
    def test_demo3():
        print('我是tets demo 3')
    
    
    def test_parm():
        print('我是tets parm')

    如上代码我们只想运行测试函数里面有demo的所有用例

    参数化

    可以使用 @pytest.mark.parametrize(argnames, argvalues) 装饰器达到批量传送参数的目的

    parametrize()的第一个参数是用逗号分割的字符串列表,第二个参数是一个值列表

    import pytest
    
    
    @pytest.mark.parametrize("a,b,c",
                             [(1, 2, 3),
                              (3, 2, 5),
                              (4, 5, 9)])
    def test_add(a, b, c):
        assert a + b == c

  • 相关阅读:
    服务器迁移总结
    使用OpenSSL生成证书
    mysql Event、存储过程、表命令
    负载均衡 > 常见问题
    SpringMVC记住密码功能
    spring mvc +cookie+拦截器功能 实现系统自动登陆
    android studio之argument for @notnull parameter 'name'
    jQuery ajax表单提交实现局部刷新
    Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法
    ajax表单提交全路径
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11298547.html
Copyright © 2011-2022 走看看