这里记录的是我在第二次看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文件夹,里面存储有最终的测试结果。