接口类测试方案:
1.工具类:postman,jmeter,soapUI
2.代码类:
unittest:解释器自带框架
pytest:高效率,可定制化
nose:
RF:封装关键字
3.测试平台
前端
后端
执行机制--框架pytest
pytest框架环境搭建
1.使用pip安装pytest
pip install pytest
pip install pytest-html 原生态的报告模板
2.查看安装是否成功
pip show pytest
3.pytest执行测试用例
执行的规则:
- .py测试文件必须以test开头(或以test结尾)
- 测试类必须以Test开头,且无init方法
- 测试方法必须以test开头,def test_001()
- 断言必须使用assert
4.新建工程(规范化编程:分包分模块,分层分级写)
工程建立规范:lib(库),data(测试数据),testcase(测试用例),
5.数据驱动(参数化)
在方法前添加语法糖即可:
# @pytest.mark.parameriza('变量名',[参数化数据]) ,一组参数
@pytest.mark.parameriza('a',[1,2,3])
def test_001(self,a):
print('第一个测试用例')
assert 1+1==a
# 说明:用例会执行三次(三组数据),a分别为1,2,3
# @pytest.mark.parameriza('变量名1,变量名2',[(value1.,value2),(value2,)]) ,多组组参数
@pytest.mark.parameriza('a,b',[(1,2),(3,4),(5,6)])
def test_001(self,a,b):
print('第一个测试用例')
assert a+1==b
# 说明:用例会执行三次(三组数据),a分别为1,3,5,b分别为2,4,6
6.pytest的setup与teardown
import pytest
@pytest.fixture(scope='session') #装饰器,声明下面的函数是setup函数,缺省值为function级
#scope可以加入参数scope='class',将级别改为class
#scope可以加入参数scope='module',将级别改为module
#scope='session' 使用这个级别时,将fixture的内容写到conftest.py文件中,目录下的所有文件都使用这个配置
def fun1():
print('开始')
yield #这个关键字之后的代码相当于teardown
print('结束')
def test_c01(fun1):
assert 1==2
if __name__ == '__main__':
pytest.main(['conftest.py','-s'])
总结一下:
运行文件:pytest 用例路径 --html=./report/result.html 注意:--html= 没有空格。
还可以用main()方法来运行:pytest.main(['当前用例路径','--html=测试报告/XX.html '])
在pytest中有四种setup和teardown
1、setup_module和teardown_module在整个测试用例所在的文件中所有的方法运行前和运行后运行,只会运行一次;
2、setup_class和teardown_class则在整个文件中的一个class中所有用例的前后运行,
3、setup_method和teardown_method在class内的每个方法运行前后运行,
4、setup_function、teardown_function则是在非class下属的每个测试方法的前后运行;
执行:pytest test_login.py -s -s 输出print信息
pytest 结合Allure操作
- Allure 安装
1、下载Allure.zip并解压到任意目录(C:\allure\allure-2.13.0\)
2、添加该路径到环境变量的path中
3、cmd 安装 pip install allure-pytest
4、验证是否安装成功:cmd 中输入allure查看
5、allure报告生成
# 1、执行pytest单元测试,生成Allure报告, 数据存在/tmp目录
pytest -s --alluredir=../report/tmp # -s 表示允许执行print语句
# 2、执行命令,生成测试报告
allure generate ../report/tmp -o ..report/report --clean
- allure 报告可以展示多级
@allure.epic('1')
@allure.feature(‘2’)
@allure .story('3')
@allure.title(‘4’)
import pytest
import allure
import os
@allure.epic('项目名称')
@allure.feature('业务模块名称')
class Test100:
@allure.story('接口名称')
@allure.title('用例标题1')
def test_c100(self):
assert 1 == 2
@allure.story('接口名称2')
@allure.title('用例标题2')
def test_c101(self):
assert 1 == 1
if __name__ == '__main__':
pytest.main([__file__, '-sv','--alluredir','./report/report','--clean-alluredir'])
os.system('allure serve ./report/report')
网友评论