程序员

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>

这段代码通过浏览器解析后就是一个简单的表格了,由于前端能力大概就这样了所以先这样了

测试环境准备

首先是打开浏览器,使用了requesaddfinalizer注册了一个环境清理的函数,函数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
上一篇下一篇

猜你喜欢

热点阅读