下载以及安装请参考:接口自动化之框架搭建:Python+request+pytest+allure
Allure报告:能生成美观易读的报告,支持多种语言(python,java等),能快速上手
操作步骤:
1、生成测试结果文件(json文件)
2、使用allure的命令生成在线报告
官方文档:https://docs.qameta.io/allure
1、 allure生成测试报告
allure生成测试报告的使用步骤
(1)修改配置文件pytest.ini:把pytest.ini配置文件中的命令行参数加上如下代码--alluredir report
[pytest]
addopts = -s --alluredir report # 产生的报告文件路径
testpaths = ./script # 测试脚本的存放文件夹位置
python_files = test*.py # 需要运行的脚本test开头的.py文件
python_classes = Test*
python_functions = Test*
(2)运行pytest命令产生测试结果文件,编写好测试脚本后,在命令行中运行pytest(json文件)
在终端窗口中输入:pytest
(3)生成测试报告:在终端窗口中输入allure serve report
生成在线测试报告
例:简单生成报告的过程
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')
2、测试用例定制化执行
pytest默认是按照字母顺序要执行测试用例的,但是很多接口之间存在关联关系(例如:购买商品,需要先登录)或者存在引用关系,因此我们在执行测试用例的时候,需要控制用例执行的顺序。
pytest控制case执行顺序的插件是pytest-ordering需要安装:pip install pytest-ordering
通过装饰器的方式来控制case的执行顺序,示例:
import pytest
import requests
@pytest.mark.run(order=2)
def test_baidu():
ret=requests.get(url='http://www.baidu.com')
print('baidu')
@pytest.mark.run(order=1)
def test_163():
ret=requests.get(url='http://163.com')
print('wangzhang')
@pytest.mark.last # 执行最后一个
def test_qq():
ret=requests.get(url='http://www.qq.com')
print('qq')
@pytest.mark.run(order=3)
def test_aiqiyi():
ret=requests.get(url='http://163.com')
print('aiqiyi')
if__name__=='__main':
pytest.main(["-s,'test_ordering.py'"])
参数:
-m 设置标签模式(手动设置)
'-m','case1' # 一个
'-m','case1 or case6' #多个
'-m','not case1' # 排出法
'-m','not (case1 or case3)' #排出多个
-k 匹配用例名称(可全名,也可以模糊)
-v 运行是输出更详细的用例执行信息
-sq 简化打印信息
-s 输出打印信息
-q 简化打印信息
3、跳过测试
skip/skipif 跳过/条件跳过:在自动化测试过程中,由于环境阻塞,功能未实现,环境等因素,需要跳过某些用例
示例:
1、skip--使用跳过装饰器pytest.mark.skip
,还可以添加跳过的原因参数 reason
@pytest.mark.skip(reason='no way of current testing this')
def test_the_xxx():
xxx
2、skip--通过在测试方法执行期间跳过pytest.skip(reason=reason)
一般与if分支搭配使用
3、skipif--有条件的跳过pytest.mark.skipif
装饰器代替
import sys
@pytest.mark.skipif(sys.version_info<(3,6),reason='requires python3.6 or higher')
def test_function():
xxx
如果条件在收集期间评估为True,则将跳过测试函数,具体跳过的原因使用 命令行参数-rs
运行测试用例时出现在测试结果的控制台中。
4、skip类/模块
在类中使用skipif标记,如果判断条件为真,则该类的所有方法都跳过结果
@pytest.mark.skipif(sys.platform=='win32',reason='dose not run on windows')
class TestPosixCalls(object):
def test_function():
'will not be setup or run under win32 paltform'
【注意】:强烈建议不要在使用继承的类上使用 skipif 标记。 pytest中的一个已知错误标记可能会导致超类中的意外行为。
网友评论