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
------------------------------------------------------------------
6.向在线pastebin服务发送测试报告
1)为每个测试失败的创建一个url,执行的命令是:pytest --pastebin=failed,见执行命令后的截图:
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填写重试的次数。
------------------------------------------------------------------
8.显示print内容
在运行测试脚本时,为了调试或打印一些内容,我们会在代码中加一些print内容,但是在运行pytest时,这些内容不会显示出来。如果带上-s,就可以显示了。
1)运行模式:pytest test_se.py -s
另外,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里的一致
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:喜欢的朋友,希望多多点赞打赏,谢谢啦~!
网友评论