安装pytest
在cmd中运行命令
pip install pytest
py测试文件必须以test_开头(或则_test结尾)
pytest测试类必须以Test开头,并且不能有__init__方法
测试方法必须以test_开头
断言必须使用assert
import pytest
calss Test1:
def test_c01(self):
print("Hello")
assert 1==1 #断言
def test_c02(self)
print("Holle2")
assert 2==3
if __name__=='__main__':
pytest.mian(['test_pytest20240804.py','-s']) #文件路经 -s允许执行print语句
"""
用例运行结果返回有两中
第一种:unittest,返回每条用例的运行结果
第二种:pytest,不会逐条返回,只会返回用例执行成功
修改运行结果方法:进入python设置修改
settings->python integrated tools,选择deault testl runner
"""
使用装饰器
import pytest
@pytest.fixture(scope='class') #装饰器,声明下面的函数setup函数 setup表示初始化函数
"""
scope=function 默认级别每个方法或函数跑一次
scope=class 每个类执行一次
scope=module 每个模块执行一次
scope=session 每个项目目录执行一次 session级别,setup函数的代码写在conftest.py里,项目目录里的所有文件一共执行一次
"""
def fun1():
print('开始测试')
yield #声明下面变量是teardown的用法
print('测试完毕')
calss Test1:
#把装饰器当作一个值来使用
def test_c01(self,fun1):
print("Hello")
assert 1==1 #断言
def test_c02(self)
print("Holle2")
assert 2==3
if __name__=='__main__':
pytest.mian(['test_pytest20240804.py','-s']) #文件路经 -s允许执行print语句
pytest运行当前文件夹下所有文件,创建文件test_all.py,然后运行代码
#test_all
import pytest
if __name__=='__main__':
pytest.main(['./','-sv']) #./表示当前目录 -s表示执行打印语句 -v 表示更加详细的日志
"""
运行所用文件要用unittest
"""
setup和teardown的用法
pytest---setup和teardown简单用法 - 测试-安静 - 博客园 (cnblogs.com)
"""
在pytest中
setup是在用例执行前执行的语句
teardown是在用例而结束后执行的语句
"""
import putest
class test_pytest():
def setup():
print('开始执行')
def teardown():
print('结束执行')
def test_01():
print('用例1')
def test_02():
print('用例2')
if __name__=='__main__':
pytest.main('-s','文件路径')
yield返回数据
yield本身也可以当作类似于reture的用法,返回一个值出去,但是yield不结束函数
import pytest
@pytest.fixture(sccope='module')
def fun1():
print('开始测试')
a='Hello'
yield a #声明下面的代码是teardown的用法\
"""
yield可以当作return使用,返回一个值,但是yield不结束函数
"""
print('测试完毕')
calss Test1:
def test_01(self,fun1):
assert fun1='Hello'
def test_02(self,fun1):
assert 2==3
装饰器:数据驱动测试多条用例
class Test3:
@pytet.mark.paranetrize('result','real_result',[[1,2],[2,3],[4,5]])#声明下面函数,要参数化了
"""
result 实例化 变量1
real_result 实例化 变量2
[[1,2],[2,3],[4,5]] 可以使用元组或列表 相当于变量1和变量2的值,书写方式必须是[[],[]]这样的
"""
def test_03(self,result,real_result)
assert reslt==real_result
if __name__=='__main__':
pytest.main(['test_pytest2020.py','-s'])
pytest数据驱动
数据驱动是csv参数化,也是批量执行测试用例
list=[[1,2],[3,4],[5,6],[1,1]]
class Test2:
@pytest.mark.parametrize("result","real_result",list)
def test_c03(self,result,real_result):
assert result==real_result
# try:
# result==real_result
# except:
# logger.debug("{}和{}结果不相等".format(result,real_result))
if __name__=="__main__":
# a = Test1()
# a.my_function(0, 0, 0)
# print(a)
pttest.main("test_pytest.py","-s")
allure安装
将allure.zip押解到一个文件目录中,并将安装目录配置到path中
allure运行需要jdk环境
创建allure和pytest桥梁 pip install allure-pytest
使用allure在当前目录生成一个报告
generate生成测试报告
语法:generate 测试报告存放路径 -o 在测试报告存放路径下创建测试报告文件,--n
- 测试报告路径,如果没有路径文件,会新建一个路径文件
- -o 在指定的测试报告路径下,生成测试报告文件
- --clean 在生成新的测试报告文件之前清楚测试报告,--clean也可以写成-c
server生成测试报告临时文件,然后使用默认浏览器打开测试报告
语法,server 测试报告存放路径/测试报告文件
open
import pytest
import os
class Test3:
@pytet.mark.paranetrize('result','real_result',[[1,2],[2,3],[4,5]])#声明下面函数,要参数化了
"""
result 实例化 变量1
real_result 实例化 变量2
[[1,2],[2,3],[4,5]] 可以使用元组或列表 相当于变量1和变量2的值,书写方式必须是[[],[]]这样的
"""
def test_03(self,result,real_result)
assert reslt==real_result
if __name__=='__main__':
pytest.main(['test_pytest2020.py','-vs','alluerdir','./report']) #alluerdir可以指定一个路径存放测试测试结果,也可以不指认存放路径。 ./report测试结果存放路径
os.system('allure generate ./report -o ./report/report --clean')
#os。system生成测试报告
allurl调用allure模块
generate指定文件生成测试测试报告,report被指定生成测试报告的文件夹
generate后面可以更两个参数,-c,在测试报告生成之前,清楚历史
-o,指定文件生成测试报告
-o ./report/report,表示在report文件下生成report测试报告文件
--clean清楚测试之前的测试记录
./ 表示当前文件的的上一层目录,
../表示当前目录的上一层目录的上一层目录
os.system('allure server ./report/report )