美文网首页Pytest
pytest单元测试框架(1)基础操作运行

pytest单元测试框架(1)基础操作运行

作者: 小二哥很二 | 来源:发表于2019-07-25 21:14 被阅读0次

1.安装 pytest是python语言的一个测试的第三方的库,那么我们首先需要-安装它,安装的命令是:
pip install -U pytest

------------------------------------------------------------------

2.第一个程序运行:运行方法,进入.py文件制定目录,输入pytest

class Testclass:
    def test_one(self):
        x='this'
        assert 'h' in x
    def test_two(self):
        x='hello'
        assert hasattr(x,'hello')
# hasattr(object,name)判断对象object是否包含对应的属性或方法
image.png

------------------------------------------------------------------

3.如何编写pytest测试样例
编写pytest测试样例非常简单,只需要按照下面的规则:
测试文件以test_开头(以test结尾也可以)
测试类以Test开头,并且不能带有 init 方法:Class Test
...,必须要大写的T
测试函数以test_开头:def test_....
断言使用基本的assert即可,pytest会执行文件中所有test_
.py 或 _test.py格式的文件以及以test开头的方法或者class,不然就会提示找不到可以运行的case了

------------------------------------------------------------------

4.运行指定的case。当我们写了较多的cases时,如果每次都要全部运行一遍,无疑是很浪费时间的,通过指定case来运行就很方便了。

class Testclassone():
    def test_one(self):
        x='this'
        assert 't' in x
    
    def test_two(self):
        x='hello'
        assert hasattr(x,'check')
        
class Testclasstwo():
    def test_third(self):
        x='iphone'
        assert 'p' in x
    
    def test_forth(self):
        x='apple'
        assert hasattr(x,'check')

#1)运行指定的文件,pytest 文件名.py    pytest test_01.py
#2)运行指定的类:pytest test_py.py::class Testclassone
#3)运行指定类下的方法:pytest test_py.py::class Testclasstwo::test_forth

------------------------------------------------------------------

5.运行后生成测试报告(htmlReport)
1)安装 pip install -U pytest-html
生成HTML格式报告:pytest --resultlog=path
运行模式:
a、pytest --html=report.html
b、pytest --html=report.html --self-contained-html #可以把css样式合并到html里,方便别人查看
2)指定某个case生成报告,和制定执行某个case的方法一样:pytest test_py.py::class Testclassone --html=report.htm

image.png

------------------------------------------------------------------

6.向在线pastebin服务发送测试报告
1)为每个测试失败的创建一个url,执行的命令是:pytest --pastebin=failed,见执行命令后的截图:

image.png
image.png
2)为所有的测试创建url,执行的命令是:pytest --pastebin=all

------------------------------------------------------------------

7.多进程运行cases
1)安装pytest-xdist:pip install -U pytest-xdist
2)运行模式:pytest test_se.py -n NUM 其中NUM填写并发的进程数。

------------------------------------------------------------------

8.重试运行cases:在做接口测试时,有事会遇到503或短时的网络波动,导致case运行失败,而这并非是我们期望的结果,此时可以就可以通过重试运行cases的方式来解决
1)安装pytest-rerunfailures: pip install -U pytest-rerunfailures
2)运行模式:pytest test_se.py --reruns NUM 其中NUM填写重试的次数。

image.png

------------------------------------------------------------------

8.显示print内容
在运行测试脚本时,为了调试或打印一些内容,我们会在代码中加一些print内容,但是在运行pytest时,这些内容不会显示出来。如果带上-s,就可以显示了。
1)运行模式:pytest test_se.py -s

image.png
另外,pytest的多种运行模式是可以叠加执行的,比如说,你想同时运行4个进程,又想打印出print的内容。可以用:
2)pytest test_se.py -s -n 4

------------------------------------------------------------------

9.传参

import pytest

data=[('admin','123123'),('admin','')]
def login(user,pwd):
'''普通登录函数'''
    print('登录账户:%s' %user)
    print('登录密码:%s' %pwd)
    if pwd:
        return True
    else:
        return False
@pytest.mark.parametrize("user,pwd",data)
def test_login(user,pwd):
    '''登录用例'''
    result=login(user,pwd)
    assert result==True,'失败原因,密码为空'
if __name__ =='__main__':
    pytest.main(["-s","test_01.py"])

------------------------------------------------------------------

10.conftest配置文件:不需要导入,与运行的用例文件要在同一个pakage下,并且有init.py文件
conftest.py:

import pytest

@pytest.fixture()
def login():
    print('输入账号,密码先登录')
    yield
    print('执行teardown!')
    print('最后关闭浏览器')

test_01.py:

import pytest

def test_one(login):
    print('用例1:登录之后其它动作111')
def test_two():    #不传login
    print('用例2:不需要登录,操作222')
def test_third(login):
    print('用例3:登录之后其它操作333'

------------------------------------------------------------------

11.parametrize参数化
1)单项参数化

import pytest

@pytest.mark.parametrize("test_input,expected",
                        [ ("3+5", 8),
                          ("2+4", 6),
                          ("6 * 9", 42),
                        ])
#test_input&expected为形参变量,多个变量用逗号分隔,所有变量用引号扩起。参数用列表一起扩起,多个参数逗号分隔,为列表
def test_eval(test_input, expected):
    assert eval(test_input) == expected
if __name__ =="__main__":
    pytest.main(["-s", "test_canshu1.py"])

注意:parametrize里的参数变量名称要和def里的一致

image.png
2)参数组合
import pytest

@pytest.mark.parametrize('x',[0,1])
@pytest.mark.parametrize('y',[2,3])
def test_1(x,y):
    print('测试数据组合:x->%s,y->%s' %(x,y))
if __name__ == '__main__':
    pytest.main(['-s','test_01.py'])
image.png
PS:喜欢的朋友,希望多多点赞打赏,谢谢啦~!

相关文章

网友评论

    本文标题:pytest单元测试框架(1)基础操作运行

    本文链接:https://www.haomeiwen.com/subject/jnvkrctx.html