pytest_allure2
2018-08-26 本文已影响651人
测试游记
pytest_allure2
闲时又把allure的官方文档中关于pytest的相关部分重新看了一遍,发现之前还是有遗漏了一些有趣的东西。
今天讲一下在allure的报告中放入一些描述description
有三种方式可以对用例进行描述:
1⃣️直接在test中用'''我是注释'''
写描述
2⃣️@allure.description
3⃣️@allure.description_html
由于1⃣️和2⃣️有点中规中矩就不说了
开始介绍一下3⃣️
首先它的效果如下:
allure报告2.png可以看到报告中的描述部分变成了较人性化的展示
下面开始写脚本实现
Html文件编写
写一个只有一个表单的html段
<h1>界面自动化测试-百度搜索</h1>
<table style="width:100%">
<tr>
<th>搜索的内容</th>
<th>预计结果</th>
</tr>
<tr align="center">
<td>{}</td>
<td>OK</td>
<tr align="center">
<td>{}</td>
<td>OK</td>
<tr align="center">
<td>{}</td>
<td>OK</td>
<tr align="center">
<td>{}</td>
<td>OK</td>
</tr>
</table></pre>
这段代码通过浏览器解析后就是一个简单的表格了,由于前端能力大概就这样了所以先这样了
测试环境准备
首先是打开浏览器,使用了reques
的addfinalizer
注册了一个环境清理的函数,函数closemydriver
会在测试完之后执行,也就是关闭chrome浏览器
@pytest.fixture(scope='module')
@allure.step('打开浏览器')
def mychromedriver(request):
driver = webdriver.Chrome()
driver.implicitly_wait(8)
driver.get('https://www.baidu.com')
def closemydriver():
driver.close()
request.addfinalizer(closemydriver)
return driver
测试数据
由于pytest奇怪的机制,只能人工的准备好待测试的数据
data = ['selenium','qq','2018','8月']
使用fixture遍历
装饰器中将mysearch
定义为module级别的,其实也没啥用,function效果也是一样
遍历的数据params
是之前的data
,并用ids
给用例起了几个名字
函数主体中用allure.attach
打印了正在测试的数据
接下来几行selenium的简单操作,然后把页面的标题和正在测试的数据进行了返回
@pytest.fixture(scope='module',params=data,ids=['test search selenium','test seatch qq','test search 2018','test search 8月'])
def mysearch(mychromedriver,request):
allure.attach("用例参数", "{0}".format(request.param))
mychromedriver.find_element_by_id('kw').clear()
mychromedriver.find_element_by_id('kw').send_keys(request.param)
mychromedriver.find_element_by_id('su').click()
time.sleep(2)
return mychromedriver.title,request.param
开始测试
把刚才的html一股脑的塞给@allure.description_html
就好了
下面几个是feature
,story
,testcase
是用例的层级关系看到报告中的对于展示内容就知道是什么了,口头上难以描述
测试主体简单的进行了网页标题与搜索内容的校验
@allure.description_html("""
<h1>界面自动化测试-百度搜索</h1>
<table style="width:100%">
<tr>
<th>搜索的内容</th>
<th>预计结果</th>
</tr>
<tr align="center">
<td>{}</td>
<td>OK</td>
<tr align="center">
<td>{}</td>
<td>OK</td>
<tr align="center">
<td>{}</td>
<td>OK</td>
<tr align="center">
<td>{}</td>
<td>OK</td>
</tr>
</table>""".format(data[0],data[1],data[2],data[3]))
@allure.feature("界面自动化测试")
@allure.story("界面自动化测试_baidu")
@allure.testcase("用例名:打开百度并搜索")
def test_openweb(mysearch):
title = mysearch[0]
if mysearch[1] in title:
ulRet = 1,'正常打开网页并完成搜索'
else:
ulRet = 0,'打开网页搜索失败'
assert ulRet
运行如下语句就能产生报告并在页面展示了
pytest test_1.py --alluredir=./my_allure_results
allure serve ./my_allure_results
效果图
allure报告.png全部代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:zhongxin
#datetime:2018/8/25 下午11:11
import allure
import pytest
import time
from selenium import webdriver
@pytest.fixture(scope='module')
@allure.step('打开浏览器')
def mychromedriver(request):
driver = webdriver.Chrome()
driver.implicitly_wait(8)
driver.get('https://www.baidu.com')
def closemydriver():
driver.close()
request.addfinalizer(closemydriver)
return driver
data = ['selenium','qq','2018','8月']
@pytest.fixture(scope='module',params=data,ids=['test search selenium','test seatch qq','test search 2018','test search 8月'])
def mysearch(mychromedriver,request):
allure.attach("用例参数", "{0}".format(request.param))
mychromedriver.find_element_by_id('kw').clear()
mychromedriver.find_element_by_id('kw').send_keys(request.param)
mychromedriver.find_element_by_id('su').click()
time.sleep(2)
return mychromedriver.title,request.param
@allure.description_html("""
<h1>界面自动化测试-百度搜索</h1>
<table style="width:100%">
<tr>
<th>搜索的内容</th>
<th>预计结果</th>
</tr>
<tr align="center">
<td>{}</td>
<td>OK</td>
<tr align="center">
<td>{}</td>
<td>OK</td>
<tr align="center">
<td>{}</td>
<td>OK</td>
<tr align="center">
<td>{}</td>
<td>OK</td>
</tr>
</table>""".format(data[0],data[1],data[2],data[3]))
@allure.feature("界面自动化测试")
@allure.story("界面自动化测试_baidu")
@allure.testcase("用例名:打开百度并搜索")
def test_openweb(mysearch):
title = mysearch[0]
if mysearch[1] in title:
ulRet = 1,'正常打开网页并完成搜索'
else:
ulRet = 0,'打开网页搜索失败'
assert ulRet