在测试用例前加上
@pytest.mark.parametrize(“参数名”,列表数据)
参数名,用来接收每一项数据,并作为测试用例的参数.
列表数据,一组测试数据.
例子:
示例一:
incorrect_datas = [
{
"user": "xiaotiancai", "passwd": "", "check": "请输入密码"},
{
"user": "", "passwd": "888888", "check": "请输入用户名"},
{
"user": "123456789", "passwd": "88888888", "check": "用户不存在"}
]
@pytest.mark.parametrize("data", incorrect_datas)
def test_login_no_password(data):
print(data['user'], data['passwd'], data['check'])
示例二:
@pytest.mark.parametrize("a,b,c", [(1,2,3),(20,30,50),(11.22,22.33,33.55)])
def test_add(a,b,c): # 这个方法传入的参数,一定要与上面完全一致
res = a + b
assert res == c
示例三:
组合参数化,依次组合:用例有4个, 0、2,0、3,1、2,1、3(笛卡尔积)
@pytest.mark.parametrize("x", [0,1])
@pytest.mark.parametrize("y", [2,3])
def test_foo(x, y):
res = x + y
print res
pytest提供了失败重试机制,需要安装插件rerunfailures:
pip install pytest-rerunfailures
在运行时,可以使用方式为命令行参数形式: pytest --reruns 重试次数
比如:
pytest --reruns 2
表示运行失败的用例可以重新运行2次。
命令:pytest --reruns 重试次数 --reruns-delay 次数之间的延时设置
比如:
pytest --reruns 2 --reruns-delay 10
表示运行失败的用例可以重新运行两次,第一次和第二次的间隔时间为10秒钟。
也可以使用main函数形式运行:
import pytest
if __name__ == '__main__':
pytest.main(["test.py", "--reruns", "2", "--reruns-delay", "3"]) # 和命令行运行的形式一样
表示运行test.py文件,运行失败的用例可以重新运行两次,第一次和第二次的间隔时间为3秒钟。
pytest可以生成多种样式的结果:
--junitxml=path
--resultlog=report\log.txt
pip install pytest-html
命令:
--html=report\test_one_fun.html(相对路径)
生成html时,一定要注意是相对路径,不要是绝对路径!!!
import pytest
if __name__ == '__main__':
pytest.main(["test.py", "--reruns", "2", "--reruns-delay", "3", "--html=Outputs/reports/test_report.html"])
Allure Framework是一款开源的,专门用来展示测试结果的工具,可以与pytest进行集成,生成直观、清晰的测试报告。
下载之后解压,注意不要解压到C盘:
解压完成后,进入allure的bin目录下:
配置环境变量:
新建系统变量
添加path路径:
在命令行中运行allure --version,查看版本:
pip install allure-pytest
支撑插件安装完成之后,就可以在pytest命令中使用了,下面是官方文档的步骤(注意路径是相对路径):
运行示例:
import pytest
if __name__ == '__main__':
pytest.main(["test.py", "--reruns", "2", "--reruns-delay", "3", "--html=Outputs/reports/test1_report.html", "--alluredir=Outputs/allure"])
运行之后,生成了allure的相应文件:
然后在cmd命令中运行,注意在allure路径下运行,否则会找不到:
allure serve /Outputs/allure