python3+pytest+allure+jenkins自动化测试总结整理

这里记录的是我在第二次看pytest自动化测试相关资料的时候,整理的一些概念和说明,总结下来的。

执行测试时候相关参数说明 

-m  执行指定mark用例  pytest -m slow  执行@pytest.mark.slow装饰器修饰的所有测试用例

-x 执行过程中遇到错误停止执行

--maxfile=num 当用例错误个数达到num的时候,停止执行

-k  关键字匹配 pytest -k 'myclass and not method'   将执行Testmyclass.test_something 不执行Testmyclass.test_method

-r 展示skip的脚本信息

-v  用于显示每个测试函数的执行结果

-q  只显示整体测试结果

-s 用于显示测试函数中print()函数输出

执行:

按照节点运行 pytest test_01.py::test_func
pytest test_01.py::Testclass::test_method
pytest test_01.py::Testclass::test_method 多个节点的时候,节点之间用空格隔开 pytest test_01.py::Testclass::test_method test_02.py::Testclass::test_method

跳过执行

@pytest.mark.skip(reason='')   @pytest.mark.skip((表达式),reason='') 表达式成立的时候跳过执行,表达式不成立的时候执行 使用场景:比如有个配置项,当配置项为真的时候,脚本才能正常执行,配置项为假的时候,不用执行这个用例。

 

带参数执行格式
   pytest.main(["-s", "test_sample.py" ,'--cmdopt=type2'])
  命令行格式 pytest -s test_sample.py --cmdopt=type2 也可以写为 pytest -s test_sample.py --cmdopt type2

 

pytest.xfail
可以做装饰器使用,也可以直接在方法中使用
比如一个脚本的前置条件是登录后再执行新增,我们就可以在新增前面,判断下登录是否成功,如果没成功,将该用例的结果置位xfailed
    def test_2(self):
        print ('02')
        if 1:
            pytest.xfail(reason='do')
    xfail装饰器的使用方法是  预期失败,结果是失败的,显示未xfailed  预期失败,结果是成功的,显示为xpassed
若果想让显示为xpassed也显示为xfail  在pytest.ini增加配置xfail_strict=true

 

    参数化
    一般的参数化格式
test_user_data = ["admin1", "admin2"]
@pytest.mark.parametrize('login1',test_user_data)
def test_11(login1):
    a=login1
    print (a)
将函数作为参数的格式,使用request.param来获取参数值
test_user_data = ["admin1", "admin2"]
@pytest.fixture(scope="module")
def login(request):
    user=request.param
    return user
@pytest.mark.parametrize('login',test_user_data,indirect=True)
def test_11(login):
    a=login
    print (a)

indirect的作用是将login作为函数执行,test_uer_data作为值传递给login 最后返回的user传递给a

一次传递多个参数

import pytest
test_user_data = [(1,2),(3,4)]
@pytest.fixture()
def login(request):
    user=request.param[0]
    pwd=request.param[1]
    return [user,pwd]
@pytest.mark.parametrize('login',test_user_data,indirect=True)
def test_11(login):
    a=login
    print (a)
import pytest
test_user_data = [{'name':'zhou','pwd':'123'},{'name':'wei','pwd':'234'}]
@pytest.fixture()
def login(request):
    user=request.param['name']
    pwd=request.param['pwd']
    return [user,pwd]
@pytest.mark.parametrize('login',test_user_data,indirect=True)
def test_11(login):
    a=login
    print (a)

单元测试管理 doctest

实际上是单元测试的一种,将单元测试执行用例以文档的格式放到待测试方法下,通过doctest来调用执行
def add(x,y):
    """
    function:两个数相加
    >>> add(3,4)
    7
    >>> add(1,3)
    4
    """
    return x+y
if __name__ == '__main__':
    # pytest.main(['-s','test_01.py'])
    import doctest
    doctest.testmod(verbose=True)
注意格式的要求 >>>空格 函数   返回值左对齐
verbose默认为false  执行的时候只会展示失败的信息。为True的时候显示所有的输入信息。
在cmd中执行的格式为 python -m doctest -v xxx.py
-m 指定运行方式doctest
-v verbose 这里加上这个参数默认就是true,不写-v就是verbose=false
用pytest框架也是可以执行的 pytest -v --doctest-moudles xxx.py

测试报告生成

生成html测试报告
在原有的执行命令上加载--html=a.html即可
pytest.main(["-s", "test_sample.py" ,'--cmdopt=type2','--html=a.html'])
这时候生成的报告 css是独立的,通过邮件发送给别人的时候,样式会丢失,可以把css样式合并到html
添加参数--self-contained-html,再次执行的时候,可以看到html文件变大了。
利用allure来生成测试报告
前置条件  安装allure,将allure\bin配置到环境变量中。allure是依赖java的,所以要先安装好java环境
生成步骤  1、先生成json文件 pytest.main(["-sq", "test_sample.py" ,'--alluredir=report'])
这样会在当前目录下面新建一个report目录,里面生成json格式的报告
2、将json文件生成html文件 执行 allure generate report/ -o report/html
其中的report/ 为生成的json路径, report/html是在report下生成一个html文件夹,里面存储有最终的测试结果。

 

参考:https://www.jianshu.com/p/a754e3d47671

你可能感兴趣的:(pytest)